Message ID | 20201219062806.56477-1-chenbo.xia@intel.com (mailing list archive) |
---|---|
Headers |
Return-Path: <dev-bounces@dpdk.org> X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id E50C3A04B5; Sat, 19 Dec 2020 07:43:17 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id B689BCACF; Sat, 19 Dec 2020 07:43:15 +0100 (CET) Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by dpdk.org (Postfix) with ESMTP id 77D55CACA for <dev@dpdk.org>; Sat, 19 Dec 2020 07:43:13 +0100 (CET) IronPort-SDR: GNTo8RLBof+1gbNaRj194phPm9ZRx+smf+HcRRlfHS1kHOpR+UTw1b1FZRcWdxoIwbWYUzjtJr SoglrkDG68tA== X-IronPort-AV: E=McAfee;i="6000,8403,9839"; a="163285184" X-IronPort-AV: E=Sophos;i="5.78,432,1599548400"; d="scan'208";a="163285184" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Dec 2020 22:43:11 -0800 IronPort-SDR: MKOpm9h33ZqqBv0N606JnJcpLPs08zH1tMVg57yCbBUzuwUnJh1JU2+FQXpotMYd9ThQjeUE+c 2nM4GAtIiNcQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.78,432,1599548400"; d="scan'208";a="454449583" Received: from npg-dpdk-virtio-xiachenbo-nw.sh.intel.com ([10.67.119.123]) by fmsmga001.fm.intel.com with ESMTP; 18 Dec 2020 22:43:09 -0800 From: Chenbo Xia <chenbo.xia@intel.com> To: dev@dpdk.org, thomas@monjalon.net, david.marchand@redhat.com Cc: stephen@networkplumber.org, cunming.liang@intel.com, xiuchun.lu@intel.com, miao.li@intel.com, jingjing.wu@intel.com Date: Sat, 19 Dec 2020 14:27:58 +0800 Message-Id: <20201219062806.56477-1-chenbo.xia@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20201218074736.93999-1-chenbo.xia@intel.com> References: <20201218074736.93999-1-chenbo.xia@intel.com> Subject: [dpdk-dev] [PATCH v2 0/8] Introduce emudev library and iavf emudev driver X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions <dev.dpdk.org> List-Unsubscribe: <https://mails.dpdk.org/options/dev>, <mailto:dev-request@dpdk.org?subject=unsubscribe> List-Archive: <http://mails.dpdk.org/archives/dev/> List-Post: <mailto:dev@dpdk.org> List-Help: <mailto:dev-request@dpdk.org?subject=help> List-Subscribe: <https://mails.dpdk.org/listinfo/dev>, <mailto:dev-request@dpdk.org?subject=subscribe> Errors-To: dev-bounces@dpdk.org Sender: "dev" <dev-bounces@dpdk.org> |
Series |
Introduce emudev library and iavf emudev driver
|
|
Message
Chenbo Xia
Dec. 19, 2020, 6:27 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. Why not rawdev for emulated device ---------------------------------- Instead of introducing new class emudev, emulated device could be presented as rawdev. However, existing rawdev APIs cannot meet the requirements of emulated device. There are three API categories for emudev. They are emudev device lifecycle management, backend facing APIs, and emudev device provider facing APIs respectively. Existing rawdev APIs could only cover lifecycle management APIs and some of backend facing APIs. Other APIs, even if added to rawdev API are not required by other rawdev applications. ---------------------------------- v2: - fix driver meson build file 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
Comments
19/12/2020 07:27, Chenbo Xia: > 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. As voted today in the Technical Board meeting, there will be a draft repository to host this initiative. A proposed name for the git tree is: dpdk-draft-emudev Feel free to propose a better name. This series cannot be merged in the main repository until the Qemu specification is made official. When Qemu part will be complete, we can assume more reviews of the DPDK related code. In the meantime, the draft repository will help getting interest, testing, reviews and opinions.
Hi Thomas, > -----Original Message----- > From: Thomas Monjalon <thomas@monjalon.net> > Sent: Thursday, January 14, 2021 12:52 AM > To: Xia, Chenbo <chenbo.xia@intel.com> > Cc: dev@dpdk.org; david.marchand@redhat.com; stephen@networkplumber.org; Liang, > Cunming <cunming.liang@intel.com>; Lu, Xiuchun <xiuchun.lu@intel.com>; Li, > Miao <miao.li@intel.com>; Wu, Jingjing <jingjing.wu@intel.com>; > techboard@dpdk.org > Subject: Re: [dpdk-dev] [PATCH v2 0/8] Introduce emudev library and iavf > emudev driver > > 19/12/2020 07:27, Chenbo Xia: > > 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. > > > As voted today in the Technical Board meeting, > there will be a draft repository to host this initiative. > A proposed name for the git tree is: > dpdk-draft-emudev > Feel free to propose a better name. This works fine. > > This series cannot be merged in the main repository > until the Qemu specification is made official. > When Qemu part will be complete, we can assume more reviews > of the DPDK related code. OK. > In the meantime, the draft repository will help getting interest, > testing, reviews and opinions. Thanks for doing this 😊 Cheers, Chenbo > >