[dpdk-dev] [PATCH v11 1/3] lib: add Generic Receive Offload API framework

Tan, Jianfeng jianfeng.tan at intel.com
Fri Jul 7 11:19:06 CEST 2017



> -----Original Message-----
> From: dev [mailto:dev-bounces at dpdk.org] On Behalf Of Tan, Jianfeng
> Sent: Friday, July 7, 2017 2:56 PM
> To: Hu, Jiayu; dev at dpdk.org
> Cc: Ananyev, Konstantin; yliu at fridaylinux.org;
> stephen at 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.hu at 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



More information about the dev mailing list