On Fri, 18 Dec 2020 15:47:28 +0800 Chenbo Xia <chenbo....@intel.com> wrote:
> This series introduces a new device abstraction called emudev for emulated > devices. A new library (librte_emudev) is implemented. The first emudev > driver is also introduced, which emulates Intel Adaptive Virtual Function > (iavf) as a software network device. > > This series has a dependency on librte_vfio_user patch series: > http://patchwork.dpdk.org/cover/85389/ > > Background & Motivation > ----------------------- > The disaggregated/multi-process QEMU is using VFIO-over-socket/vfio-user > as the main transport mechanism to disaggregate IO services from QEMU. > Therefore, librte_vfio_user is introduced in DPDK to accommodate > emulated devices for high performance I/O. Although vfio-user library > provides possibility of emulating devices in DPDK, DPDK does not have > a device abstraction for emulated devices. A good device abstraction will > be useful for applications or high performance data path driver. With > this consideration, emudev library is designed and implemented. It also > make it possbile to keep modular design on emulated devices by implementing > data path related logic in a standalone driver (e.g., an ethdev driver) > and keeps the unrelated logic in the emudev driver. > > Design overview > --------------- > > +---------------------------------------+ > | +---------------+ +-----------+ | > | | iavf_emudev |<-->| data path | | > | | driver | | driver | | > | +---------------+ +-----------+ | > | | | > | --------------------------- VDEV BUS | > | | | > | +---------------+ | > +--------------+ | | vdev: | | > | +----------+ | | | /path/to/vfio | | > | | Generic | | | +---------------+ | > | | vfio-dev | | | | | > | +----------+ | | | | > | +----------+ | | +----------+ | > | | vfio-user| | | | vfio-user| | > | | client | |<---|----->| server | | > | +----------+ | | +----------+ | > | QEMU/DPDK | | DPDK | > +--------------+ +---------------------------------------+ > > - Generic vfio-dev/vfio-user client/vfio-user server > Above concepts are all introduced in librte_vfio_user patch series: > http://patchwork.dpdk.org/cover/85389/ > > - vdev:/path/to/vfio. > It binds to vdev bus driver. The vdev device is defined by DPDK applications > through command line as '--vdev=emu_iavf, path=/path/to/socket' in > iavf_emudev > case. Parameters in command line include device name (emu_iavf) which is > used > to identify corresponding driver (in this case, iavf_emudev driver), > path=/path/to/socket which is used to open the transport interface to > vfio-user > client in QEMU/DPDK. > > - data path driver. > The data path handling is splited to another standalone driver for modular > design. > > > Chenbo Xia (8): > lib: introduce emudev library > doc: add emudev library guide > emu: introduce emulated iavf driver > emu/iavf: add vfio-user device register and unregister > emu/iavf: add resource management and internal logic of iavf > emu/iavf: add emudev operations to fit in emudev framework > test/emudev: introduce functional test > doc: update release notes for iavf emudev driver > > MAINTAINERS | 12 + > app/test/meson.build | 5 +- > app/test/test_emudev.c | 29 + > doc/guides/prog_guide/emudev.rst | 122 +++ > doc/guides/prog_guide/index.rst | 1 + > doc/guides/rel_notes/release_21_02.rst | 16 + > drivers/emu/iavf/iavf_emu.c | 250 ++++++ > drivers/emu/iavf/iavf_emu_internal.h | 69 ++ > drivers/emu/iavf/iavf_emu_test.c | 174 ++++ > drivers/emu/iavf/iavf_emudev.c | 237 ++++++ > drivers/emu/iavf/iavf_vfio_user.c | 1053 ++++++++++++++++++++++++ > drivers/emu/iavf/iavf_vfio_user.h | 57 ++ > drivers/emu/iavf/meson.build | 17 + > drivers/emu/iavf/rte_iavf_emu.h | 119 +++ > drivers/emu/iavf/version.map | 3 + > drivers/emu/meson.build | 6 + > drivers/meson.build | 1 + > lib/librte_emudev/meson.build | 5 + > lib/librte_emudev/rte_emudev.c | 486 +++++++++++ > lib/librte_emudev/rte_emudev.h | 410 +++++++++ > lib/librte_emudev/rte_emudev_vdev.h | 53 ++ > lib/librte_emudev/version.map | 27 + > lib/meson.build | 2 +- > 23 files changed, 3152 insertions(+), 2 deletions(-) > create mode 100644 app/test/test_emudev.c > create mode 100644 doc/guides/prog_guide/emudev.rst > create mode 100644 drivers/emu/iavf/iavf_emu.c > create mode 100644 drivers/emu/iavf/iavf_emu_internal.h > create mode 100644 drivers/emu/iavf/iavf_emu_test.c > create mode 100644 drivers/emu/iavf/iavf_emudev.c > create mode 100644 drivers/emu/iavf/iavf_vfio_user.c > create mode 100644 drivers/emu/iavf/iavf_vfio_user.h > create mode 100644 drivers/emu/iavf/meson.build > create mode 100644 drivers/emu/iavf/rte_iavf_emu.h > create mode 100644 drivers/emu/iavf/version.map > create mode 100644 drivers/emu/meson.build > create mode 100644 lib/librte_emudev/meson.build > create mode 100644 lib/librte_emudev/rte_emudev.c > create mode 100644 lib/librte_emudev/rte_emudev.h > create mode 100644 lib/librte_emudev/rte_emudev_vdev.h > create mode 100644 lib/librte_emudev/version.map > This patchset seems to have a dependency on a recent version of QEMU. Was it merged? The patchset would need to be rebased and retested on current DPDK. If still relevant please do that and resubmit.