[ovs-dev,v4,0/7] dpdk: Add support for TSO
mbox series

Message ID 20190911081127.2140-1-michalx.obrembski@intel.com
Headers show
  • dpdk: Add support for TSO
Related show


Michal Obrembski Sept. 11, 2019, 8:11 a.m. UTC
From: Michal Obrembski <michalx.obrembski@intel.com>

Enabling TSO offload allows a host stack to delegate the segmentation of
oversized TCP packets to the underlying physical NIC, if supported. In the case
of a VM this means that the segmentation of the packets is not performed by the
guest kernel, but by the host NIC itself. In turn, since the TSO calculations
and checksums are being performed in hardware, this alleviates the CPU load on
the host system. In inter VM communication this might account to significant
savings, and higher throughput, even more so if the VMs are running on the same

Thus, although inter VM communication is already possible as is, there's a
sacrifice in terms of CPU, which may affect the overall throughput.

This series adds support for TSO in OvS-DPDK, by making use of the TSO
offloading feature already supported by DPDK vhost backend, having the
following scenarios in mind:
- Inter VM communication on the same host;
  - Inter VM communication on different hosts;
    - The same two use cases above, but on a VLAN network.

The work is based on [1]; It has been rebased to run on top of the
multi-segment mbufs work (v14) [2] and re-worked to use DPDK v18.11.

This patch is mostly rebased into current master a work started by
Tiago Lam [3]

[1] https://patchwork.ozlabs.org/patch/749564/
[2] https://mail.openvswitch.org/pipermail/ovs-dev/2019-January/355103.html
[3] https://patchwork.ozlabs.org/project/openvswitch/list/?series=85807&state=*

v4: - Rebase on multi-segments v15;
    - Fix OVN tests regression introduced in earlier patch;
    - Small refactor of variables names in netdev-native-tnl.c;
    - Fix checkpatch.py line-too-long failures introducend in earlier patch.

v3: - Rebase on multi-segments v14;
    - Fix dp_packet_is_tso() by checking for the PKT_TX_L4_MASK
            offload flag as well;
    - In netdev_dpdk_eth_tx_burst(), revert the logic to
            minimize the impact for the default case (multi-segment
      mbufs disabled) (1/3, Ian Stokes);
    - Fix warnings in VLOG_WARNs for 32bits and when compiling
            dp_packet_is_tso() without DPDK (2/3 Ian Stokes);
    - Fix docs and rename netdev_dpdk_filter_packet_len() to
            netdev_dpdk_filter_packet() as it now filters packet based
      on TSO (3/3, Ian Stokes).

Artur Twardowski (2):
  Give the variables more meaningful names
  Too long line split into two

Michal Obrembski (1):
  Fix OVN failing tests.

Tiago Lam (4):
  netdev-dpdk: Validate packets burst before Tx.
  netdev-dpdk: Consider packets marked for TSO.
  netdev-dpdk: Enable TSO when using multi-seg mbufs
  Performance improvements and native tnl fixes.

 Documentation/automake.mk           |   1 +
 Documentation/topics/dpdk/index.rst |   1 +
 Documentation/topics/dpdk/tso.rst   |  99 ++++++++++++++++
 NEWS                                |   1 +
 lib/dp-packet.h                     |  34 ++++--
 lib/flow.c                          |  81 +++++---------
 lib/netdev-bsd.c                    |  11 +-
 lib/netdev-dpdk.c                   | 218 ++++++++++++++++++++++++++++++------
 lib/netdev-dummy.c                  |  11 +-
 lib/netdev-linux.c                  |  15 +++
 lib/netdev-native-tnl.c             |  45 ++++----
 11 files changed, 395 insertions(+), 122 deletions(-)
 create mode 100644 Documentation/topics/dpdk/tso.rst