[dpdk-dev,v3] doc: virtio PMD Rx/Tx callbacks

Message ID 1467343681-91812-1-git-send-email-zhihong.wang@intel.com (mailing list archive)
State Accepted, archived
Delegated to: Yuanhan Liu
Headers

Commit Message

Zhihong Wang July 1, 2016, 3:28 a.m. UTC
  This patch explains current virtio PMD Rx/Tx callbacks, to help understand
what's the difference, and how to enable the right ones.

Signed-off-by: Zhihong Wang <zhihong.wang@intel.com>
Acked-by: John McNamara <john.mcnamara@intel.com>

--------------
Changes in v3:

   1. Rephrase for clearer description.

--------------
Changes in v2:

   1. Changes on format and few descriptions.

---
 doc/guides/nics/virtio.rst | 75 ++++++++++++++++++++++++++++++++++++++++++----
 1 file changed, 69 insertions(+), 6 deletions(-)
  

Comments

Yuanhan Liu July 4, 2016, 2:56 a.m. UTC | #1
On Thu, Jun 30, 2016 at 11:28:01PM -0400, Zhihong Wang wrote:
> This patch explains current virtio PMD Rx/Tx callbacks, to help understand
> what's the difference, and how to enable the right ones.
> 
> Signed-off-by: Zhihong Wang <zhihong.wang@intel.com>
> Acked-by: John McNamara <john.mcnamara@intel.com>

Applied to dpdk-next-virtio.

> --------------
> Changes in v3:

However, this is still wrong. It must start with 3 dashes, ---.

    $ man git am
    
         The patch is expected to be inline, directly following the
         message. Any line that is of the form:
    
         ·   three-dashes and end-of-line, or
    
         ·   a line that begins with "diff -", or
    
         ·   a line that begins with "Index: "
    
         is taken as the beginning of a patch, and the commit log message
         is terminated before the first occurrence of such a line.
    

This is just a note; I have fixed it while apply.

	--yliu
  
Zhihong Wang July 4, 2016, 3 a.m. UTC | #2
> -----Original Message-----
> From: Yuanhan Liu [mailto:yuanhan.liu@linux.intel.com]
> Sent: Monday, July 4, 2016 10:57 AM
> To: Wang, Zhihong <zhihong.wang@intel.com>
> Cc: dev@dpdk.org; Richardson, Bruce <bruce.richardson@intel.com>; Mcnamara,
> John <john.mcnamara@intel.com>
> Subject: Re: [PATCH v3] doc: virtio PMD Rx/Tx callbacks
> 
> On Thu, Jun 30, 2016 at 11:28:01PM -0400, Zhihong Wang wrote:
> > This patch explains current virtio PMD Rx/Tx callbacks, to help understand
> > what's the difference, and how to enable the right ones.
> >
> > Signed-off-by: Zhihong Wang <zhihong.wang@intel.com>
> > Acked-by: John McNamara <john.mcnamara@intel.com>
> 
> Applied to dpdk-next-virtio.
> 
> > --------------
> > Changes in v3:
> 
> However, this is still wrong. It must start with 3 dashes, ---.
> 
>     $ man git am
> 
>          The patch is expected to be inline, directly following the
>          message. Any line that is of the form:
> 
>          *   three-dashes and end-of-line, or
> 
>          *   a line that begins with "diff -", or
> 
>          *   a line that begins with "Index: "
> 
>          is taken as the beginning of a patch, and the commit log message
>          is terminated before the first occurrence of such a line.
> 
> 
> This is just a note; I have fixed it while apply.

Noted. Thanks!

> 
> 	--yliu
  

Patch

diff --git a/doc/guides/nics/virtio.rst b/doc/guides/nics/virtio.rst
index 06ca433..c6335d4 100644
--- a/doc/guides/nics/virtio.rst
+++ b/doc/guides/nics/virtio.rst
@@ -73,7 +73,7 @@  In this release, the virtio PMD driver provides the basic functionality of packe
 
 *   It supports multicast packets and promiscuous mode.
 
-*   The descriptor number for the RX/TX queue is hard-coded to be 256 by qemu.
+*   The descriptor number for the Rx/Tx queue is hard-coded to be 256 by qemu.
     If given a different descriptor number by the upper application,
     the virtio PMD generates a warning and fall back to the hard-coded value.
 
@@ -163,8 +163,9 @@  Host2VM communication example
     which means received packets come from vEth0, and transmitted packets is sent to vEth0.
 
 #.  In the guest, bind the virtio device to the uio_pci_generic kernel module and start the forwarding application.
-    When the virtio port in guest bursts rx, it is getting packets from the raw socket's receive queue.
-    When the virtio port bursts tx, it is sending packet to the tx_q.
+    When the virtio port in guest bursts Rx, it is getting packets from the
+    raw socket's receive queue.
+    When the virtio port bursts Tx, it is sending packet to the tx_q.
 
     .. code-block:: console
 
@@ -183,7 +184,9 @@  Host2VM communication example
 
     The packet reception and transmission flow path is:
 
-    IXIA packet generator->82599 PF->KNI rx queue->KNI raw socket queue->Guest VM virtio port 0 rx burst->Guest VM virtio port 0 tx burst-> KNI tx queue->82599 PF-> IXIA packet generator
+    IXIA packet generator->82599 PF->KNI Rx queue->KNI raw socket queue->Guest
+    VM virtio port 0 Rx burst->Guest VM virtio port 0 Tx burst-> KNI Tx queue
+    ->82599 PF-> IXIA packet generator
 
 Virtio with qemu virtio Back End
 --------------------------------
@@ -206,8 +209,68 @@  Virtio with qemu virtio Back End
 
 In this example, the packet reception flow path is:
 
-    IXIA packet generator->82599 PF->Linux Bridge->TAP0's socket queue-> Guest VM virtio port 0 rx burst-> Guest VM 82599 VF port1 tx burst-> IXIA packet generator
+    IXIA packet generator->82599 PF->Linux Bridge->TAP0's socket queue-> Guest
+    VM virtio port 0 Rx burst-> Guest VM 82599 VF port1 Tx burst-> IXIA packet
+    generator
 
 The packet transmission flow is:
 
-    IXIA packet generator-> Guest VM 82599 VF port1 rx burst-> Guest VM virtio port 0 tx burst-> tap -> Linux Bridge->82599 PF-> IXIA packet generator
+    IXIA packet generator-> Guest VM 82599 VF port1 Rx burst-> Guest VM virtio
+    port 0 Tx burst-> tap -> Linux Bridge->82599 PF-> IXIA packet generator
+
+
+Virtio PMD Rx/Tx Callbacks
+--------------------------
+
+Virtio driver has 3 Rx callbacks and 2 Tx callbacks.
+
+Rx callbacks:
+
+#. ``virtio_recv_pkts``:
+   Regular version without mergeable Rx buffer support.
+
+#. ``virtio_recv_mergeable_pkts``:
+   Regular version with mergeable Rx buffer support.
+
+#. ``virtio_recv_pkts_vec``:
+   Vector version without mergeable Rx buffer support, also fixes the available
+   ring indexes and uses vector instructions to optimize performance.
+
+Tx callbacks:
+
+#. ``virtio_xmit_pkts``:
+   Regular version.
+
+#. ``virtio_xmit_pkts_simple``:
+   Vector version fixes the available ring indexes to optimize performance.
+
+
+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 Tx: ``virtio_xmit_pkts``.
+
+
+Vector callbacks will be used when:
+
+*   ``txq_flags`` is set to ``VIRTIO_SIMPLE_FLAGS`` (0xF01), which implies:
+
+    *   Single segment is specified.
+
+    *   No offload support is needed.
+
+*   Mergeable Rx buffers is disabled.
+
+The corresponding callbacks are:
+
+*   For Rx: ``virtio_recv_pkts_vec``.
+
+*   For Tx: ``virtio_xmit_pkts_simple``.
+
+
+Example of using the vector version of the virtio poll mode driver in
+``testpmd``::
+
+   testpmd -c 0x7 -n 4 -- -i --txqflags=0xF01 --rxq=1 --txq=1 --nb-cores=1