On 2/2/2023 11:33 AM, Thomas Monjalon wrote: > 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 <rongw...@nvidia.com> >> Acked-by: Ori Kam <or...@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.rybche...@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 <tho...@monjalon.net> >
Applied to dpdk-next-net/main, thanks.