[dpdk-dev] [PATCH v5 0/3] Support TCP/IPv4 GRO in DPDK
Tan, Jianfeng
jianfeng.tan at intel.com
Mon Jun 19 03:39:11 CEST 2017
Hi Jiayu,
You need to update the document:
- Release note file: release_17_08.rst.
- A howto doc is welcomed.
On 6/18/2017 3:21 PM, Jiayu Hu wrote:
> Generic Receive Offload (GRO) is a widely used SW-based offloading
> technique to reduce per-packet processing overhead. It gains performance
> by reassembling small packets into large ones. Therefore, we propose to
> support GRO in DPDK.
>
> To enable more flexibility to applications, DPDK GRO is implemented as
> a user library. Applications explicitly use the GRO library to merge
> small packets into large ones. DPDK GRO provides two reassembly modes.
> One is called lightweigth mode, the other is called heavyweight mode.
> If applications want merge packets in a simple way, they can use
> lightweigth mode. If applications need more fine-grained controls,
> they can choose heavyweigth mode.
So what's the real difference between the two modes? Might be an example
is good way to clarify.
>
> This patchset is to support TCP/IPv4 GRO in DPDK. The first patch is to
> provide a GRO API framework. The second patch is to support TCP/IPv4 GRO.
> The last patch demonstrates how to use GRO library in app/testpmd.
In which mode?
>
> We perform two iperf tests (with DPDK GRO and without DPDK GRO) to see
> the performance gains from DPDK GRO. Specifically, the experiment
> environment is:
> a. Two 10Gbps physical ports (p0 and p1) on one host are linked together;
> b. p0 is in networking namespace ns1, whose IP is 1.1.2.3. Iperf client
> runs on p0, which sends TCP/IPv4 packets. The OS in VM is ubuntu 14.04;
> c. testpmd runs on p1. Besides, testpmd has a vdev which connects to a
> VM via vhost-user and virtio-net. The VM runs iperf server, whose IP
> is 1.1.2.4;
> d. p0 turns on TSO; VM turns off kernel GRO; testpmd runs in iofwd mode.
> iperf client and server use the following commands:
> - client: ip netns exec ns1 iperf -c 1.1.2.4 -i2 -t 60 -f g -m
> - server: iperf -s -f g
> Two test cases are:
> a. w/o DPDK GRO: run testpmd without GRO
> b. w DPDK GRO: testpmd enables GRO for p1
> Result:
> With GRO, the throughput improvement is around 40%.
Do you try running several pairs of iperf-s and iperf-c tests (on 40Gb
NICs)? It can not only prove the performance, but also the functionality
correctness.
Thanks,
Jianfeng
>
> Change log
> ==========
> v5:
> - fix some bugs
> - fix coding style issues
> v4:
> - implement DPDK GRO as an application-used library
> - introduce lightweight and heavyweight working modes to enable
> fine-grained controls to applications
> - replace cuckoo hash tables with simpler table structure
> v3:
> - fix compilation issues.
> v2:
> - provide generic reassembly function;
> - implement GRO as a device ability:
> add APIs for devices to support GRO;
> add APIs for applications to enable/disable GRO;
> - update testpmd example.
>
> Jiayu Hu (3):
> lib: add Generic Receive Offload API framework
> lib/gro: add TCP/IPv4 GRO support
> app/testpmd: enable TCP/IPv4 GRO
>
> app/test-pmd/cmdline.c | 45 ++++
> app/test-pmd/config.c | 29 +++
> app/test-pmd/iofwd.c | 6 +
> app/test-pmd/testpmd.c | 3 +
> app/test-pmd/testpmd.h | 11 +
> config/common_base | 5 +
> lib/Makefile | 1 +
> lib/librte_gro/Makefile | 51 +++++
> lib/librte_gro/rte_gro.c | 248 ++++++++++++++++++++
> lib/librte_gro/rte_gro.h | 217 ++++++++++++++++++
> lib/librte_gro/rte_gro_tcp.c | 527 +++++++++++++++++++++++++++++++++++++++++++
> lib/librte_gro/rte_gro_tcp.h | 210 +++++++++++++++++
> mk/rte.app.mk | 1 +
> 13 files changed, 1354 insertions(+)
> create mode 100644 lib/librte_gro/Makefile
> create mode 100644 lib/librte_gro/rte_gro.c
> create mode 100644 lib/librte_gro/rte_gro.h
> create mode 100644 lib/librte_gro/rte_gro_tcp.c
> create mode 100644 lib/librte_gro/rte_gro_tcp.h
>
More information about the dev
mailing list