From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 55BCEA0471 for ; Tue, 13 Aug 2019 04:10:33 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id B657E1BEA9; Tue, 13 Aug 2019 04:10:01 +0200 (CEST) Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by dpdk.org (Postfix) with ESMTP id D6FDD1BE91 for ; Tue, 13 Aug 2019 04:09:55 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga101.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 12 Aug 2019 19:09:55 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.64,379,1559545200"; d="scan'208";a="327540077" Received: from dpdk-virtio-tbie-2.sh.intel.com ([10.67.104.71]) by orsmga004.jf.intel.com with ESMTP; 12 Aug 2019 19:09:54 -0700 From: Tiwei Bie To: maxime.coquelin@redhat.com, zhihong.wang@intel.com, john.mcnamara@intel.com, marko.kovacevic@intel.com, dev@dpdk.org Date: Tue, 13 Aug 2019 10:07:29 +0800 Message-Id: <20190813020730.10038-6-tiwei.bie@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190813020730.10038-1-tiwei.bie@intel.com> References: <20190813020730.10038-1-tiwei.bie@intel.com> Subject: [dpdk-dev] [PATCH 5/6] doc: document packed virtqueue for virtio X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Document the packed virtqueue layout support in virtio net PMD. Signed-off-by: Tiwei Bie --- doc/guides/nics/virtio.rst | 63 ++++++++++++++++++++++++++++---------- 1 file changed, 47 insertions(+), 16 deletions(-) diff --git a/doc/guides/nics/virtio.rst b/doc/guides/nics/virtio.rst index 993e691f5..011954ff6 100644 --- a/doc/guides/nics/virtio.rst +++ b/doc/guides/nics/virtio.rst @@ -24,15 +24,19 @@ standard qemu vhost back end and vhost kni back end. Virtio Implementation in DPDK ----------------------------- -For details about the virtio spec, refer to Virtio PCI Card Specification written by Rusty Russell. +For details about the virtio spec, refer to the latest +`VIRTIO (Virtual I/O) Device Specification +`_. -As a PMD, virtio provides packet reception and transmission callbacks virtio_recv_pkts and virtio_xmit_pkts. +As a PMD, virtio provides packet reception and transmission callbacks. -In virtio_recv_pkts, index in range [vq->vq_used_cons_idx , vq->vq_ring.used->idx) in vring is available for virtio to burst out. +In Rx, packets described by the used descriptors in vring are available +for virtio to burst out. -In virtio_xmit_pkts, same index range in vring is available for virtio to clean. -Virtio will enqueue to be transmitted packets into vring, advance the vq->vq_ring.avail->idx, -and then notify the host back end if necessary. +In Tx, packets described by the used descriptors in vring are available +for virtio to clean. Virtio will enqueue to be transmitted packets into +vring, make them available to the device, and then notify the host back +end if necessary. Features and Limitations of virtio PMD -------------------------------------- @@ -201,37 +205,52 @@ The packet transmission flow is: Virtio PMD Rx/Tx Callbacks -------------------------- -Virtio driver has 4 Rx callbacks and 2 Tx callbacks. +Virtio driver has 6 Rx callbacks and 3 Tx callbacks. Rx callbacks: #. ``virtio_recv_pkts``: - Regular version without mergeable Rx buffer support. + Regular version without mergeable Rx buffer support for split virtqueue. #. ``virtio_recv_mergeable_pkts``: - Regular version with mergeable Rx buffer support. + Regular version with mergeable Rx buffer support for split virtqueue. #. ``virtio_recv_pkts_vec``: Vector version without mergeable Rx buffer support, also fixes the available - ring indexes and uses vector instructions to optimize performance. + ring indexes and uses vector instructions to optimize performance for split + virtqueue. #. ``virtio_recv_pkts_inorder``: - In-order version with mergeable and non-mergeable Rx buffer support. + In-order version with mergeable and non-mergeable Rx buffer support + for split virtqueue. + +#. ``virtio_recv_pkts_packed``: + Regular and in-order version without mergeable Rx buffer support for + packed virtqueue. + +#. ``virtio_recv_mergeable_pkts_packed``: + Regular and in-order version with mergeable Rx buffer support for packed + virtqueue. Tx callbacks: #. ``virtio_xmit_pkts``: - Regular version. + Regular version for split virtqueue. #. ``virtio_xmit_pkts_inorder``: - In-order version. + In-order version for split virtqueue. + +#. ``virtio_xmit_pkts_packed``: + Regular and in-order version for packed virtqueue. By default, the non-vector callbacks are used: -* For Rx: If mergeable Rx buffers is disabled then ``virtio_recv_pkts`` is - used; otherwise ``virtio_recv_mergeable_pkts``. +* For Rx: If mergeable Rx buffers is disabled then ``virtio_recv_pkts`` + or ``virtio_recv_pkts_packed`` will be used, otherwise + ``virtio_recv_mergeable_pkts`` or ``virtio_recv_mergeable_pkts_packed`` + will be used. -* For Tx: ``virtio_xmit_pkts``. +* For Tx: ``virtio_xmit_pkts`` or ``virtio_xmit_pkts_packed`` will be used. Vector callbacks will be used when: @@ -242,6 +261,8 @@ The corresponding callbacks are: * For Rx: ``virtio_recv_pkts_vec``. +There is no vector callbacks for packed virtqueue for now. + Example of using the vector version of the virtio poll mode driver in ``testpmd``:: @@ -250,10 +271,15 @@ Example of using the vector version of the virtio poll mode driver in In-order callbacks only work on simulated virtio user vdev. +For split virtqueue: + * For Rx: If in-order is enabled then ``virtio_recv_pkts_inorder`` is used. * For Tx: If in-order is enabled then ``virtio_xmit_pkts_inorder`` is used. +For packed virtqueue, the default callbacks already support the +in-order feature. + Interrupt mode -------------- @@ -372,3 +398,8 @@ Below devargs are supported by the virtio-user vdev: It is used to enable virtio device in-order feature. (Default: 1 (enabled)) + +#. ``packed_vq``: + + It is used to enable virtio device packed virtqueue feature. + (Default: 0 (disabled)) -- 2.17.1