From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Ananyev, Konstantin" Subject: Re: [PATCH 0/5] Support TCP/IPv4, VxLAN and GRE GSO in DPDK Date: Wed, 30 Aug 2017 01:37:42 +0000 Message-ID: <2601191342CEEE43887BDE71AB9772584F23E07B@IRSMSX103.ger.corp.intel.com> References: <1503584144-63181-1-git-send-email-jiayu.hu@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Cc: "Kavanagh, Mark B" , "Tan, Jianfeng" To: "Hu, Jiayu" , "dev@dpdk.org" Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by dpdk.org (Postfix) with ESMTP id 853C1100F for ; Wed, 30 Aug 2017 03:37:46 +0200 (CEST) In-Reply-To: <1503584144-63181-1-git-send-email-jiayu.hu@intel.com> Content-Language: en-US List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Hi Jiayu, Few questions/comments from me below in in next few mails. Thanks Konstantin >=20 > 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. >=20 > 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. >=20 > 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. >=20 > The performance of TCP/IPv4 GSO on a 10Gbps link is demonstrated using > iperf. Setup for the test is described as follows: >=20 > 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? >=20 > 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 H= W TSO or ...? Again would it be for a termination point (packets were just formed and fil= led) 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 segm= ented properly, no? =20 > The experimental data of VxLAN and GRE will be shown later. >=20 > 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 >=20 > Mark Kavanagh (2): > lib/gso: add VxLAN GSO support > lib/gso: add GRE GSO support >=20 > 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 >=20 > -- > 2.7.4