[v4,0/2] introduce asynchronous data path for vhost
Message ID | 1593778906-47832-1-git-send-email-patrick.fu@intel.com (mailing list archive) |
---|---|
Headers |
Return-Path: <dev-bounces@dpdk.org> X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id E5A66A0519; Fri, 3 Jul 2020 14:34:04 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 4C1021DB49; Fri, 3 Jul 2020 14:34:04 +0200 (CEST) Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by dpdk.org (Postfix) with ESMTP id D41A01DB47 for <dev@dpdk.org>; Fri, 3 Jul 2020 14:34:01 +0200 (CEST) IronPort-SDR: zxU5JUE4pFazqknVTxVWNdeWahIWweZ3yCqlhe84qY4xcY8V1U6HKX60chHECvswQ0bSqyhUhD GUIf1KDkCoFQ== X-IronPort-AV: E=McAfee;i="6000,8403,9670"; a="165203703" X-IronPort-AV: E=Sophos;i="5.75,308,1589266800"; d="scan'208";a="165203703" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Jul 2020 05:34:00 -0700 IronPort-SDR: IDGFRSmvH8g1ZwbIDtHuL6DCL/7olbeiclrmUE9NUWB/GpFnRG4lvWD76vHLZ+9/8IMyPqGcEr Itk7/Qlbm2dg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.75,308,1589266800"; d="scan'208";a="321793445" Received: from npg-dpdk-patrickfu-sl1.sh.intel.com ([10.67.117.45]) by FMSMGA003.fm.intel.com with ESMTP; 03 Jul 2020 05:33:58 -0700 From: patrick.fu@intel.com To: dev@dpdk.org, maxime.coquelin@redhat.com, chenbo.xia@intel.com, zhihong.wang@intel.com Cc: patrick.fu@intel.com, yinan.wang@intel.com, cheng1.jiang@intel.com, cunming.liang@intel.com Date: Fri, 3 Jul 2020 20:21:44 +0800 Message-Id: <1593778906-47832-1-git-send-email-patrick.fu@intel.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1591869725-13331-1-git-send-email-patrick.fu@intel.com> References: <1591869725-13331-1-git-send-email-patrick.fu@intel.com> Subject: [dpdk-dev] [PATCH v4 0/2] introduce asynchronous data path for vhost X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions <dev.dpdk.org> List-Unsubscribe: <https://mails.dpdk.org/options/dev>, <mailto:dev-request@dpdk.org?subject=unsubscribe> List-Archive: <http://mails.dpdk.org/archives/dev/> List-Post: <mailto:dev@dpdk.org> List-Help: <mailto:dev-request@dpdk.org?subject=help> List-Subscribe: <https://mails.dpdk.org/listinfo/dev>, <mailto:dev-request@dpdk.org?subject=subscribe> Errors-To: dev-bounces@dpdk.org Sender: "dev" <dev-bounces@dpdk.org> |
Message
Patrick Fu
July 3, 2020, 12:21 p.m. UTC
From: Patrick Fu <patrick.fu@intel.com>
Performing large memory copies usually takes up a major part of CPU
cycles and becomes the hot spot in vhost-user enqueue operation. To
offload expensive memory operations from the CPU, this patch set
proposes to leverage DMA engines, e.g., I/OAT, a DMA engine in the
Intel's processor, to accelerate large copies.
Large copies are offloaded from the CPU to the DMA in an asynchronous
manner. The CPU just submits copy jobs to the DMA but without waiting
for its copy completion. Thus, there is no CPU intervention during
data transfer; we can save precious CPU cycles and improve the overall
throughput for vhost-user based applications, like OVS. During packet
transmission, it offloads large copies to the DMA and performs small
copies by the CPU, due to startup overheads associated with the DMA.
This patch set construct a general framework that applications can
leverage to attach DMA channels with vhost-user transmit queues. Four
new RTE APIs are introduced to vhost library for applications to
register and use the asynchronous data path. In addition, two new DMA
operation callbacks are defined, by which vhost-user asynchronous data
path can interact with DMA hardware. Currently only enqueue operation
for split queue is implemented, but the framework is flexible to extend
support for packed queue.
v2:
update meson file for new header file
update rte_vhost_version.map to include new APIs
rename async APIs/structures to be prefixed with "rte_vhost"
rename some variables/structures for readibility
correct minor typo in comments/license statements
refine memory allocation logic for vq internal buffer
add error message printing in some failure cases
check inflight async packets in unregistration API call
mark new APIs as experimental
v3:
use atomic_xxx() functions in updating ring index
fix a bug in async enqueue failure handling
v4:
part of the fix intended in v3 patch was missed, this patch
adds all thoes fixes
Patrick Fu (2):
vhost: introduce async enqueue registration API
vhost: introduce async enqueue for split ring
lib/librte_vhost/Makefile | 2 +-
lib/librte_vhost/meson.build | 2 +-
lib/librte_vhost/rte_vhost.h | 1 +
lib/librte_vhost/rte_vhost_async.h | 176 +++++++++++
lib/librte_vhost/rte_vhost_version.map | 4 +
lib/librte_vhost/socket.c | 20 ++
lib/librte_vhost/vhost.c | 127 +++++++-
lib/librte_vhost/vhost.h | 30 +-
lib/librte_vhost/vhost_user.c | 23 +-
lib/librte_vhost/virtio_net.c | 554 ++++++++++++++++++++++++++++++++-
10 files changed, 930 insertions(+), 9 deletions(-)
create mode 100644 lib/librte_vhost/rte_vhost_async.h