Re: [net-next] net: sched: extend flow action with RSS

From: Nambiar, Amritha
Date: Fri Oct 20 2023 - 16:13:29 EST


On 10/20/2023 9:35 AM, Hariprasad Kelam wrote:




On Fri, Oct 20, 2023 at 2:12 AM Hariprasad Kelam <hkelam@xxxxxxxxxxx>
wrote:

This patch extends current flow action with RSS, such that the user
can install flower offloads with action RSS followed by a group id.
Since this is done in hardware skip_sw flag is enforced.

Our typical rule for TC is we need s/w equivalence for offloads. How would
this work in absence of offload?

[Hari]
Our typical rule for TC is we need s/w equivalence for offloads. How would this work in absence of offload?

This patch we added as an extension to receive queue selection in hardware.
This patch "act_skbedit: skbedit queue mapping for receive queue" enabled receive queue selection in hardware
and skip_sw is enforced.

Adding stakeholders of this patch, to get their opinion.
sridhar.samudrala@xxxxxxxxx amritha.nambiar@xxxxxxxxx

incase of RSS, hardware makes decisions about incoming packets before they are even received in the queue.


The skip_sw for skbedit receive queue action was enforced as the only other alternative was a new hw-only action, or changing the action mirred. See discussion at https://lore.kernel.org/netdev/20220921132929.3f4ca04d@xxxxxxxxxx/

Few questions WRT this patch:
How are the rss groups created? ethtool rss contexts? Any reason to use TC to direct to rss contexts over using ethtool context ids?

IIUC, skbedit is meant to only edit skb metadata such as mark, packet type, queue mapping, priority etc. Even if this is a HW only action and has no use in the stack, would skbedit be the right fit here?

Thanks,
Hariprasad k




cheers,
jamal

Example:
In a multi rss group supported NIC,

rss group #1 flow hash indirection table populated with rx queues 1 to
4 rss group #2 flow hash indirection table populated with rx queues 5
to 9

$tc filter add dev eth1 ingress protocol ip flower ip_proto tcp
dst_port
443 action skbedit rss_group 1 skip_sw

Packets destined to tcp port 443 will be distributed among rx queues 1
to 4

$tc filter add dev eth1 ingress protocol ip flower ip_proto udp
dst_port
8080 action skbedit rss_group 2 skip_sw

Packets destined to udp port 8080 will be distributed among rx queues
5 to 9