On Tue, Jun 14, 2016 at 07:53:17PM -0400, Zhihong Wang wrote:
> This patch explains all the versions of current virtio pmd implementation,
> what's the difference, and how to choose the right version.
> 
> --------------
> Changes in v2:
> 
>    1. Changes on format and few descriptions.

Change log should go ...
> 
> 
> Signed-off-by: Zhihong Wang <zhihong.wang at intel.com>
> ---

here..

>  doc/guides/nics/virtio.rst | 64 
> +++++++++++++++++++++++++++++++++++++++++-----
>  1 file changed, 58 insertions(+), 6 deletions(-)
> 
> diff --git a/doc/guides/nics/virtio.rst b/doc/guides/nics/virtio.rst
> index 06ca433..a4fef89 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,8 @@ 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 +183,7 @@ 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 +206,60 @@ 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 Versions
> +-------------------

Using "versions" here is a bit confusing to me, especially virtio PMD
supports spec version 0.95 and 1.0. Apparently, that's not what you
are talking about, virtio pmd Rx/Tx callbacks is.

So, something like "Virtio PMD Rx/Tx callbacks" is what I would suggest.

> +
> +Virtio driver has 3 versions of Rx functions and 2 versions of Tx functions.

And I will avoid using "versions".

> +
> +Rx functions:
> +
> +#. ``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``:
> +   Simple version without mergeable Rx buffer support, also fixes the 
> available ring indexes and uses vector instructions to optimize performance.

Just like coding and writing commit log, don't write long lines over 80
chars here.

Also I will use "vector" instead of "simple" here, as "vector" is more
easier to understand.

> +
> +Tx functions:
> +
> +#. ``virtio_xmit_pkts``:
> +   Regular version.
> +
> +#. ``virtio_xmit_pkts_simple``:
> +   Simple version fixes the available ring indexes to optimize performance.
> +
> +
> +By default, the non-vector versions 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``.
> +
> +
> +Setting ``txq_flags`` to ``VIRTIO_SIMPLE_FLAGS`` (0xF01) enables the simple 
> version of the virtio poll mode driver:
> +
> +*   For Rx: ``virtio_recv_pkts_vec``.
> +
> +*   For Tx: ``virtio_xmit_pkts_simple``.
> +

This paragraph says that vector Rx/Tx will be enabled when 0xf01 txq
flags is set.
> +
> +The simple version will only be enabled when:
> +
> +*   Mergeable Rx buffers is disabled.
> +
> +*   Single segment is specified.
> +
> +*   No offload support is needed.

However, you are making another statement that vector Rx/Tx will be used
when ....

That's confusing.

I'd combine the two together, to something like below:

    Vector Rx/Tx callbacks will be used when:

    * ``txq_flags`` is set to 0xf01, which implies

      * No multiple segments
      * No offload support

    * Mergeable Rx buffers is disabled.


        --yliu
> +
> +Example of using the simple version of the virtio poll mode driver in 
> ``testpmd``::
> +
> +   testpmd -c 0x7 -n 4 -- -i --txqflags=0xF01 --rxq=1 --txq=1 --nb-cores=1
> -- 
> 2.5.0

Reply via email to