summaryrefslogtreecommitdiffstats
path: root/package
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@nbd.name>2024-04-24 19:16:05 +0200
committerFelix Fietkau <nbd@nbd.name>2024-04-26 06:31:27 +0200
commitc4d394c6cc0facba94fda5f1cc886edaf342be3a (patch)
tree0f61a8ddd1d72d71edff33afb7cfeaf265877cfa /package
parentb5c53848c3792355a2dd4ff0e06bf4d230e1f5fb (diff)
downloadopenwrt-c4d394c6cc0facba94fda5f1cc886edaf342be3a.tar.gz
openwrt-c4d394c6cc0facba94fda5f1cc886edaf342be3a.tar.bz2
openwrt-c4d394c6cc0facba94fda5f1cc886edaf342be3a.zip
netifd: add a packet steering mode matching the old script
This spreads packet processing across all cores Signed-off-by: Felix Fietkau <nbd@nbd.name>
Diffstat (limited to 'package')
-rwxr-xr-xpackage/network/config/netifd/files/usr/libexec/network/packet-steering.uc23
1 files changed, 21 insertions, 2 deletions
diff --git a/package/network/config/netifd/files/usr/libexec/network/packet-steering.uc b/package/network/config/netifd/files/usr/libexec/network/packet-steering.uc
index 72f96024d8..025532c1c1 100755
--- a/package/network/config/netifd/files/usr/libexec/network/packet-steering.uc
+++ b/package/network/config/netifd/files/usr/libexec/network/packet-steering.uc
@@ -9,6 +9,7 @@ let eth_bias = 2.0;
let debug = 0, do_nothing = 0;
let disable;
let cpus;
+let all_cpus;
for (let arg in ARGV) {
switch (arg) {
@@ -21,6 +22,9 @@ for (let arg in ARGV) {
case '0':
disable = true;
break;
+ case '2':
+ all_cpus = true;
+ break;
}
}
@@ -46,9 +50,19 @@ function set_task_cpu(pid, cpu) {
system(`taskset -p -c ${cpu} ${pid}`);
}
+function cpu_mask(cpu)
+{
+ let mask;
+ if (cpu < 0)
+ mask = (1 << length(cpus)) - 1;
+ else
+ mask = (1 << int(cpu));
+ return sprintf("%x", mask);
+}
+
function set_netdev_cpu(dev, cpu) {
let queues = glob(`/sys/class/net/${dev}/queues/rx-*/rps_cpus`);
- let val = sprintf("%x", (1 << int(cpu)));
+ let val = cpu_mask(cpu);
if (disable)
val = 0;
for (let queue in queues) {
@@ -173,7 +187,12 @@ function assign_dev_cpu(dev) {
}
if (length(dev.netdev) > 0) {
- let cpu = dev.rx_cpu = get_next_cpu(rx_weight, dev.napi_cpu);
+ let cpu;
+ if (all_cpus)
+ cpu = -1;
+ else
+ cpu = get_next_cpu(rx_weight, dev.napi_cpu);
+ dev.rx_cpu = cpu;
for (let netdev in dev.netdev)
set_netdev_cpu(netdev, cpu);
}