From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by dpdk.org (Postfix) with ESMTP id E7B8B1396 for ; Thu, 14 Sep 2017 11:45:55 +0200 (CEST) Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga104.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 14 Sep 2017 02:45:54 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.42,392,1500966000"; d="scan'208";a="1172140194" Received: from fmsmsx107.amr.corp.intel.com ([10.18.124.205]) by orsmga001.jf.intel.com with ESMTP; 14 Sep 2017 02:45:53 -0700 Received: from fmsmsx111.amr.corp.intel.com (10.18.116.5) by fmsmsx107.amr.corp.intel.com (10.18.124.205) with Microsoft SMTP Server (TLS) id 14.3.319.2; Thu, 14 Sep 2017 02:45:53 -0700 Received: from shsmsx152.ccr.corp.intel.com (10.239.6.52) by fmsmsx111.amr.corp.intel.com (10.18.116.5) with Microsoft SMTP Server (TLS) id 14.3.319.2; Thu, 14 Sep 2017 02:45:52 -0700 Received: from shsmsx151.ccr.corp.intel.com ([169.254.3.98]) by SHSMSX152.ccr.corp.intel.com ([169.254.6.93]) with mapi id 14.03.0319.002; Thu, 14 Sep 2017 17:45:50 +0800 From: "Hu, Jiayu" To: "Kavanagh, Mark B" , "Ananyev, Konstantin" CC: "dev@dpdk.org" , "Tan, Jianfeng" Thread-Topic: [PATCH v3 2/5] gso: add TCP/IPv4 GSO support Thread-Index: AQHTLTa6xEH/1lh+Fky2fmTxEUWN66K0IH5g Date: Thu, 14 Sep 2017 09:45:49 +0000 Message-ID: References: <1504598270-60080-1-git-send-email-jiayu.hu@intel.com> <1505184211-36728-1-git-send-email-jiayu.hu@intel.com> <1505184211-36728-3-git-send-email-jiayu.hu@intel.com> <2601191342CEEE43887BDE71AB9772584F249FE8@irsmsx105.ger.corp.intel.com> <20170913104407.GA57844@dpdk15.sh.intel.com> <2601191342CEEE43887BDE71AB9772584F24AACB@irsmsx105.ger.corp.intel.com> <20170914060705.GA60858@dpdk15.sh.intel.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 11.0.0.116 dlp-reaction: no-action x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiOTA1NTRjM2EtYWM3Ny00MzM3LThjYzctNTAzMWZmMDczZTE5IiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX0lDIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE2LjUuOS4zIiwiVHJ1c3RlZExhYmVsSGFzaCI6IkhRU0dFUHdIZmdzMGNkS0pYMndWVTBZVGt0cnJ4ZXNlNElaVCtvdGZ0bzQ9In0= x-ctpclassification: CTP_IC x-originating-ip: [10.239.127.40] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Subject: Re: [dpdk-dev] [PATCH v3 2/5] gso: add TCP/IPv4 GSO support X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 14 Sep 2017 09:45:56 -0000 Hi Mark, > -----Original Message----- > From: Kavanagh, Mark B > Sent: Thursday, September 14, 2017 4:52 PM > To: Hu, Jiayu ; Ananyev, Konstantin > > Cc: dev@dpdk.org; Tan, Jianfeng > Subject: RE: [PATCH v3 2/5] gso: add TCP/IPv4 GSO support >=20 > >From: Hu, Jiayu > >Sent: Thursday, September 14, 2017 7:07 AM > >To: Ananyev, Konstantin > >Cc: dev@dpdk.org; Kavanagh, Mark B ; Tan, > Jianfeng > > > >Subject: Re: [PATCH v3 2/5] gso: add TCP/IPv4 GSO support > > > >Hi Konstantin, > > > >On Thu, Sep 14, 2017 at 06:10:37AM +0800, Ananyev, Konstantin wrote: > >> > >> Hi Jiayu, > >> > >> > > > >> > > > >> > > > -----Original Message----- > >> > > > From: Ananyev, Konstantin > >> > > > Sent: Tuesday, September 12, 2017 12:18 PM > >> > > > To: Hu, Jiayu ; dev@dpdk.org > >> > > > Cc: Kavanagh, Mark B ; Tan, Jianfeng > > > >> > > > Subject: RE: [PATCH v3 2/5] gso: add TCP/IPv4 GSO support > >> > > > > >> > > > > result, when all of its GSOed segments are freed, the packet i= s > >freed > >> > > > > automatically. > >> > > > > diff --git a/lib/librte_gso/rte_gso.c b/lib/librte_gso/rte_gso= .c > >> > > > > index dda50ee..95f6ea6 100644 > >> > > > > --- a/lib/librte_gso/rte_gso.c > >> > > > > +++ b/lib/librte_gso/rte_gso.c > >> > > > > @@ -33,18 +33,53 @@ > >> > > > > > >> > > > > #include > >> > > > > > >> > > > > +#include > >> > > > > + > >> > > > > #include "rte_gso.h" > >> > > > > +#include "gso_common.h" > >> > > > > +#include "gso_tcp4.h" > >> > > > > > >> > > > > int > >> > > > > rte_gso_segment(struct rte_mbuf *pkt, > >> > > > > - struct rte_gso_ctx gso_ctx __rte_unused, > >> > > > > + struct rte_gso_ctx gso_ctx, > >> > > > > struct rte_mbuf **pkts_out, > >> > > > > uint16_t nb_pkts_out) > >> > > > > { > >> > > > > + struct rte_mempool *direct_pool, *indirect_pool; > >> > > > > + struct rte_mbuf *pkt_seg; > >> > > > > + uint16_t gso_size; > >> > > > > + uint8_t ipid_delta; > >> > > > > + int ret =3D 1; > >> > > > > + > >> > > > > if (pkt =3D=3D NULL || pkts_out =3D=3D NULL || nb_pkts_out <= 1) > >> > > > > return -EINVAL; > >> > > > > > >> > > > > - pkts_out[0] =3D pkt; > >> > > > > + if (gso_ctx.gso_size >=3D pkt->pkt_len || > >> > > > > + (pkt->packet_type & gso_ctx.gso_types) !=3D > >> > > > > + pkt->packet_type) { > >> > > > > + pkts_out[0] =3D pkt; > >> > > > > + return ret; > >> > > > > + } > >> > > > > + > >> > > > > + direct_pool =3D gso_ctx.direct_pool; > >> > > > > + indirect_pool =3D gso_ctx.indirect_pool; > >> > > > > + gso_size =3D gso_ctx.gso_size; > >> > > > > + ipid_delta =3D gso_ctx.ipid_flag =3D=3D RTE_GSO_IPID_INCREAS= E; > >> > > > > + > >> > > > > + if (is_ipv4_tcp(pkt->packet_type)) { > >> > > > > >> > > > Probably we need here: > >> > > > If (is_ipv4_tcp(pkt->packet_type) && (gso_ctx->gso_types & > >DEV_TX_OFFLOAD_TCP_TSO) !=3D 0) {... > >> > > > >> > > Sorry, actually it probably should be: > >> > > If (pkt->ol_flags & (PKT_TX_TCP_SEG | PKT_TX_IPV4) =3D=3D PKT_TX_I= PV4 > && > >> > > (gso_ctx->gso_types & DEV_TX_OFFLOAD_TCP_TSO) !=3D 0) {... > >> > > >> > I don't quite understand why the GSO library should be aware if the = TSO > >> > flag is set or not. Applications can query device TSO capability bef= ore > >> > they call the GSO library. Do I misundertsand anything? > >> > > >> > Additionally, we don't need to check if the packet is a TCP/IPv4 pac= ket > >here? > >> > >> Well, right now PMD we doesn't rely on ptype to figure out what type = of > >packet and > >> what TX offload have to be performed. > >> Instead it looks at TX part of ol_flags, and > >> My thought was that as what we doing is actually TSO in SW, it would b= e > good > >> to use the same API here too. > >> Also with that approach, by setting ol_flags properly user can use the > same > >gso_ctx and still > >> specify what segmentation to perform on a per-packet basis. > >> > >> Alternative way is to rely on ptype to distinguish should segmentation= be > >performed on that package or not. > >> The only advantage I see here is that if someone would like to add GSO > for > >some new protocol, > >> he wouldn't need to introduce new TX flag value for mbuf.ol_flags. > >> Though he still would need to update TX_OFFLOAD_* capabilities and > probably > >packet_type definitions. > >> > >> So from my perspective first variant (use HW TSO API) is more plausibl= e. > >> Wonder what is your and Mark opinions here? > > > >In the first choice, you mean: > >the GSO library uses gso_ctx->gso_types and mbuf->ol_flags to call a > specific > >GSO > >segmentation function (e.g. gso_tcp4_segment(), gso_tunnel_xxx()) for > each > >input packet. > >Applications should parse the packet type, and set an exactly correct > >DEV_TX_OFFLOAD_*_TSO > >flag to gso_types and ol_flags according to the packet type. That is, th= e > >value of gso_types > >is on a per-packet basis. Using gso_ctx->gso_types and mbuf->ol_flags at > the > >same time > >is because that DEV_TX_OFFLOAD_*_TSO only tells tunnelling type and the > inner > >L4 type, and > >we need to know L3 type by ol_flags. With this design, HW segmentation > and SW > >segmentation > >are indeed consistent. > > > >If I understand it correctly, applications need to set 'ol_flags =3D > >PKT_TX_IPV4' and > >'gso_types =3D DEV_TX_OFFLOAD_VXLAN_TNL_TSO' for a > >"ether+ipv4+udp+vxlan+ether+ipv4+ > >tcp+payload" packet. But PKT_TX_IPV4 just present the inner L3 type for > >tunneled packet. > >How about the outer L3 type? Always assume the inner and the outer L3 > type are > >the same? >=20 > Hi Jiayu, >=20 > If I'm not mistaken, I think what Konstantin is suggesting is as follows: >=20 > - The DEV_TX_OFFLOAD_*_TSO flags are currently used to describe a NIC's > TSO capabilities; the GSO capabilities may also be described using the sa= me > macros, to provide a consistent view of segmentation capabilities across = the > HW and SW implementations. Yes, DEV_TX_OFFLOAD_*_TSO stored in gso_types are used to by applications to tell the GSO library what GSO types are required. The GSO library uses o= l_flags to decide which segmentation function to use. Thanks, Jiayu >=20 > - As part of segmentation, it's still a case of checking the packet type,= but > then setting the appropriate ol_flags in the mbuf, which the GSO library = can > use to segment the packet. >=20 > Thanks, > Mark >=20 > > > >Jiayu > >> Konstantin