DPDK patches and discussions
 help / color / mirror / Atom feed
* [dpdk-dev] [PATCH 0/9] Introduce vfio-user library
@ 2020-12-18  7:38 Chenbo Xia
  2020-12-18  7:38 ` [dpdk-dev] [PATCH 1/9] lib: introduce " Chenbo Xia
                   ` (10 more replies)
  0 siblings, 11 replies; 43+ messages in thread
From: Chenbo Xia @ 2020-12-18  7:38 UTC (permalink / raw)
  To: dev, thomas, david.marchand
  Cc: stephen, cunming.liang, xiuchun.lu, miao.li, jingjing.wu

This series enables DPDK to be an alternative I/O device emulation library of
building virtualized devices in separate processes outside QEMU. It introduces
a new library for device emulation (librte_vfio_user).

*librte_vfio_user* library is an implementation of VFIO-over-socket[1] (also
known as vfio-user) which is a protocol that allows a device to be virtualized
in a separate process outside of QEMU. 

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[2].
Vfio-user essentially implements the VFIO device model presented to the
user process by a set of messages over a unix-domain socket. The main
difference between application using vfio-user and application using vfio
kernel module is that device manipulation is based on socket messages for
vfio-user but system calls for vfio kernel module. The vfio-user devices
consist of a generic VFIO device type, living in QEMU, which is called the
client[3], and the core device implementation (emulated device), living
outside of QEMU, which is called the server. With emulated devices removed
from QEMU enabled by vfio-user implementation, other places should be
introduced to accommodate virtualized/emulated device. This series introduces
vfio-user support in DPDK to enable DPDK as one of the living places for
emulated device except QEMU.

This series introduce the server and client implementation of vfio-user protocol.
The server plays the role as emulated devices and the client is the device
consumer. With this implementation, DPDK will be enabled to be both device
provider and consumer.

Design overview
---------------

+--------------+     +--------------+     
| +----------+ |     | +----------+ |
| | Generic  | |     | | Emulated | |
| | vfio-dev | |     | | device   | |
| +----------+ |     | +----|-----+ |
| +----------+ |     | +----|-----+ |
| | vfio-user| |     | | vfio-user| |
| | client   | |<--->| | server   | |
| +----------+ |     | +----------+ |
| QEMU/DPDK    |     | DPDK         |
+--------------+     +--------------+

- Generic vfio-dev. 
  It is the generic vfio framework in vfio applications like QEMU or DPDK.
  Applications can keep the most of vfio device management and plug in a
  vfio-user device type. Note that in current implementation, we have not
  yet integrated client vfio-user into kernel vfio in DPDK but it is viable
  and good to do so.

- vfio-user client.
  For DPDK, it is part of librte_vfio_user implementation to provide ways to
  manipulate a vfio-user based emulated devices. This manipulation is very
  similar with kernel vfio (i.e., syscalls like ioctl, mmap and pread/pwrite).
  It is a base for vfio-user device consumer.

- vfio-user server. 
  It is server part of librte_vfio_user. It provides ways to emulate your own
  device. A device provider could only care about device layout that VFIO
  defines but does not need to know how it communicates with vfio-user client.

- Emulated device.
  It is emulated device of any type (e.g., network, crypto and etc.).

References
----------
[1]: https://patchew.org/QEMU/20201130161229.23164-1-thanos.makatos@nutanix.com/
[2]: https://wiki.qemu.org/Features/MultiProcessQEMU
[3]: https://github.com/oracle/qemu/tree/vfio-user-v0.2

Chenbo Xia (9):
  lib: introduce vfio-user library
  vfio_user: implement lifecycle related APIs
  vfio_user: implement device and region related APIs
  vfio_user: implement DMA table and socket address API
  vfio_user: implement interrupt related APIs
  vfio_user: add client APIs of device attach/detach
  vfio_user: add client APIs of DMA/IRQ/region
  test/vfio_user: introduce functional test
  doc: add vfio-user library guide

 MAINTAINERS                             |    4 +
 app/test/meson.build                    |    4 +
 app/test/test_vfio_user.c               |  646 ++++++++++
 doc/guides/prog_guide/index.rst         |    1 +
 doc/guides/prog_guide/vfio_user_lib.rst |  215 ++++
 doc/guides/rel_notes/release_21_02.rst  |   11 +
 lib/librte_vfio_user/meson.build        |   11 +
 lib/librte_vfio_user/rte_vfio_user.h    |  426 +++++++
 lib/librte_vfio_user/version.map        |   26 +
 lib/librte_vfio_user/vfio_user_base.c   |  217 ++++
 lib/librte_vfio_user/vfio_user_base.h   |  109 ++
 lib/librte_vfio_user/vfio_user_client.c |  691 ++++++++++
 lib/librte_vfio_user/vfio_user_client.h |   25 +
 lib/librte_vfio_user/vfio_user_server.c | 1553 +++++++++++++++++++++++
 lib/librte_vfio_user/vfio_user_server.h |   66 +
 lib/meson.build                         |    1 +
 16 files changed, 4006 insertions(+)
 create mode 100644 app/test/test_vfio_user.c
 create mode 100644 doc/guides/prog_guide/vfio_user_lib.rst
 create mode 100644 lib/librte_vfio_user/meson.build
 create mode 100644 lib/librte_vfio_user/rte_vfio_user.h
 create mode 100644 lib/librte_vfio_user/version.map
 create mode 100644 lib/librte_vfio_user/vfio_user_base.c
 create mode 100644 lib/librte_vfio_user/vfio_user_base.h
 create mode 100644 lib/librte_vfio_user/vfio_user_client.c
 create mode 100644 lib/librte_vfio_user/vfio_user_client.h
 create mode 100644 lib/librte_vfio_user/vfio_user_server.c
 create mode 100644 lib/librte_vfio_user/vfio_user_server.h

-- 
2.17.1


^ permalink raw reply	[flat|nested] 43+ messages in thread

end of thread, other threads:[~2021-01-19 18:26 UTC | newest]

Thread overview: 43+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-12-18  7:38 [dpdk-dev] [PATCH 0/9] Introduce vfio-user library Chenbo Xia
2020-12-18  7:38 ` [dpdk-dev] [PATCH 1/9] lib: introduce " Chenbo Xia
2020-12-18 17:13   ` Stephen Hemminger
2020-12-19  6:12     ` Xia, Chenbo
2020-12-18 17:17   ` Stephen Hemminger
2020-12-19  6:25     ` Xia, Chenbo
2020-12-18  7:38 ` [dpdk-dev] [PATCH 2/9] vfio_user: implement lifecycle related APIs Chenbo Xia
2021-01-05  8:34   ` Xing, Beilei
2021-01-05  9:58     ` Xia, Chenbo
2020-12-18  7:38 ` [dpdk-dev] [PATCH 3/9] vfio_user: implement device and region " Chenbo Xia
2021-01-06  5:51   ` Xing, Beilei
2021-01-06  7:50     ` Xia, Chenbo
2020-12-18  7:38 ` [dpdk-dev] [PATCH 4/9] vfio_user: implement DMA table and socket address API Chenbo Xia
2020-12-18  7:38 ` [dpdk-dev] [PATCH 5/9] vfio_user: implement interrupt related APIs Chenbo Xia
2020-12-30  1:04   ` Wu, Jingjing
2020-12-30  2:31     ` Xia, Chenbo
2020-12-18  7:38 ` [dpdk-dev] [PATCH 6/9] vfio_user: add client APIs of device attach/detach Chenbo Xia
2020-12-18  7:38 ` [dpdk-dev] [PATCH 7/9] vfio_user: add client APIs of DMA/IRQ/region Chenbo Xia
2021-01-07  2:41   ` Xing, Beilei
2021-01-07  7:26     ` Xia, Chenbo
2020-12-18  7:38 ` [dpdk-dev] [PATCH 8/9] test/vfio_user: introduce functional test Chenbo Xia
2020-12-18  7:38 ` [dpdk-dev] [PATCH 9/9] doc: add vfio-user library guide Chenbo Xia
2021-01-06  5:07   ` Xing, Beilei
2021-01-06  7:43     ` Xia, Chenbo
2020-12-18  9:37 ` [dpdk-dev] [PATCH 0/9] Introduce vfio-user library David Marchand
2020-12-18 14:07   ` Thanos Makatos
2021-01-14  6:14 ` [dpdk-dev] [PATCH v2 " Chenbo Xia
2021-01-14  6:14   ` [dpdk-dev] [PATCH v2 1/9] lib: introduce " Chenbo Xia
2021-01-14  6:14   ` [dpdk-dev] [PATCH v2 2/9] vfio_user: implement lifecycle related APIs Chenbo Xia
2021-01-14  6:14   ` [dpdk-dev] [PATCH v2 3/9] vfio_user: implement device and region " Chenbo Xia
2021-01-14 18:48     ` David Christensen
2021-01-19  3:22       ` Xia, Chenbo
2021-01-14  6:14   ` [dpdk-dev] [PATCH v2 4/9] vfio_user: implement DMA table and socket address API Chenbo Xia
2021-01-14  6:14   ` [dpdk-dev] [PATCH v2 5/9] vfio_user: implement interrupt related APIs Chenbo Xia
2021-01-14  6:14   ` [dpdk-dev] [PATCH v2 6/9] vfio_user: add client APIs of device attach/detach Chenbo Xia
2021-01-14  6:14   ` [dpdk-dev] [PATCH v2 7/9] vfio_user: add client APIs of DMA/IRQ/region Chenbo Xia
2021-01-14  6:14   ` [dpdk-dev] [PATCH v2 8/9] test/vfio_user: introduce functional test Chenbo Xia
2021-01-14 19:03     ` David Christensen
2021-01-19  3:27       ` Xia, Chenbo
2021-01-19 18:26         ` David Christensen
2021-01-14  6:14   ` [dpdk-dev] [PATCH v2 9/9] doc: add vfio-user library guide Chenbo Xia
2021-01-15  7:58   ` [dpdk-dev] [PATCH v2 0/9] Introduce vfio-user library David Marchand
2021-01-19  3:13     ` Xia, Chenbo

DPDK patches and discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://inbox.dpdk.org/dev/0 dev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 dev dev/ https://inbox.dpdk.org/dev \
		dev@dpdk.org
	public-inbox-index dev

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://inbox.dpdk.org/inbox.dpdk.dev


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git