Message ID | 1591869725-13331-1-git-send-email-patrick.fu@intel.com (mailing list archive) |
---|---|
Headers | show |
Series | introduce asynchronous data path for vhost | expand |
Hi Patrick, On 6/11/20 12:02 PM, patrick.fu@intel.com wrote: > 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 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 >
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 frame is flexible to extend support for dequeue & packed queue. 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