[dpdk-dev] [PATCH 0/5] Support TCP/IPv4, VxLAN and GRE GSO in DPDK

Jiayu Hu jiayu.hu at intel.com
Thu Aug 24 16:15:39 CEST 2017


Generic Segmentation Offload (GSO) is a SW technique to split large
packets into small ones. Akin to TSO, GSO enables applications to
operate on large packets, thus reducing per-packet processing overhead.

To enable more flexibility to applications, DPDK GSO is implemented
as a standalone library. Applications explicitly use the GSO library
to segment packets. This patch adds GSO support to DPDK for specific
packet types: specifically, TCP/IPv4, VxLAN, and GRE.

The first patch introduces the GSO API framework. The second patch
adds GSO support for TCP/IPv4 packets (containing an optional VLAN
tag). The third patch adds GSO support for VxLAN packets that contain
outer IPv4, and inner TCP/IPv4 headers (plus optional inner and/or 
outer VLAN tags). The fourth patch adds GSO support for GRE packets
that contain outer IPv4, and inner TCP/IPv4 headers (with optional 
outer VLAN tag). The last patch in the series enables TCP/IPv4, VxLAN,
and GRE GSO in testpmd's checksum forwarding engine.

The performance of TCP/IPv4 GSO on a 10Gbps link is demonstrated using
iperf. Setup for the test is described as follows:

a. Connect 2 x 10Gbps physical ports (P0, P1), together physically.
b. Launch testpmd with P0 and a vhost-user port, and use csum
   forwarding engine.
c. Select IP and TCP HW checksum calculation for P0; select TCP HW
   checksum calculation for vhost-user port.
d. Launch a VM with csum and tso offloading enabled.
e. Run iperf-client on virtio-net port in the VM to send TCP packets.

With GSO enabled for P0 in testpmd, observed iperf throughput is ~9Gbps.
The experimental data of VxLAN and GRE will be shown later.

Jiayu Hu (3):
  lib: add Generic Segmentation Offload API framework
  gso/lib: add TCP/IPv4 GSO support
  app/testpmd: enable TCP/IPv4, VxLAN and GRE GSO

Mark Kavanagh (2):
  lib/gso: add VxLAN GSO support
  lib/gso: add GRE GSO support

 app/test-pmd/cmdline.c                  | 121 +++++++++
 app/test-pmd/config.c                   |  25 ++
 app/test-pmd/csumonly.c                 |  68 ++++-
 app/test-pmd/testpmd.c                  |   9 +
 app/test-pmd/testpmd.h                  |  10 +
 config/common_base                      |   5 +
 lib/Makefile                            |   2 +
 lib/librte_eal/common/include/rte_log.h |   1 +
 lib/librte_gso/Makefile                 |  52 ++++
 lib/librte_gso/gso_common.c             | 431 ++++++++++++++++++++++++++++++++
 lib/librte_gso/gso_common.h             | 180 +++++++++++++
 lib/librte_gso/gso_tcp.c                |  82 ++++++
 lib/librte_gso/gso_tcp.h                |  73 ++++++
 lib/librte_gso/gso_tunnel.c             |  62 +++++
 lib/librte_gso/gso_tunnel.h             |  46 ++++
 lib/librte_gso/rte_gso.c                | 100 ++++++++
 lib/librte_gso/rte_gso.h                | 122 +++++++++
 lib/librte_gso/rte_gso_version.map      |   7 +
 mk/rte.app.mk                           |   1 +
 19 files changed, 1392 insertions(+), 5 deletions(-)
 create mode 100644 lib/librte_gso/Makefile
 create mode 100644 lib/librte_gso/gso_common.c
 create mode 100644 lib/librte_gso/gso_common.h
 create mode 100644 lib/librte_gso/gso_tcp.c
 create mode 100644 lib/librte_gso/gso_tcp.h
 create mode 100644 lib/librte_gso/gso_tunnel.c
 create mode 100644 lib/librte_gso/gso_tunnel.h
 create mode 100644 lib/librte_gso/rte_gso.c
 create mode 100644 lib/librte_gso/rte_gso.h
 create mode 100644 lib/librte_gso/rte_gso_version.map

-- 
2.7.4



More information about the dev mailing list