netifd: add flow steering mode to the packet steering script

This allows directing processing of locally received packets to the CPUs
of the tasks receiving them

Signed-off-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
Felix Fietkau 2024-04-24 19:23:11 +02:00
parent c4d394c6cc
commit 7ebcf2fb9c
2 changed files with 16 additions and 2 deletions

View File

@ -15,9 +15,11 @@ service_triggers() {
reload_service() {
packet_steering="$(uci get "network.@globals[0].packet_steering")"
steering_flows="$(uci get "network.@globals[0].steering_flows")"
[ "$steering_flows" -gt 0 ] && opts="-l $steering_flows"
if [ -e "/usr/libexec/platform/packet-steering.sh" ]; then
/usr/libexec/platform/packet-steering.sh "$packet_steering"
else
/usr/libexec/network/packet-steering.uc "$packet_steering"
/usr/libexec/network/packet-steering.uc $opts "$packet_steering"
fi
}

View File

@ -10,8 +10,10 @@ let debug = 0, do_nothing = 0;
let disable;
let cpus;
let all_cpus;
let local_flows = 0;
for (let arg in ARGV) {
while (length(ARGV) > 0) {
let arg = shift(ARGV);
switch (arg) {
case "-d":
debug++;
@ -25,6 +27,9 @@ for (let arg in ARGV) {
case '2':
all_cpus = true;
break;
case '-l':
local_flows = +shift(ARGV);
break;
}
}
@ -71,6 +76,13 @@ function set_netdev_cpu(dev, cpu) {
if (!do_nothing)
writefile(queue, `${val}`);
}
queues = glob(`/sys/class/net/${dev}/queues/rx-*/rps_flow_cnt`);
for (let queue in queues) {
if (debug || do_nothing)
warn(`echo ${local_flows} > ${queue}\n`);
if (!do_nothing)
writefile(queue, `${local_flows}`);
}
}
function task_device_match(name, device)