Cover Detail
Show a cover letter.
GET /api/covers/45067/?format=api
http://patches.dpdk.org/api/covers/45067/?format=api", "web_url": "http://patches.dpdk.org/project/dpdk/cover/20180921103308.16357-1-jfreimann@redhat.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": "<20180921103308.16357-1-jfreimann@redhat.com>", "list_archive_url": "https://inbox.dpdk.org/dev/20180921103308.16357-1-jfreimann@redhat.com", "date": "2018-09-21T10:32:57", "name": "[v6,00/11] implement packed virtqueues", "submitter": { "id": 745, "url": "http://patches.dpdk.org/api/people/745/?format=api", "name": "Jens Freimann", "email": "jfreimann@redhat.com" }, "mbox": "http://patches.dpdk.org/project/dpdk/cover/20180921103308.16357-1-jfreimann@redhat.com/mbox/", "series": [ { "id": 1435, "url": "http://patches.dpdk.org/api/series/1435/?format=api", "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=1435", "date": "2018-09-21T10:32:57", "name": "implement packed virtqueues", "version": 6, "mbox": "http://patches.dpdk.org/series/1435/mbox/" } ], "comments": "http://patches.dpdk.org/api/covers/45067/comments/", "headers": { "Return-Path": "<dev-bounces@dpdk.org>", "X-Original-To": "patchwork@dpdk.org", "Delivered-To": "patchwork@dpdk.org", "Received": [ "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id DB9932BA3;\n\tFri, 21 Sep 2018 12:33:17 +0200 (CEST)", "from mx1.redhat.com (mx1.redhat.com [209.132.183.28])\n\tby dpdk.org (Postfix) with ESMTP id D80EC1DA4\n\tfor <dev@dpdk.org>; Fri, 21 Sep 2018 12:33:16 +0200 (CEST)", "from smtp.corp.redhat.com\n\t(int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.25])\n\t(using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby mx1.redhat.com (Postfix) with ESMTPS id 1985588E56;\n\tFri, 21 Sep 2018 10:33:16 +0000 (UTC)", "from localhost (dhcp-192-209.str.redhat.com [10.33.192.209])\n\tby smtp.corp.redhat.com (Postfix) with ESMTPS id 03D102015AD1;\n\tFri, 21 Sep 2018 10:33:09 +0000 (UTC)" ], "From": "Jens Freimann <jfreimann@redhat.com>", "To": "dev@dpdk.org", "Cc": "tiwei.bie@intel.com,\n\tmaxime.coquelin@redhat.com,\n\tGavin.Hu@arm.com", "Date": "Fri, 21 Sep 2018 12:32:57 +0200", "Message-Id": "<20180921103308.16357-1-jfreimann@redhat.com>", "X-Scanned-By": "MIMEDefang 2.84 on 10.5.11.25", "X-Greylist": "Sender IP whitelisted, not delayed by milter-greylist-4.5.16\n\t(mx1.redhat.com [10.5.110.25]); Fri, 21 Sep 2018 10:33:16 +0000 (UTC)", "Subject": "[dpdk-dev] [PATCH v6 00/11] implement packed virtqueues", "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\t<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\t<mailto:dev-request@dpdk.org?subject=subscribe>", "Errors-To": "dev-bounces@dpdk.org", "Sender": "\"dev\" <dev-bounces@dpdk.org>" }, "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 https://github.com/oasis-tcs/virtio-docs.git (or as .pdf at\nhttps://github.com/oasis-tcs/virtio-docs/blob/master/virtio-v1.1-packed-wd10.pdf\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\nhttp://dpdk.org/doc/guides/howto/pvp_reference_benchmark.html\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\nchanges from v5->v6:\n* fix VIRTQUEUE_DUMP macro\n* rework mergeable rx buffer path, support out of order (not sure if I\n need a .next field to support chains) \n* move wmb in virtio_receive_pkts_packed() (Gavin)\n* rename to virtio_init_split/_packed (Maxime)\n* add support for ctrl virtqueues (Tiwei, thx Max for fixing)\n* rework tx path to support update_packet_stats and\n virtqueue_xmit_offload, TODO: merge with split-ring code to\n avoid a lot of duplicate code\n* remove unnecessary check for avoiding to call VIRTQUEUE_DUMP (Maxime)\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*** BLURB HERE ***\n\nJens Freimann (10):\n net/virtio: vring init for packed queues\n net/virtio: add packed virtqueue 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: add support for mergeable buffers with packed virtqueues\n net/virtio: add virtio send command packed queue support\n net/virtio: enable packed virtqueues by default\n\nYuanhan Liu (1):\n net/virtio-user: add option to use packed queues\n\n drivers/net/virtio/virtio_ethdev.c | 135 ++++-\n drivers/net/virtio/virtio_ethdev.h | 5 +\n drivers/net/virtio/virtio_pci.h | 8 +\n drivers/net/virtio/virtio_ring.h | 96 +++-\n drivers/net/virtio/virtio_rxtx.c | 490 +++++++++++++++++-\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 | 21 +\n drivers/net/virtio/virtqueue.h | 50 +-\n 10 files changed, 796 insertions(+), 35 deletions(-)" }{ "id": 45067, "url": "