diff --git a/doc/Doxyfile b/doc/Doxyfile index 6f9161f47..de3bf61b1 100644 --- a/doc/Doxyfile +++ b/doc/Doxyfile @@ -907,7 +907,7 @@ EXAMPLE_RECURSIVE = NO # that contain images that are to be included in the documentation (see the # \image command). -IMAGE_PATH = +IMAGE_PATH = img # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program diff --git a/doc/img/qemu_vhost_data_flow.svg b/doc/img/qemu_vhost_data_flow.svg new file mode 100644 index 000000000..96b4673e1 --- /dev/null +++ b/doc/img/qemu_vhost_data_flow.svg @@ -0,0 +1,2 @@ + +image/svg+xmlTomasz KulasekVhost-SCSI deviceSPDK bdev(s)(NVMe, NVMf, Ceph RBD, PMEM)SPDK vhostQEMUVirtio-SCSI deviceVhost-user driver (master)Shared hugepage memoryVirtqueuesI/O bufferspollingDMAKVMcallfdeventfd interruptirqfdVirtio-SCSI PCIdriverVMUnix domain socketVhost-user messages diff --git a/doc/vhost_processing.md b/doc/vhost_processing.md index c22f9669a..ea9a586d4 100644 --- a/doc/vhost_processing.md +++ b/doc/vhost_processing.md @@ -53,55 +53,7 @@ One of major Vhost-user use cases is networking (DPDK) or storage (SPDK) offload in QEMU. The following diagram presents how QEMU-based VM communicates with SPDK Vhost-SCSI device. -``` - +-------------------------------------QEMU-----------------------------+ +------------------------------------------SPDK vhost--------------------+ - | | | | - | +---------------------------------VM-----------------------------+ | | +-----------------------------------------+ | - | | | | | | | | - | | +----------------------------------------------------------+ | | | | | | - | | | | | | | | | | - | | | +--------------------------+--+--+-------------+------------+ | | | - | | | | | | Vhost-SCSI | | - | | | | Shared hugepage memory | | device | | - | | | | | | | | - | | | | +-----------------------------------------------------+ | | | | - | | | | | | | polling | | | - | | | | | Virtqueues +-----------------> | | - | | | Virtio-SCSI PCI driver | | | | | +-----------------------------------+ | | - | | | | +-----------------------------------------------------+ | | | | | | - | | | | | | | DMA | | SPDK bdev(s) | | | - | | | | | I/O buffers <--------------------+ (NVMe, NVMf, Ceph RBD, PMEM) | | | -+---------> | | | | | | | | | | -| | | | | +-----------------------------------------------------+ | | +-----------------------------------+ | | -| | | | | | | | | -| | | | +--------------------------+--+--+-------------+------------+ | +----------------------+ | | -| | | | | | | | | | | | | -| | +--+--------^--+----------------------------------------------+--+ | | | | Unix domain socket | | | -| | | | | | | | | | | -| | +-----------+--v-----------+-------------------------------------+ | | | +-------^--------------+ | | -| | | | | | | | | | | -| | | Virtio-SCSI device | Vhost-user driver (master) | | | +------------------------------------+----+ | -| | | | | | | | | | -| | | | | | +------------------------------------------------------------------------+ -| | | | | | | | -| | | | | | | | -| | | | | | Vhost-user messages | | -| | | | <-------------------------------------------------------+ | -| | | | | | | -| | | | +----------------+ | eventfd interrupt | -| | | | | callfd <---------------------------------------------------------------------------------+ -| | +--------------------------+--------------------+---+------------+ | -| | | | -| +----------------------------------------------------------------------+ -| | -| |irqfd -| | -| +---v---+ -| | | -+---------------------------------------------------------+ KVM | - | | - +-------+ -``` +![QEMU/SPDK vhost data flow](img/qemu_vhost_data_flow.svg) The irqfd mechanism isn't described in this document, as it KVM/QEMU-specific. Briefly speaking, doing an eventfd_write on the callfd descriptor will