[dpdk-dev] [PATCH v6 00/42] Pipeline alignment with the P4 language
David Marchand
david.marchand at redhat.com
Wed Sep 30 21:34:08 CEST 2020
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.
- 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'
[...]
--
David Marchand
More information about the dev
mailing list