[PATCH v8] ethdev: add optimization hints in flow template table
Thomas Monjalon
thomas at monjalon.net
Thu Feb 2 12:33:26 CET 2023
02/02/2023 12:19, Rongwei Liu:
> In case flow rules match only one kind of traffic in a flow table,
> then optimization can be done via allocation of this table.
> Such optimization is possible only if the application gives a hint
> about its usage of the table during initial configuration.
>
> The transfer domain rules may process traffic from wire or vport,
> which may correspond to two kinds of underlayer resources.
> That's why the first two hints introduced in this patch are about
> wire and vport traffic specialization.
> Wire means traffic arrives from the uplink port while vport means
> traffic initiated from VF/SF.
>
> There are two possible approaches for providing the hints.
> Using IPv4 as an example:
> 1. Use pattern item in both flow template table and rules.
>
> template table 3 =
> transfer pattern ANY_VPORT / eth / ipv4 src is 255.255.255.255 / end
> flow rule =
> template_table 3 pattern ANY_VPORT / eth / ipv4 src is 1.1.1.1 / end
>
> The pattern template 3 will be used only to match flows coming from
> vports.
> ANY_VPORT needs to be present in each flow rule.
> ANY_VPORT matching is redundant with IP src 1.1.1.1 because
> the user knows 1.1.1.1 is the IP of a vport.
>
> 2. Add specialization flag into flow template table attribute:
>
> template table 3 =
> transfer VPORT_ORIG pattern eth / ipv4 src is 255.255.255.255 / end
> flow rule =
> template_table 3 pattern eth / ipv4 src is 1.1.1.1 / end
>
> The pattern template 3 can be used only to match flows coming
> from vports.
>
> Approach 1 needs to specify the hint in each flow rule that wastes
> memory and is not user friendly.
> This patch takes the 2nd approach and introduces one new member
> "specialize" into rte_flow_table_attr to indicate possible flow table
> optimization.
>
> By default, there is no hint, so nothing change.
> There is no guarantee that the hints will be effective in the driver.
> The application functionality must not rely on the hints.
>
> Signed-off-by: Rongwei Liu <rongweil at nvidia.com>
> Acked-by: Ori Kam <orika at nvidia.com>
Andrew gave this recent comment on v7:
"
Anyway, hint itself is OK and makes sense. Hopefully
documentation highlights that pattern match is required.
If so,
Acked-by: Andrew Rybchenko <andrew.rybchenko at oktetlabs.ru>
"
Given the lines below, I assume the documentation is OK.
> +This attribute is not mandatory for driver to implement.
> +If a hint is not supported, it will be silently ignored,
> +and no special optimization is done.
> +
> +If a table is specialized, the application should make sure the rules
> +comply with the table attribute.
> +The application functionality must not rely on the hints,
> +they are not replacing the matching criteria of flow rules.
[...]
> +/**@{@name Flags for template table attribute.
> + * Each bit is an optional hint for table specialization,
> + * offering a potential optimization at driver layer.
> + * The driver can ignore the hints silently.
> + * The hints do not replace any matching criteria.
> + */
> +/**
> + * Specialize table for transfer flows which come only from wire.
> + * It allows PMD not to allocate resources for non-wire originated traffic.
> + * This bit is not a matching criteria, just an optimization hint.
> + * Flow rules which match non-wire originated traffic will be missed
> + * if the hint is supported.
> + */
> +#define RTE_FLOW_TABLE_SPECIALIZE_TRANSFER_WIRE_ORIG RTE_BIT32(0)
> +/**
> + * Specialize table for transfer flows which come only from vport (e.g. VF, SF).
> + * It allows PMD not to allocate resources for non-vport originated traffic.
> + * This bit is not a matching criteria, just an optimization hint.
> + * Flow rules which match non-vport originated traffic will be missed
> + * if the hint is supported.
> + */
> +#define RTE_FLOW_TABLE_SPECIALIZE_TRANSFER_VPORT_ORIG RTE_BIT32(1)
> +/**@}*/
[...]
> + /**
> + * Optional hint flags for driver optimization.
> + * The effect may vary in the different drivers.
> + * The functionality must not rely on the hints.
> + * Value is composed with RTE_FLOW_TABLE_SPECIALIZE_* based on application
> + * design choices.
> + * Misused hints may mislead the driver, it may result in an undefined behavior.
> + */
> + uint32_t specialize;
Acked-by: Thomas Monjalon <thomas at monjalon.net>
More information about the dev
mailing list