Show a cover letter.

GET /api/covers/44354/
Content-Type: application/json
Vary: Accept

    "id": 44354,
    "url": "",
    "web_url": "",
    "project": {
        "id": 1,
        "url": "",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "",
        "list_email": "",
        "web_url": "",
        "scm_url": "git://",
        "webscm_url": ""
    "msgid": "<>",
    "date": "2018-09-06T18:19:36",
    "name": "[v5,00/11] implement packed virtqueues",
    "submitter": {
        "id": 745,
        "url": "",
        "name": "Jens Freimann",
        "email": ""
    "mbox": "",
    "series": [
            "id": 1215,
            "url": "",
            "web_url": "",
            "date": "2018-09-06T18:19:36",
            "name": "implement packed virtqueues",
            "version": 5,
            "mbox": ""
    "comments": "",
    "headers": {
        "X-Greylist": [
            "Sender IP whitelisted, not delayed by milter-greylist-4.5.16\n\t( []); Thu, 06 Sep 2018 18:19:52 +0000 (UTC)",
            "inspected by milter-greylist-4.5.16 (\n\t[]); \n\tThu, 06 Sep 2018 18:19:52 +0000 (UTC) for IP:''\n\tDOMAIN:''\n\tHELO:'' FROM:'' RCPT:''"
        "List-Post": "<>",
        "X-Mailman-Version": "2.1.15",
        "List-Unsubscribe": "<>,\n\t<>",
        "Cc": ",\n\",
        "Delivered-To": "",
        "List-Archive": "<>",
        "Subject": "[dpdk-dev] [PATCH v5 00/11] implement packed virtqueues",
        "List-Subscribe": "<>,\n\t<>",
        "Precedence": "list",
        "List-Help": "<>",
        "From": "Jens Freimann <>",
        "Message-Id": "<>",
        "Date": "Thu,  6 Sep 2018 19:19:36 +0100",
        "X-Scanned-By": "MIMEDefang 2.79 on",
        "To": "",
        "List-Id": "DPDK patches and discussions <>",
        "X-BeenThere": "",
        "Return-Path": "<>",
        "X-Original-To": "",
        "Errors-To": "",
        "Received": [
            "from [] (localhost [])\n\tby (Postfix) with ESMTP id 372993772;\n\tThu,  6 Sep 2018 20:19:55 +0200 (CEST)",
            "from ( [])\n\tby (Postfix) with ESMTP id C9489326D\n\tfor <>; Thu,  6 Sep 2018 20:19:53 +0200 (CEST)",
            "from\n\t( [])\n\t(using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby (Postfix) with ESMTPS id A3A284072C10;\n\tThu,  6 Sep 2018 18:19:52 +0000 (UTC)",
            "from localhost ( [])\n\tby (Postfix) with ESMTPS id 92FC163AF6;\n\tThu,  6 Sep 2018 18:19:48 +0000 (UTC)"
        "Sender": "\"dev\" <>"
    "content": "This is a basic implementation of packed virtqueues as specified in the\nVirtio 1.1 draft. A compiled version of the current draft is available\nat (or as .pdf at\n\n\nIt does not implement yet indirect descriptors and checksum offloading.\n\nA packed virtqueue is different from a split virtqueue in that it\nconsists of only a single descriptor ring that replaces available and\nused ring, index and descriptor buffer.\n\nEach descriptor is readable and writable and has a flags field. These flags\nwill mark if a descriptor is available or used.  To detect new available descriptors\neven after the ring has wrapped, device and driver each have a\nsingle-bit wrap counter that is flipped from 0 to 1 and vice versa every time\nthe last descriptor in the ring is used/made available.\n\nThe idea behind this is to 1. improve performance by avoiding cache misses\nand 2. be easier for devices to implement.\n\nRegarding performance: with these patches I get 21.13 Mpps on my system\nas compared to 18.8 Mpps with the virtio 1.0 code. Packet size was 64\nbytes, 0.05% acceptable loss.  Test setup is described as in\n\n\nPacket generator:\nMoonGen\nIntel(R) Xeon(R) CPU E5-2665 0 @ 2.40GHz\nIntel X710 NIC\nRHEL 7.4\n\nDevice under test:\nIntel(R) Xeon(R) CPU E5-2667 v4 @ 3.20GHz\nIntel X710 NIC\nRHEL 7.4\n\nVM on DuT: RHEL7.4\n\nI plan to do more performance test with bigger frame sizes.\n\n\nchanges from v4->v5:\n* fix VIRTQUEUE_DUMP macro\n* fix wrap counter logic in transmit and receive functions  \n\nchanges from v3->v4:\n* added helpers to increment index and set available/used flags\n* driver keeps track of number of descriptors used\n* change logic in set_rxtx_funcs()\n* add patch for ctrl virtqueue with support for packed virtqueues\n* rename virtio-1.1.h to virtio-packed.h\n* fix wrong sizeof() in \"vhost: vring address setup for packed queues\"\n* fix coding style of function definition in \"net/virtio: add packed\n  virtqueue helpers\"\n* fix padding in vring_size()\n* move patches to enable packed virtqueues end of series\n* v4 has two open problems: I'm sending it out anyway for feedback/help:\n * when VIRTIO_NET_F_MRG_RXBUF enabled only 128 packets are send in\n   guest, i.e. when ring is full for the first time. I suspect a bug in\n   setting the avail/used flags\n\nchanges from v2->v3:\n* implement event suppression\n* add code do dump packed virtqueues\n* don't use assert in vhost code\n* rename virtio-user parameter to packed-vq\n* support rxvf flush\n\nchanges from v1->v2:\n* don't use VIRTQ_DESC_F_NEXT in used descriptors (Jason)\n* no rte_panice() in guest triggerable code (Maxime)\n* use unlikely when checking for vq (Maxime)\n* rename everything from _1_1 to _packed  (Yuanhan)\n* add two more patches to implement mergeable receive buffers\n\n\nJens Freimann (10):\n  net/virtio: vring init for packed queues\n  net/virtio: add virtio 1.1 defines\n  net/virtio: add packed virtqueue helpers\n  net/virtio: flush packed receive virtqueues\n  net/virtio: dump packed virtqueue data\n  net/virtio: implement transmit path for packed queues\n  net/virtio: implement receive path for packed queues\n  net/virtio: disable ctrl virtqueue for packed rings\n  net/virtio: add support for mergeable buffers with packed virtqueues\n  net/virtio: add support for event suppression\n\nYuanhan Liu (1):\n  net/virtio-user: add option to use packed queues\n\n drivers/net/virtio/virtio_ethdev.c            |  50 ++-\n drivers/net/virtio/virtio_ethdev.h            |   4 +\n drivers/net/virtio/virtio_pci.h               |   8 +\n drivers/net/virtio/virtio_ring.h              |  85 ++++-\n drivers/net/virtio/virtio_rxtx.c              | 360 +++++++++++++++++-\n .../net/virtio/virtio_user/virtio_user_dev.c  |  10 +-\n .../net/virtio/virtio_user/virtio_user_dev.h  |   2 +-\n drivers/net/virtio/virtio_user_ethdev.c       |  14 +-\n drivers/net/virtio/virtqueue.c                |  17 +\n drivers/net/virtio/virtqueue.h                | 113 +++++-\n 10 files changed, 630 insertions(+), 33 deletions(-)"