[v3,00/11] support in-order feature

Message ID 20180628215235.106069-1-yong.liu@intel.com (mailing list archive)
Headers
Series support in-order feature |

Message

Marvin Liu June 28, 2018, 9:52 p.m. UTC
  In latest virtio-spec, new feature bit VIRTIO_F_IN_ORDER was introduced.
When this feature has been negotiated, virtio driver will use
descriptors in ring order: starting from offset 0 in the table, and
wrapping around at the end of the table. Vhost devices will always use
descriptors in the same order in which they have been made available.
This can reduce virtio accesses to used ring.

Based on updated virtio-spec, this series realized IN_ORDER prototype
in virtio driver. Due to new [RT]x path added into selection, also add
two new parameters mrg_rx and in_order into virtio-user vdev parameters
list. This will allow user to configure feature bits thus can impact
[RT]x path selection.

Performance of virtio user with IN_ORDER feature:

    Platform: Purely
    CPU: Intel(R) Xeon(R) Platinum 8160 CPU @ 2.10GHz
    DPDK baseline: 18.05
    Setup: testpmd with vhost vdev + testpmd with virtio vdev

    +--------------+----------+----------+---------+
    |Vhost->Virtio |1 Queue   |2 Queues  |4 Queues |
    +--------------+----------+----------+---------+
    |Inorder       |12.0Mpps  |24.2Mpps  |26.0Mpps |
    |Normal        |12.1Mpps  |18.5Mpps  |18.9Mpps |
    +--------------+----------+----------+---------+
    
    +--------------+----------+----------------+---------+
    |Virtio->Vhost |1 Queue   |2 Queues        |4 Queues |
    +--------------+----------+----------------+---------+
    |Inorder       |13.8Mpps  |10.7 ~ 15.2Mpps |11.5Mpps |
    |Normal        |13.3Mpps  |9.8 ~ 14Mpps    |10.5Mpps |
    +--------------+----------+----------------+---------+
    
    +---------+----------+----------------+----------------+
    |Loopback |1 Queue   |2 Queues        |4 Queues        |
    +---------+----------+----------------+----------------+
    |Inorder  |7.4Mpps   |9.1 ~ 11.6Mpps  |10.5 ~ 11.3Mpps |
    +---------+----------+----------------+----------------+
    |Normal   |7.5Mpps   |7.7 ~ 9.0Mpps   |7.6 ~ 7.8Mpps   |
    +---------+----------+----------------+----------------+

v3:
- refine [RT]x function selection logic
- fix in-order mergable packets index error
- combine unsupport mask patch
- doc virtio in-order update
- fix checkpatch error

v2:
- merge to latest dpdk-net-virtio 
- not use in_direct for normal xmit packets
- update available ring for each descriptor
- clean up IN_ORDER xmit function
- unmask feature bits when disabled in_order or mgr_rxbuf
- extract common part between IN_ORDER and normal functions
- update performance result

Marvin Liu (11):
  vhost: advertise support in-order feature
  net/virtio: add in-order feature bit definition
  net/virtio-user: add unsupported features mask
  net/virtio-user: add mrg_rxbuf and in_order vdev parameters
  net/virtio: free in-order descriptors before device start
  net/virtio: extract common part for in-order functions
  net/virtio: support in-order Rx and Tx
  net/virtio: add in-order Rx/Tx into selection
  net/virtio: advertise support in-order feature
  doc: add mrg_rxbuf and in_order parameters for virtio device
  doc: add in-order funciton for virtio device

 doc/guides/nics/virtio.rst                    |  27 +-
 drivers/net/virtio/virtio_ethdev.c            |  29 +-
 drivers/net/virtio/virtio_ethdev.h            |   7 +
 drivers/net/virtio/virtio_pci.h               |   8 +
 drivers/net/virtio/virtio_rxtx.c              | 635 ++++++++++++++++--
 .../net/virtio/virtio_user/virtio_user_dev.c  |  26 +-
 .../net/virtio/virtio_user/virtio_user_dev.h  |   4 +-
 drivers/net/virtio/virtio_user_ethdev.c       |  45 +-
 drivers/net/virtio/virtqueue.c                |   8 +
 drivers/net/virtio/virtqueue.h                |   2 +
 lib/librte_vhost/socket.c                     |   6 +
 lib/librte_vhost/vhost.h                      |  10 +-
 12 files changed, 723 insertions(+), 84 deletions(-)
  

Comments

Maxime Coquelin June 29, 2018, 1:10 p.m. UTC | #1
Hi,

I was about to apply it, but there are quite a few checkpatch and
git-check-log.sh issues reported.

Could you please resent with this fixed?
Also, I think it would be  better to squash the doc patches in relevant
ones.

Thanks,
Maxime
On 06/28/2018 11:52 PM, Marvin Liu wrote:
> In latest virtio-spec, new feature bit VIRTIO_F_IN_ORDER was introduced.
> When this feature has been negotiated, virtio driver will use
> descriptors in ring order: starting from offset 0 in the table, and
> wrapping around at the end of the table. Vhost devices will always use
> descriptors in the same order in which they have been made available.
> This can reduce virtio accesses to used ring.
> 
> Based on updated virtio-spec, this series realized IN_ORDER prototype
> in virtio driver. Due to new [RT]x path added into selection, also add
> two new parameters mrg_rx and in_order into virtio-user vdev parameters
> list. This will allow user to configure feature bits thus can impact
> [RT]x path selection.
> 
> Performance of virtio user with IN_ORDER feature:
> 
>      Platform: Purely
>      CPU: Intel(R) Xeon(R) Platinum 8160 CPU @ 2.10GHz
>      DPDK baseline: 18.05
>      Setup: testpmd with vhost vdev + testpmd with virtio vdev
> 
>      +--------------+----------+----------+---------+
>      |Vhost->Virtio |1 Queue   |2 Queues  |4 Queues |
>      +--------------+----------+----------+---------+
>      |Inorder       |12.0Mpps  |24.2Mpps  |26.0Mpps |
>      |Normal        |12.1Mpps  |18.5Mpps  |18.9Mpps |
>      +--------------+----------+----------+---------+
>      
>      +--------------+----------+----------------+---------+
>      |Virtio->Vhost |1 Queue   |2 Queues        |4 Queues |
>      +--------------+----------+----------------+---------+
>      |Inorder       |13.8Mpps  |10.7 ~ 15.2Mpps |11.5Mpps |
>      |Normal        |13.3Mpps  |9.8 ~ 14Mpps    |10.5Mpps |
>      +--------------+----------+----------------+---------+
>      
>      +---------+----------+----------------+----------------+
>      |Loopback |1 Queue   |2 Queues        |4 Queues        |
>      +---------+----------+----------------+----------------+
>      |Inorder  |7.4Mpps   |9.1 ~ 11.6Mpps  |10.5 ~ 11.3Mpps |
>      +---------+----------+----------------+----------------+
>      |Normal   |7.5Mpps   |7.7 ~ 9.0Mpps   |7.6 ~ 7.8Mpps   |
>      +---------+----------+----------------+----------------+
> 
> v3:
> - refine [RT]x function selection logic
> - fix in-order mergable packets index error
> - combine unsupport mask patch
> - doc virtio in-order update
> - fix checkpatch error
> 
> v2:
> - merge to latest dpdk-net-virtio
> - not use in_direct for normal xmit packets
> - update available ring for each descriptor
> - clean up IN_ORDER xmit function
> - unmask feature bits when disabled in_order or mgr_rxbuf
> - extract common part between IN_ORDER and normal functions
> - update performance result
> 
> Marvin Liu (11):
>    vhost: advertise support in-order feature
>    net/virtio: add in-order feature bit definition
>    net/virtio-user: add unsupported features mask
>    net/virtio-user: add mrg_rxbuf and in_order vdev parameters
>    net/virtio: free in-order descriptors before device start
>    net/virtio: extract common part for in-order functions
>    net/virtio: support in-order Rx and Tx
>    net/virtio: add in-order Rx/Tx into selection
>    net/virtio: advertise support in-order feature
>    doc: add mrg_rxbuf and in_order parameters for virtio device
>    doc: add in-order funciton for virtio device
> 
>   doc/guides/nics/virtio.rst                    |  27 +-
>   drivers/net/virtio/virtio_ethdev.c            |  29 +-
>   drivers/net/virtio/virtio_ethdev.h            |   7 +
>   drivers/net/virtio/virtio_pci.h               |   8 +
>   drivers/net/virtio/virtio_rxtx.c              | 635 ++++++++++++++++--
>   .../net/virtio/virtio_user/virtio_user_dev.c  |  26 +-
>   .../net/virtio/virtio_user/virtio_user_dev.h  |   4 +-
>   drivers/net/virtio/virtio_user_ethdev.c       |  45 +-
>   drivers/net/virtio/virtqueue.c                |   8 +
>   drivers/net/virtio/virtqueue.h                |   2 +
>   lib/librte_vhost/socket.c                     |   6 +
>   lib/librte_vhost/vhost.h                      |  10 +-
>   12 files changed, 723 insertions(+), 84 deletions(-)
>
  
Marvin Liu June 30, 2018, 4:07 p.m. UTC | #2
Thanks, Maxime. I have sent v4 with checkpatch and commit log warnings fixed.

Regards,
Marvin 

> -----Original Message-----
> From: Maxime Coquelin [mailto:maxime.coquelin@redhat.com]
> Sent: Friday, June 29, 2018 9:10 PM
> To: Liu, Yong <yong.liu@intel.com>; Bie, Tiwei <tiwei.bie@intel.com>
> Cc: Wang, Zhihong <zhihong.wang@intel.com>; dev@dpdk.org
> Subject: Re: [PATCH v3 00/11] support in-order feature
> 
> Hi,
> 
> I was about to apply it, but there are quite a few checkpatch and
> git-check-log.sh issues reported.
> 
> Could you please resent with this fixed?
> Also, I think it would be  better to squash the doc patches in relevant
> ones.
> 
> Thanks,
> Maxime
> On 06/28/2018 11:52 PM, Marvin Liu wrote:
> > In latest virtio-spec, new feature bit VIRTIO_F_IN_ORDER was introduced.
> > When this feature has been negotiated, virtio driver will use
> > descriptors in ring order: starting from offset 0 in the table, and
> > wrapping around at the end of the table. Vhost devices will always use
> > descriptors in the same order in which they have been made available.
> > This can reduce virtio accesses to used ring.
> >
> > Based on updated virtio-spec, this series realized IN_ORDER prototype
> > in virtio driver. Due to new [RT]x path added into selection, also add
> > two new parameters mrg_rx and in_order into virtio-user vdev parameters
> > list. This will allow user to configure feature bits thus can impact
> > [RT]x path selection.
> >
> > Performance of virtio user with IN_ORDER feature:
> >
> >      Platform: Purely
> >      CPU: Intel(R) Xeon(R) Platinum 8160 CPU @ 2.10GHz
> >      DPDK baseline: 18.05
> >      Setup: testpmd with vhost vdev + testpmd with virtio vdev
> >
> >      +--------------+----------+----------+---------+
> >      |Vhost->Virtio |1 Queue   |2 Queues  |4 Queues |
> >      +--------------+----------+----------+---------+
> >      |Inorder       |12.0Mpps  |24.2Mpps  |26.0Mpps |
> >      |Normal        |12.1Mpps  |18.5Mpps  |18.9Mpps |
> >      +--------------+----------+----------+---------+
> >
> >      +--------------+----------+----------------+---------+
> >      |Virtio->Vhost |1 Queue   |2 Queues        |4 Queues |
> >      +--------------+----------+----------------+---------+
> >      |Inorder       |13.8Mpps  |10.7 ~ 15.2Mpps |11.5Mpps |
> >      |Normal        |13.3Mpps  |9.8 ~ 14Mpps    |10.5Mpps |
> >      +--------------+----------+----------------+---------+
> >
> >      +---------+----------+----------------+----------------+
> >      |Loopback |1 Queue   |2 Queues        |4 Queues        |
> >      +---------+----------+----------------+----------------+
> >      |Inorder  |7.4Mpps   |9.1 ~ 11.6Mpps  |10.5 ~ 11.3Mpps |
> >      +---------+----------+----------------+----------------+
> >      |Normal   |7.5Mpps   |7.7 ~ 9.0Mpps   |7.6 ~ 7.8Mpps   |
> >      +---------+----------+----------------+----------------+
> >
> > v3:
> > - refine [RT]x function selection logic
> > - fix in-order mergable packets index error
> > - combine unsupport mask patch
> > - doc virtio in-order update
> > - fix checkpatch error
> >
> > v2:
> > - merge to latest dpdk-net-virtio
> > - not use in_direct for normal xmit packets
> > - update available ring for each descriptor
> > - clean up IN_ORDER xmit function
> > - unmask feature bits when disabled in_order or mgr_rxbuf
> > - extract common part between IN_ORDER and normal functions
> > - update performance result
> >
> > Marvin Liu (11):
> >    vhost: advertise support in-order feature
> >    net/virtio: add in-order feature bit definition
> >    net/virtio-user: add unsupported features mask
> >    net/virtio-user: add mrg_rxbuf and in_order vdev parameters
> >    net/virtio: free in-order descriptors before device start
> >    net/virtio: extract common part for in-order functions
> >    net/virtio: support in-order Rx and Tx
> >    net/virtio: add in-order Rx/Tx into selection
> >    net/virtio: advertise support in-order feature
> >    doc: add mrg_rxbuf and in_order parameters for virtio device
> >    doc: add in-order funciton for virtio device
> >
> >   doc/guides/nics/virtio.rst                    |  27 +-
> >   drivers/net/virtio/virtio_ethdev.c            |  29 +-
> >   drivers/net/virtio/virtio_ethdev.h            |   7 +
> >   drivers/net/virtio/virtio_pci.h               |   8 +
> >   drivers/net/virtio/virtio_rxtx.c              | 635 ++++++++++++++++--
> >   .../net/virtio/virtio_user/virtio_user_dev.c  |  26 +-
> >   .../net/virtio/virtio_user/virtio_user_dev.h  |   4 +-
> >   drivers/net/virtio/virtio_user_ethdev.c       |  45 +-
> >   drivers/net/virtio/virtqueue.c                |   8 +
> >   drivers/net/virtio/virtqueue.h                |   2 +
> >   lib/librte_vhost/socket.c                     |   6 +
> >   lib/librte_vhost/vhost.h                      |  10 +-
> >   12 files changed, 723 insertions(+), 84 deletions(-)
> >