From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 3C85BA00BE; Tue, 7 Jul 2020 07:07:04 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 7CB0B1D6D5; Tue, 7 Jul 2020 07:07:03 +0200 (CEST) Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by dpdk.org (Postfix) with ESMTP id EB6091BED9 for ; Tue, 7 Jul 2020 07:07:01 +0200 (CEST) IronPort-SDR: sT7t40gmOTZ0TE49Cli+QcwJj0sS780sPgMeL6V3jQ3ElHcrvi2YGo/A8ntTxueScfKc5vRkJp 6g3lXEy1QOnw== X-IronPort-AV: E=McAfee;i="6000,8403,9674"; a="135005145" X-IronPort-AV: E=Sophos;i="5.75,321,1589266800"; d="scan'208";a="135005145" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Jul 2020 22:07:00 -0700 IronPort-SDR: HZpoZfTLsRd9rgmXSh0lAPCr/+lJ2WwAHKGHhfKZy9zyoIiXlnWT2DpZfCWOk/2QsjmDXDYP5M BehYu0/fYY0A== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.75,321,1589266800"; d="scan'208";a="427346628" Received: from npg-dpdk-patrickfu-casc2.sh.intel.com ([10.67.119.92]) by orsmga004.jf.intel.com with ESMTP; 06 Jul 2020 22:06: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: Tue, 7 Jul 2020 13:07:07 +0800 Message-Id: <20200707050709.205480-1-patrick.fu@intel.com> X-Mailer: git-send-email 2.18.4 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 v6 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 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" From: Patrick Fu 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 v5: minor changes on some function/variable names reset CPU batch copy packet count when async enqueue error occurs disable virtio log feature in async copy mode minor optimization on async shadow index flush v6: add some background introduction in the commit message 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 | 27 ++ 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 | 551 ++++++++++++++++++++++++- 10 files changed, 934 insertions(+), 9 deletions(-) create mode 100644 lib/librte_vhost/rte_vhost_async.h -- 2.18.4