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

Ananyev, Konstantin konstantin.ananyev at intel.com
Wed Aug 30 03:37:42 CEST 2017


Hi Jiayu,
Few questions/comments from me below in in next few mails.
Thanks
Konstantin

> 
> 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.

Not sure I understand the setup correctly:
So testpmd forwards packets between P0 and vhost-user port, right?
And who uses P1? iperf-server over linux kernel?
Also is P1 on another box or not?

> 
> With GSO enabled for P0 in testpmd, observed iperf throughput is ~9Gbps.

Ok, and if GSO is disabled what is the throughput?
Another stupid question: if P0 is physical 10G (ixgbe?) we can just enable a TSO on it, right?
If so, what would be the TSO numbers here?

In fact, could you probably explain a bit more, what supposed to be a main usage model for that library?
Is that to perform segmentation on (virtual) devices that doesn't support HW TSO or ...?
Again would it be for a termination point (packets were just formed and filled) by the caller,
or is that for box in the middle which just forwards packets between nodes?
If the later one, then we'll probably already have most of our packets segmented properly, no?
  
> 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