[dpdk-dev,0/7] support VIRTIO_F_IN_ORDER feature

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

Message

Marvin Liu June 8, 2018, 9:07 a.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 simplify vhost and device code as desc/used/avail ring are
using same index. 

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.

IN_ORDER can improve virtio/vhost performance. This patch implement
virtio driver part only, we can see significant gain there. As a result
it impacts vhost performance a little since there’s no dedicated Rx/Tx
implementation on vhost side. This can be added in another patch later.

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.9Mpps  |25.4Mpps  |31.6Mpps |
    |Normal        |12.1Mpps  |18.5Mpps  |18.9Mpps |
    +--------------+----------+----------+---------+
    
    +--------------+----------+----------------+---------+
    |Virtio->Vhost |1 Queue   |2 Queues        |4 Queues |
    +--------------+----------+----------------+---------+
    |Inorder       |16.4Mpps  |11.9 ~ 19.5Mpps |11.8Mpps |
    |Normal        |13.3Mpps  |9.8 ~ 14Mpps    |10.5Mpps |
    +--------------+----------+----------------+---------+
    
    +---------+----------+----------------+----------------+
    |Loopback |1 Queue   |2 Queues        |4 Queues        |
    +---------+----------+----------------+----------------+
    |Inorder  |6.2Mpps   |9.5 ~ 11.9Mpps  |10.6 ~ 11.3Mpps |
    +---------+----------+----------------+----------------+

Marvin Liu (7):
  vhost: announce VIRTIO_F_IN_ORDER support
  net/virtio: add VIRTIO_F_IN_ORDER definition
  net/virtio-user: add mgr_rxbuf and in_order vdev parameters
  net/virtio: free IN_ORDER descriptors
  net/virtio: support IN_ORDER Rx and Tx
  net/virtio: add IN_ORDER Rx/Tx into selection
  net/virtio: annouce VIRTIO_F_IN_ORDER support

 drivers/net/virtio/virtio_ethdev.c            |  31 +-
 drivers/net/virtio/virtio_ethdev.h            |   7 +
 drivers/net/virtio/virtio_pci.h               |   8 +
 drivers/net/virtio/virtio_rxtx.c              | 618 ++++++++++++++++--
 .../net/virtio/virtio_user/virtio_user_dev.c  |  10 +-
 .../net/virtio/virtio_user/virtio_user_dev.h  |   3 +-
 drivers/net/virtio/virtio_user_ethdev.c       |  33 +-
 drivers/net/virtio/virtqueue.c                |   8 +
 drivers/net/virtio/virtqueue.h                |   2 +
 lib/librte_vhost/socket.c                     |   4 +
 lib/librte_vhost/vhost.h                      |  10 +-
 11 files changed, 668 insertions(+), 66 deletions(-)
  

Comments

Marvin Liu June 8, 2018, 2:11 a.m. UTC | #1
Sorry, add missing loopback performance comparison.

    +---------+----------+----------------+----------------+
    |Loopback |1 Queue   |2 Queues        |4 Queues        |
    +---------+----------+----------------+----------------+
    |Inorder  |6.2Mpps   |9.5 ~ 11.9Mpps  |10.6 ~ 11.3Mpps |
    +---------+----------+----------------+----------------+
    |Normal   |7.5Mpps   |7.7 ~ 9.0Mpps   |7.6 ~ 7.8Mpps   |
    +---------+----------+----------------+----------------+

Thanks,
Marvin

> -----Original Message-----
> From: Liu, Yong
> Sent: Friday, June 08, 2018 5:07 PM
> To: maxime.coquelin@redhat.com; Bie, Tiwei <tiwei.bie@intel.com>
> Cc: Wang, Zhihong <zhihong.wang@intel.com>; dev@dpdk.org; Liu, Yong
> <yong.liu@intel.com>
> Subject: [PATCH 0/7] support VIRTIO_F_IN_ORDER feature
> 
> 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 simplify vhost and device code as desc/used/avail ring are
> using same index.
> 
> 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.
> 
> IN_ORDER can improve virtio/vhost performance. This patch implement
> virtio driver part only, we can see significant gain there. As a result
> it impacts vhost performance a little since there’s no dedicated Rx/Tx
> implementation on vhost side. This can be added in another patch later.
> 
> 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.9Mpps  |25.4Mpps  |31.6Mpps |
>     |Normal        |12.1Mpps  |18.5Mpps  |18.9Mpps |
>     +--------------+----------+----------+---------+
> 
>     +--------------+----------+----------------+---------+
>     |Virtio->Vhost |1 Queue   |2 Queues        |4 Queues |
>     +--------------+----------+----------------+---------+
>     |Inorder       |16.4Mpps  |11.9 ~ 19.5Mpps |11.8Mpps |
>     |Normal        |13.3Mpps  |9.8 ~ 14Mpps    |10.5Mpps |
>     +--------------+----------+----------------+---------+
> 
>     +---------+----------+----------------+----------------+
>     |Loopback |1 Queue   |2 Queues        |4 Queues        |
>     +---------+----------+----------------+----------------+
>     |Inorder  |6.2Mpps   |9.5 ~ 11.9Mpps  |10.6 ~ 11.3Mpps |
>     +---------+----------+----------------+----------------+
> 
> Marvin Liu (7):
>   vhost: announce VIRTIO_F_IN_ORDER support
>   net/virtio: add VIRTIO_F_IN_ORDER definition
>   net/virtio-user: add mgr_rxbuf and in_order vdev parameters
>   net/virtio: free IN_ORDER descriptors
>   net/virtio: support IN_ORDER Rx and Tx
>   net/virtio: add IN_ORDER Rx/Tx into selection
>   net/virtio: annouce VIRTIO_F_IN_ORDER support
> 
>  drivers/net/virtio/virtio_ethdev.c            |  31 +-
>  drivers/net/virtio/virtio_ethdev.h            |   7 +
>  drivers/net/virtio/virtio_pci.h               |   8 +
>  drivers/net/virtio/virtio_rxtx.c              | 618 ++++++++++++++++--
>  .../net/virtio/virtio_user/virtio_user_dev.c  |  10 +-
>  .../net/virtio/virtio_user/virtio_user_dev.h  |   3 +-
>  drivers/net/virtio/virtio_user_ethdev.c       |  33 +-
>  drivers/net/virtio/virtqueue.c                |   8 +
>  drivers/net/virtio/virtqueue.h                |   2 +
>  lib/librte_vhost/socket.c                     |   4 +
>  lib/librte_vhost/vhost.h                      |  10 +-
>  11 files changed, 668 insertions(+), 66 deletions(-)
> 
> --
> 2.17.0