Files
openwrt-image-buildomatic/configs/rpi-4-files/etc/init.d/irq-eth-pin
Mads Meisner-Jensen 3e4d2d5a99 rpi4-files/etc/init.d/irq-eth-pin: fix compile error/warning
initscripts will run while building OpenWRT images on the host system
as described on the wiki:
https://openwrt.org/docs/guide-developer/procd-init-scripts#init_scripts_during_compilation
Thus we no longer execute any commands and wrap functionality into proper
start_service() function
2021-10-03 12:20:23 +02:00

44 lines
1.4 KiB
Bash
Executable File

#!/bin/sh /etc/rc.common
uci_banirq=irqbalance.irqbalance.banirq
cpu_irq_eth=2
move_eth0_irq() {
# Move eth0 IRQs to CPU1 (numbered 1-4 when writing)
# And ban irqbalance from messing with it
# The USB3 Ethernet IRQs cannot be moved and must stay on CPU0
irqs_eth0=$(sed -rn "s/^\s*([0-9]+):.*eth0$/\1/p" /proc/interrupts)
for n in ${irqs_eth0}; do
echo ${cpu_irq_eth} > /proc/irq/${n}/smp_affinity
if ! uci get ${uci_banirq} | grep -q ${n}; then
uci add_list ${uci_banirq}=${n}
fi
done
uci commit irqbalance
logger -t "irq_eth_pin" "Moved eth0 IRQs ${irqs_eth0} to cpu${cpu_irq_eth}"
logger -t "irq_eth_pin" "See all interrupts with: cat /proc/interrupts"
}
move_softirqs() {
# Move softirqs for network traffic to CPU2 and CPU3
# Maybe not a brilliant idea because the softirqs are probably better off
# being processed on the CPU that got the original IRQ
# (and that is exactly the default when the value is 0)
# NOTE: it appears that the openwrt 20.02-rc1 kernel has a bug that
# returns "No such file or directory" for /sys/class/net/eth1/queues/xps_cpus
for ifname in eth0; do # eth1
for f in $(find /sys/class/net/${ifname}/queues -name xps_cpus -o -name rps_cpus); do
if [ -f ${f} ]; then
echo "${f} = $(cat ${f})"
echo c >${f}
fi
done
done
}
start_service() {
move_eth0_irq
}