mbox

[0/8] Introduce emudev library and iavf emudev driver

Message ID 20201218074736.93999-1-chenbo.xia@intel.com (mailing list archive)
Headers

Message

Chenbo Xia Dec. 18, 2020, 7:47 a.m. UTC
  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