[dpdk-dev] [PATCH v2 0/5] Support TCP/IPv4, VxLAN and GRE GSO in DPDK
Jiayu Hu
jiayu.hu at intel.com
Tue Sep 5 09:57:45 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), which are in the same
machine, together physically.
b. Launch testpmd with P0 and a vhost-user port, and use csum
forwarding engine with "retry".
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 enabling csum and tso, the VM can send large TCP/IPv4 packets
(mss is up to 64KB).
f. P1 is assigned to linux kernel and enabled kernel GRO. Run
iperf-server on P1.
We conduct three iperf tests:
test-1: enable GSO for P0 in testpmd, and set max GSO segment length
to 1518B. Run two iperf-client in the VM.
test-2: enable TSO for P0 in testpmd, and set TSO segsz to 1518B. Run
two iperf-client in the VM.
test-3: disable GSO and TSO in testpmd. Run two iperf-client in the VM.
Throughput of the above three tests:
test-1: ~9Gbps
test-2: 9.5Gbps
test-3: 3Mbps
The experimental data of VxLAN and GRE will be shown later.
Change log
==========
v2:
- merge data segments whose data_len is less than mss into a large data
segment in gso_do_segment().
- use mbuf->packet_type/l2_len/l3_len etc. instead of parsing the packet
header in rte_gso_segment().
- provide IP id macros for applications to select fixed or incremental IP
ids.
- change the defination of gso_types in struct rte_gso_ctx.
- replace rte_pktmbuf_detach() with rte_pktmbuf_free().
- refactor gso_update_pkt_headers().
- change the return value of rte_gso_segment().
- remove parameter checks in rte_gso_segment().
- use rte_net_get_ptype() in app/test-pmd/csumonly.c to fill
mbuf->packet_type.
- add a new GSO command in testpmd to show GSO configuration for ports.
- misc: fix typo and optimize function description.
Jiayu Hu (3):
gso: add Generic Segmentation Offload API framework
gso: add TCP/IPv4 GSO support
app/testpmd: enable TCP/IPv4, VxLAN and GRE GSO
Mark Kavanagh (2):
gso: add VxLAN GSO support
gso: add GRE GSO support
app/test-pmd/cmdline.c | 178 ++++++++++++++++++++
app/test-pmd/config.c | 24 +++
app/test-pmd/csumonly.c | 60 ++++++-
app/test-pmd/testpmd.c | 15 ++
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 | 281 ++++++++++++++++++++++++++++++++
lib/librte_gso/gso_common.h | 156 ++++++++++++++++++
lib/librte_gso/gso_tcp.c | 83 ++++++++++
lib/librte_gso/gso_tcp.h | 76 +++++++++
lib/librte_gso/gso_tunnel.c | 61 +++++++
lib/librte_gso/gso_tunnel.h | 75 +++++++++
lib/librte_gso/rte_gso.c | 99 +++++++++++
lib/librte_gso/rte_gso.h | 133 +++++++++++++++
lib/librte_gso/rte_gso_version.map | 7 +
mk/rte.app.mk | 1 +
19 files changed, 1315 insertions(+), 4 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