Show a cover letter.

GET /api/covers/75549/?format=api
HTTP 200 OK
Allow: GET, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 75549,
    "url": "http://patches.dpdk.org/api/covers/75549/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/cover/20200814191606.26312-1-chenbo.xia@intel.com/",
    "project": {
        "id": 1,
        "url": "http://patches.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<20200814191606.26312-1-chenbo.xia@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20200814191606.26312-1-chenbo.xia@intel.com",
    "date": "2020-08-14T19:16:04",
    "name": "[RFC,v1,0/2] Add device emulation support in DPDK",
    "submitter": {
        "id": 1276,
        "url": "http://patches.dpdk.org/api/people/1276/?format=api",
        "name": "Chenbo Xia",
        "email": "chenbo.xia@intel.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/cover/20200814191606.26312-1-chenbo.xia@intel.com/mbox/",
    "series": [
        {
            "id": 11653,
            "url": "http://patches.dpdk.org/api/series/11653/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=11653",
            "date": "2020-08-14T19:16:04",
            "name": "Add device emulation support in DPDK",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/11653/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/covers/75549/comments/",
    "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])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 4C5C8A04B0;\n\tFri, 14 Aug 2020 12:26:53 +0200 (CEST)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 4AC911C0D0;\n\tFri, 14 Aug 2020 12:26:52 +0200 (CEST)",
            "from mga03.intel.com (mga03.intel.com [134.134.136.65])\n by dpdk.org (Postfix) with ESMTP id 282C21C0CD\n for <dev@dpdk.org>; Fri, 14 Aug 2020 12:26:49 +0200 (CEST)",
            "from orsmga006.jf.intel.com ([10.7.209.51])\n by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 14 Aug 2020 03:26:48 -0700",
            "from npg-dpdk-virtio-xiachenbo-nw.sh.intel.com ([10.67.119.123])\n by orsmga006.jf.intel.com with ESMTP; 14 Aug 2020 03:26:46 -0700"
        ],
        "IronPort-SDR": [
            "\n wJ3+LFef5cBmI6btUMWDZaxTQzgKBgdvfmf2T5gvBI053foI93+WMswOq6dECQsiX6d/SeZJ7B\n d801vT/KLbpQ==",
            "\n TD2N6LjqwvX+03mvy6Zu9igk0oUfGPy8eHMypiuSbSwGap67Hka/rNna2jsiCWb2PXGtAy41fx\n r/SVPJFmzWEg=="
        ],
        "X-IronPort-AV": [
            "E=McAfee;i=\"6000,8403,9712\"; a=\"154347202\"",
            "E=Sophos;i=\"5.76,312,1592895600\"; d=\"scan'208\";a=\"154347202\"",
            "E=Sophos;i=\"5.76,312,1592895600\"; d=\"scan'208\";a=\"295717577\""
        ],
        "X-Amp-Result": "SKIPPED(no attachment in message)",
        "X-Amp-File-Uploaded": "False",
        "X-ExtLoop1": "1",
        "From": "Chenbo Xia <chenbo.xia@intel.com>",
        "To": "dev@dpdk.org, thomas@monjalon.net, xuan.ding@intel.com,\n xiuchun.lu@intel.com, cunming.liang@intel.com, changpeng.liu@intel.com",
        "Cc": "zhihong.wang@intel.com",
        "Date": "Fri, 14 Aug 2020 19:16:04 +0000",
        "Message-Id": "<20200814191606.26312-1-chenbo.xia@intel.com>",
        "X-Mailer": "git-send-email 2.17.1",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain; charset=UTF-8",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[dpdk-dev] [RFC v1 0/2] Add device emulation support in DPDK",
        "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>,\n <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>,\n <mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "This series enables DPDK to be an alternative I/O device emulation library of\nbuilding virtualized devices in separate processes outside QEMU. It introduces\na new library (librte_vfio_user), a new device class (emudev) and one pilot\ndevice provider (avf_emudev) with its backend of Ethdev PMD (avfbe_ethdev).\n\n*librte_vfio_user* is a server implementation of VFIO-over-socket[1] (also\nknown as vfio-user) which is a protocol that allows a device to be virtualized\nin a separate process outside of QEMU. \n\n*emudev* is a device type for emulated devices. It is up to device provider to\nchoose the transport. In avf_emudev case, it uses vfio-user as transport\ncommunicate with its client (e.g., QEMU).\n\n*avf_emudev* is the emudev provider of AVF which is a device specification for\nIntel Virtual Function cross generation. It’s implemented by an AVF emudev\ndriver which offers a few APIs for avfbe_ethdev or app logic to operate. \n\n*avfbe_ethdev* is a normal ethdev PMD to supply the basic I/O as backend data\npath of avf_emudev. One simple usage of avfbe_ethdev could be a para-virtualized\nbackend connected with network application logic.\n\nBackground & Motivation\n-----------------------\nIn order to reduce the attack surface, QEMU community is disaggregating QEMU by\nremoving part of device emulation from it. The disaggregated/multi-process QEMU\nis using VFIO-over-socket/vfio-user as the main transport mechanism to disaggregate\nI/O services from QEMU[2]. Vfio-user essentially implements the VFIO device model\npresented to the user process by a set of messages over a unix-domain socket. The\nmain difference between application using vfio-user and application using vfio\nkernel module is that device manipulation is based on socket messages for vfio-user\nbut system calls for vfio kernel module. The vfio-user devices consist of a generic\nVFIO device type, living in QEMU, which is called the client[3], and the core device\nimplementation (emulated device), living outside of QEMU, which is called the server. \n\nWith the introduction and support of vfio-user in QEMU, QEMU is explicitly adding\nsupport for external emulated device and data path. We are trying to leverage that\nand introducing vfio-user support in DPDK. By doing so, DPDK is enabled to be an\nalternative I/O device emulation library of building virtualized devices along with\nhigh-performance data path in separate processes outside QEMU. It will be easy for\nhardware vendors to provide virtualized solutions of their hardware devices by\nimplementing emulated device in DPDK.\n\nExcept for vfio-user introduced in DPDK, this series also introduces the first\nemulated device implementation. That is emulated AVF device (avf_emudev) implemented\nby AVF emulation driver (avf_emudev driver). Emulated AVF device demos how emulated\ndevice could be implemented in DPDK. SPDK is also investigating to implement use case\nfor NVMe. \n\nDesign overview\n---------------\n\n                    +------------------------------------------------------+\n                    |   +---------------+      +---------------+           |\n                    |   |  avf_emudev   |      |  avfbe_ethdev |           |\n                    |   |    driver     |      |     driver    |           |\n                    |   +---------------+      +---------------+           |\n                    |           |                       |                  |\n                    | ------------------------------------------- VDEV BUS |\n                    |           |                       |                  |\n                    |   +---------------+       +--------------+           |\n+--------------+    |   | vdev:         |       | vdev:        |           |\n| +----------+ |    |   | /path/to/vfio |       | avf_emudev_# |           |\n| | Generic  | |    |   +---------------+       +--------------+           |\n| | vfio-dev | |    |           |                                          |\n| +----------+ |    |           |                                          |\n| +----------+ |    |      +----------+                                    |\n| | vfio-user| |    |      | vfio-user|                                    |\n| | client   | |<---|----->| server   |                                    |\n| +----------+ |    |      +----------+                                    |\n| QEMU         |    | DPDK                                                 |\n+--------------+    +------------------------------------------------------+\n\n- vfio-user. Vfio-user in DPDK is referred to the vfio-user protocol implementation\nplaying server role. It provides transport between emulated device and generic VFIO\ndevice in QEMU. Emulated device in DPDK and generic VFIO device in QEMU are working\ntogether to present VFIO device model to VM. This series introduces vfio-user\nimplementation as a library called librte_vfio_user which is under lib/librte_vfio_user.\n\n- vdev:/path/to/vfio. It defines the emudev device and binds to vdev bus driver. The\nemudev device is defined by DPDK applications through command line as '--vdev=emu_iavf,\npath=/path/to/socket, id=#' in avf_emudev case. Parameters in command line include device\nname (emu_iavf) which is used to identify corresponding driver (in this case, avf_emudev\ndriver which implements emudev device of AVF), path=/path/to/socket which is used to open\nthe transport interface to vfio-user client in QEMU, and id which is the index of emudev\ndevice.\n\n- avf_emudev driver. It implements emulated AVF device which is the emudev provider of\nAVF. The avf_emudev_driver offers a few APIs implementation exposed by emudev device APIs\nfor avfbe_ethdev_pmd or application logic to operate. These APIs are described in\nlib/librte_emudev/rte_emudev.h.\n\n- vdev: avf_emudev_#. The vdev device is defined by DPDK application through command line\nas '--vdev=net_avfbe,id=#,avf_emu_id=#'.It is associated with emudev provider of AVF by\n'avf_emu_id=#'.\n     \n- avfbe_ethdev driver. It is a normal ethdev PMD to supply the basic I/O as backend data\npath of avf_emudev.\n\nWhy not rawdev for emulated device\n----------------------------------\nInstead of introducing new class emudev, emulated device could be presented as rawdev.\nHowever, existing rawdev APIs cannot meet the requirements of emulated device. There are\nthree API categories for emudev. They are emudev device lifecycle management, backend\nfacing APIs, and emudev device provider facing APIs respectively. Existing rawdev APIs\ncould only cover lifecycle management APIs and some of backend facing APIs. Other APIs,\neven if added to rawdev API are not required by other rawdev applications.\n \nReferences\n----------\n[1]: https://patchew.org/QEMU/1594913503-52271-1-git-send-email-thanos.makatos@nutanix.com/\n[2]: https://wiki.qemu.org/Features/MultiProcessQEMU\n[3]: https://github.com/elmarco/qemu/blob/wip/vfio-user/hw/vfio/libvfio-user.c\n\nChenbo Xia (2):\n  vfio_user: Add library for vfio over socket\n  emudev: Add library for emulated device\n\n lib/librte_emudev/rte_emudev.h       | 315 +++++++++++++++++++++++++\n lib/librte_vfio_user/rte_vfio_user.h | 335 +++++++++++++++++++++++++++\n 2 files changed, 650 insertions(+)\n create mode 100644 lib/librte_emudev/rte_emudev.h\n create mode 100644 lib/librte_vfio_user/rte_vfio_user.h"
}