> -----Original Message----- > From: dev [mailto:dev-boun...@dpdk.org] On Behalf Of Tan, Jianfeng > Sent: Friday, July 7, 2017 2:56 PM > To: Hu, Jiayu; dev@dpdk.org > Cc: Ananyev, Konstantin; y...@fridaylinux.org; > step...@networkplumber.org; Wu, Jingjing; Yao, Lei A > Subject: Re: [dpdk-dev] [PATCH v11 1/3] lib: add Generic Receive Offload API > framework > > > > On 7/5/2017 12:08 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. This > > patchset is to support GRO in DPDK. To support GRO, this patch > > implements a GRO API framework. > > > > 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 lightweight mode, the other is called heavyweight mode. > > If applications want to merge packets in a simple way and the number > > of packets is relatively small, they can use the lightweight mode. > > If applications need more fine-grained controls, they can choose the > > heavyweight mode. > > > > rte_gro_reassemble_burst is the main reassembly API which is used in > > lightweight mode and processes N packets at a time. For applications, > > performing GRO in lightweight mode is simple. They just need to invoke > > rte_gro_reassemble_burst. Applications can get GROed packets as soon as > > rte_gro_reassemble_burst returns. > > > > rte_gro_reassemble is the main reassembly API which is used in > > heavyweight mode and tries to merge N inputted packets with the packets > > in GRO reassembly tables. For applications, performing GRO in > heavyweight > > mode is relatively complicated. Before performing GRO, applications need > > to create a GRO context object, which keeps reassembly tables of > > desired GRO types, by rte_gro_ctrl_create. Then applications can use > > rte_gro_reassemble to merge packets. The GROed packets are in the > > reassembly tables of the GRO context object. If applications want to get > > them, applications need to manually flush them by flush API. > > > > Signed-off-by: Jiayu Hu <jiayu...@intel.com> > > --- > > config/common_base | 5 + > > lib/Makefile | 2 + > > lib/librte_gro/Makefile | 50 ++++++++++ > > lib/librte_gro/rte_gro.c | 171 > ++++++++++++++++++++++++++++++++ > > lib/librte_gro/rte_gro.h | 195 > +++++++++++++++++++++++++++++++++++++ > > lib/librte_gro/rte_gro_version.map | 12 +++ > > mk/rte.app.mk | 1 + > > 7 files changed, 436 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_version.map > > > > diff --git a/config/common_base b/config/common_base > > index 660588a..19605a2 100644 > > --- a/config/common_base > > +++ b/config/common_base > > @@ -713,6 +713,11 @@ CONFIG_RTE_LIBRTE_VHOST_DEBUG=n > > CONFIG_RTE_LIBRTE_PMD_VHOST=n > > > > # > > +# Compile GRO library
Maybe we can add experimental mark for this library as the heavy mode APIs are still not tested. You can do by adding below line: # EXPERIMENTAL: API may change without prior notice > > +# > > +CONFIG_RTE_LIBRTE_GRO=y