Hi Patrick, On 6/11/20 12:02 PM, patrick...@intel.com wrote: > From: Patrick Fu <patrick...@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 frame is flexible to extend > support for dequeue & packed queue.
Thanks for this big rework of the Vhost DMA series. It looks overall good to me and is consistent with what design you suggested few months back. I don't see a big risk to integrate it in v20.08 once the few comments are taken into account. I'll try to make another pass before you send a v2. Maxime > Patrick Fu (2): > vhost: introduce async data path registration API > vhost: introduce async enqueue for split ring > > lib/librte_vhost/Makefile | 3 +- > lib/librte_vhost/rte_vhost.h | 1 + > lib/librte_vhost/rte_vhost_async.h | 172 ++++++++++++ > lib/librte_vhost/socket.c | 20 ++ > lib/librte_vhost/vhost.c | 74 ++++- > lib/librte_vhost/vhost.h | 30 ++- > lib/librte_vhost/vhost_user.c | 28 +- > lib/librte_vhost/virtio_net.c | 538 > ++++++++++++++++++++++++++++++++++++- > 8 files changed, 857 insertions(+), 9 deletions(-) > create mode 100644 lib/librte_vhost/rte_vhost_async.h >