Remove RPS/XPS support from netifd core, move the logic to a hotplug script that uses a different policy which provides better performance and more fairness across flows Signed-off-by: Felix Fietkau <nbd@nbd.name>master
parent
810659a22c
commit
916e33fa1e
@ -0,0 +1,67 @@ |
||||
#!/bin/sh |
||||
[ "$ACTION" = add ] || exit |
||||
|
||||
NPROCS="$(grep -c "^processor.*:" /proc/cpuinfo)" |
||||
[ "$NPROCS" -gt 1 ] || exit |
||||
|
||||
PROC_MASK="$(( (1 << $NPROCS) - 1 ))" |
||||
|
||||
find_irq_cpu() { |
||||
local dev="$1" |
||||
local match="$(grep -m 1 "$dev\$" /proc/interrupts)" |
||||
local cpu=0 |
||||
|
||||
[ -n "$match" ] && { |
||||
set -- $match |
||||
shift |
||||
for cur in `seq 1 $NPROCS`; do |
||||
[ "$1" -gt 0 ] && { |
||||
cpu=$(($cur - 1)) |
||||
break |
||||
} |
||||
shift |
||||
done |
||||
} |
||||
|
||||
echo "$cpu" |
||||
} |
||||
|
||||
set_hex_val() { |
||||
local file="$1" |
||||
local val="$2" |
||||
val="$(printf %x "$val")" |
||||
[ -n "$DEBUG" ] && echo "$file = $val" |
||||
echo "$val" > "$file" |
||||
} |
||||
|
||||
default_ps="$(uci get "network.@globals[0].default_ps")" |
||||
[ -n "$default_ps" -a "$default_ps" != 1 ] && exit 0 |
||||
|
||||
exec 512>/var/lock/smp_tune.lock |
||||
flock 512 || exit 1 |
||||
|
||||
for dev in /sys/class/net/*; do |
||||
[ -d "$dev" ] || continue |
||||
|
||||
# ignore virtual interfaces |
||||
[ -n "$(ls "${dev}/" | grep '^lower_')" ] && continue |
||||
[ -d "${dev}/device" ] || continue |
||||
|
||||
device="$(readlink "${dev}/device")" |
||||
device="$(basename "$device")" |
||||
irq_cpu="$(find_irq_cpu "$device")" |
||||
irq_cpu_mask="$((1 << $irq_cpu))" |
||||
|
||||
for q in ${dev}/queues/rx-*; do |
||||
set_hex_val "$q/rps_cpus" "$(($PROC_MASK & ~$irq_cpu_mask))" |
||||
done |
||||
|
||||
ntxq="$(ls -d ${dev}/queues/tx-* | wc -l)" |
||||
|
||||
idx=$(($irq_cpu + 1)) |
||||
for q in ${dev}/queues/tx-*; do |
||||
set_hex_val "$q/xps_cpus" "$((1 << $idx))" |
||||
let "idx = idx + 1" |
||||
[ "$idx" -ge "$NPROCS" ] && idx=0 |
||||
done |
||||
done |
Loading…
Reference in new issue