[ovs-dev] [PATCH v4 0/3] Add support for TSO with DPDK

Flavio Leitner fbl at sysclose.org
Thu Jan 16 17:00:32 UTC 2020


Abbreviated as TSO, TCP Segmentation Offload is a feature which enables
the network stack to delegate the TCP segmentation to the NIC reducing
the per packet CPU overhead.

A guest using vhost-user interface with TSO enabled can send TCP packets
much bigger than the MTU, which saves CPU cycles normally used to break
the packets down to MTU size and to calculate checksums.

It also saves CPU cycles used to parse multiple packets/headers during
the packet processing inside virtual switch.

If the destination of the packet is another guest in the same host, then
the same big packet can be sent through a vhost-user interface skipping
the segmentation completely. However, if the destination is not local,
the NIC hardware is instructed to do the TCP segmentation and checksum
calculation.

The first 2 patches are not really part of TSO support, but they are
required to make sure everything works.

There are good improvements sending to or receiving from veth pairs or
tap devices as well. See the iperf3 results below:

[*] veth with ethtool tx off.

VM sending to:          Default           Enabled     Enabled/Default
   Local BR             3 Gbits/sec     23 Gbits/sec      7x
   Net NS (veth)        3 Gbits/sec[*]  22 Gbits/sec      7x
   VM (same host)     2.5 Gbits/sec     24 Gbits/sec      9x
   Ext Host            10 Gbits/sec     35 Gbits/sec      3x
   Ext Host (vxlan)   8.8 Gbits/sec     (not supported) 

  Using VLAN:
   Local BR             3 Gbits/sec     23 Gbits/sec      7x
   VM (same host)     2.5 Gbits/sec     21 Gbits/sec      8x
   Ext Host           6.4 Gbits/sec     34 Gbits/sec      5x

  Using IPv6:
   Net NS (veth)      2.7 Gbits/sec[*]  22 Gbits/sec      8x
   VM (same host)     2.6 Gbits/sec     21 Gbits/sec      8x
   Ext Host           8.7 Gbits/sec     34 Gbits/sec      4x

  Conntrack:
   No packet changes: 1.41 Gbits/sec    33 Gbits/sec      23x

VM receiving from:
   Local BR           2.5 Gbits/sec     2.4 Gbits/sec     1x
   Net NS (veth)      2.5 Gbits/sec[*]  9.3 Gbits/sec     3x
   VM (same host)     4.9 Gbits/sec      25 Gbits/sec     5x
   Ext Host           9.7 Gbits/sec     9.4 Gbits/sec     1x
   Ext Host (vxlan)   5.5 Gbits/sec     (not supported)

  Using VLAN:
   Local BR           2.4 Gbits/sec     2.4 Gbits/sec     1x
   VM (same host)     3.8 Gbits/sec      24 Gbits/sec     8x
   Ext Host           9.5 Gbits/sec     9.5 Gbits/sec     1x

  Using IPv6:
   Net NS (veth)      2.2 Gbits/sec[*]   9 Gbits/sec      4x
   VM (same host)     4.5 Gbits/sec     24 Gbits/sec      5x
   Ext Host           8.9 Gbits/sec    8.9 Gbits/sec      1x

Used iperf3 -u to test UDP traffic limited at default 1Mbits/sec
and noticed no change with the exception for tunneled packets (not
supported).

Travis, AppVeyor, and Cirrus-ci passed.

Flavio Leitner (3):
  dp-packet: preserve headroom when cloning a pkt batch
  vhost: Disable multi-segmented buffers
  netdev-dpdk: Add TCP Segmentation Offload support

 Documentation/automake.mk              |   1 +
 Documentation/topics/index.rst         |   1 +
 Documentation/topics/userspace-tso.rst |  98 +++++++
 NEWS                                   |   1 +
 lib/automake.mk                        |   2 +
 lib/conntrack.c                        |  29 +-
 lib/dp-packet.h                        | 192 +++++++++++-
 lib/ipf.c                              |  32 +-
 lib/netdev-dpdk.c                      | 355 ++++++++++++++++++++---
 lib/netdev-linux-private.h             |   5 +
 lib/netdev-linux.c                     | 386 ++++++++++++++++++++++---
 lib/netdev-provider.h                  |   9 +
 lib/netdev.c                           |  78 ++++-
 lib/userspace-tso.c                    |  48 +++
 lib/userspace-tso.h                    |  23 ++
 vswitchd/bridge.c                      |   2 +
 vswitchd/vswitch.xml                   |  17 ++
 17 files changed, 1154 insertions(+), 125 deletions(-)
 create mode 100644 Documentation/topics/userspace-tso.rst
 create mode 100644 lib/userspace-tso.c
 create mode 100644 lib/userspace-tso.h

-- 
2.24.1



More information about the dev mailing list