[dpdk-dev] [PATCH v6 00/42] Pipeline alignment with the P4 language

Dumitrescu, Cristian cristian.dumitrescu at intel.com
Thu Oct 1 12:45:40 CEST 2020


Hi David,

> -----Original Message-----
> From: David Marchand <david.marchand at redhat.com>
> Sent: Wednesday, September 30, 2020 8:34 PM
> To: Dumitrescu, Cristian <cristian.dumitrescu at intel.com>
> Cc: dev <dev at dpdk.org>; Thomas Monjalon <thomas at monjalon.net>
> Subject: Re: [PATCH v6 00/42] Pipeline alignment with the P4 language
> 
> On Wed, Sep 30, 2020 at 8:34 AM Cristian Dumitrescu
> <cristian.dumitrescu at intel.com> wrote:
> >
> > This patch set introduces a new pipeline type that combines the DPDK
> > performance with the flexibility of the P4-16 language[1]. The new API
> > can be used either by itself to code a complete software switch (SWX)
> > or data plane app, or in combination with the open-source P4 compiler
> > P4C [2], potentially acting as a P4C back-end, thus allowing the P4
> > programs to be translated to the DPDK API and run on multi-core CPUs.
> >
> > Main new features:
> >
> > * Nothing is hard-wired, everything is dynamically defined: The packet
> >   headers (i.e. protocols), the packet meta-data, the actions, the
> >   tables and the pipeline itself are dynamically defined instead of
> >   having to be selected from a pre-defined set.
> >
> > * Instructions: The actions and the life of the packet through the
> >   pipeline are defined with instructions that manipulate the pipeline
> >   objects mentioned above. The pipeline is the main function of the
> >   packet program, with actions as subroutines triggered by the tables.
> >
> > * Call external plugins: Extern objects and functions can be defined
> >   to call functionality that cannot be efficiently implemented with
> >   the existing pipeline-oriented instruction set, such as: special
> >   error detecting/correcting codes, crypto, meters, stats arrays,
> >   heuristics, etc.
> >
> > * Better control plane interaction: Transaction-oriented table update
> >   mechanism that supports multi-table atomic updates. Multiple tables
> >   can be updated in a single step with only the before and after table
> >   sets visible to the packets. Alignment with P4Runtime [3].
> >
> > * Performance: Multiple packets are in-flight within the pipeline at
> >   any moment. Each packet is owned by a different time-sharing thread
> >   in run-to-completion, with the thread pausing before memory access
> >   operations such as packet I/O and table lookup to allow the memory
> >   prefetch to complete. The instructions are verified and translated
> >   at initialization time with no run-time impact. The instructions are
> >   also optimized to detect and "fuse" frequently used patterns into
> >   vector-like instructions transparently to the user.
> >
> > API deprecation and maturing roadmap:
> > * The existing pipeline stable API (rte_pipeline.h) to be deprecated
> >   prior to and removed as part of the DPDK 21.11 LTS release.
> > * The new SWX pipeline experimental API (rte_swx_pipeline.h) to mature
> >   and become stable as part of the same DPDK 21.11 LTS release.
> >
> > V6 changes:
> > * Fixed issues in the example app Makefile.
> > * Used rte_eth_link_speed_to_str() in the example app.
> > * Added release notes update.
> 
> - My comment on the Copyright was meant for the whole example code,
> not only the makefile.
> 

Yes, sorry, I made sure all the new files have the copyright year set to 2020 in the V7 just sent.

> - The documentation generation shows following warnings:
> 
> $ ninja -v -C build doc
> 
> [...]
> 
> /home/dmarchan/dpdk/lib/librte_pipeline/rte_swx_ctl.h:165: warning:
> argument 'action' of command @param is not found in the argument list
> of rte_swx_ctl_action_arg_info_get(struct rte_swx_pipeline *p,
> uint32_t action_id, uint32_t action_arg_id, struct
> rte_swx_ctl_action_arg_info *action_arg)
> /home/dmarchan/dpdk/lib/librte_pipeline/rte_swx_ctl.h:182: warning:
> The following parameters of rte_swx_ctl_action_arg_info_get(struct
> rte_swx_pipeline *p, uint32_t action_id, uint32_t action_arg_id,
> struct rte_swx_ctl_action_arg_info *action_arg) are not documented:
>   parameter 'action_arg'
> /home/dmarchan/dpdk/lib/librte_pipeline/rte_swx_pipeline.h:494:
> warning: argument 'match' of command @param is not found in the
> argument list of rte_swx_pipeline_table_type_register(struct
> rte_swx_pipeline *p, const char *name, enum rte_swx_table_match_type
> match_type, struct rte_swx_table_ops *ops)
> /home/dmarchan/dpdk/lib/librte_pipeline/rte_swx_pipeline.h:513:
> warning: The following parameters of
> rte_swx_pipeline_table_type_register(struct rte_swx_pipeline *p, const
> char *name, enum rte_swx_table_match_type match_type, struct
> rte_swx_table_ops *ops) are not documented:
>   parameter 'match_type'
> 
> [...]
> 

Sorry, my bad again, fixed these two Doxygen wornings in the V7 just sent.

> 
> --
> David Marchand

Regards,
Cristian


More information about the dev mailing list