Router - Ubiquiti EdgeRouter X
Openwrt Version - OpenWrt 22.03.3 r20028-43d71ad93e
I installed irqbalance and verified its running . Interrupts seem to be balanced between all cpu's with the exception of those from 1e100000.ethernet . It shows 3302848 for cpu 0 and 0 for cpu 1,2,3 .
Is this normal ? This question has been asked before (for different platforms) but I have found no clear explanation for this .
Upon further inspection it seems as though irqbalance is not doing anything . I compared /proc/interrupts with it on and off and can see no difference
Hi @pluffmud
In my AP I have packet steering disabled (there is a bug) and I'm running with irqbalance pretty well (not perfect indeed
).
root@DAP2610:~# cat /etc/config/irqbalance
config irqbalance 'irqbalance'
option enabled '1'
# Level at which irqbalance partitions cache domains.
# Default is 2 (L2$).
option deepestcache '4'
# The default value is 10 seconds
#option interval '10'
# List of IRQ's to ignore
#list banirq '36'
#list banirq '69'
root@DAP2610:~# cat /proc/interrupts
CPU0 CPU1 CPU2 CPU3
26: 458893 1383540 555062 752143 GIC-0 20 Level arch_timer
30: 25863 974 298 0 GIC-0 270 Level bam_dma
31: 53015 71835 0 0 GIC-0 127 Level 78b5000.spi
32: 0 0 0 0 GIC-0 239 Level bam_dma
33: 6 0 0 0 GIC-0 139 Level msm_serial0
50: 1333861 0 1632936 6160443 GIC-0 200 Level ath10k_ahb
67: 1421 2737562 229 707690 GIC-0 201 Level ath10k_ahb
68: 28532 12179 26809 23328 GIC-0 97 Edge c080000.ethernet:txq0
72: 142876 18645 70436 21688 GIC-0 101 Edge c080000.ethernet:txq4
76: 63423 9487 169808 151808 GIC-0 105 Edge c080000.ethernet:txq8
80: 23039 8266 25153 11241 GIC-0 109 Edge c080000.ethernet:txq12
84: 196997 24753 65630 17188 GIC-0 272 Edge c080000.ethernet:rxq0
86: 63901 6604 51639 17950 GIC-0 274 Edge c080000.ethernet:rxq2
88: 68842 28116 207112 13107 GIC-0 276 Edge c080000.ethernet:rxq4
90: 44637 19908 18748 19520 GIC-0 278 Edge c080000.ethernet:rxq6
100: 0 0 0 0 msmgpio 63 Edge keys
IPI0: 0 0 0 0 CPU wakeup interrupts
IPI1: 0 0 0 0 Timer broadcast interrupts
IPI2: 1601 24469 24768 4239 Rescheduling interrupts
IPI3: 542070 1955131 1767826 564403 Function call interrupts
IPI4: 0 0 0 0 CPU stop interrupts
IPI5: 212430 1114990 963934 393007 IRQ work interrupts
IPI6: 0 0 0 0 completion interrupts
Err: 0
The only thing you can do is peg it to another CPU but on my ER-X CPU0 had the lowest interrupts so it made sense to leave le100000.ethernet on CPU0.
So maybe I'm working under a misconception . I thought the interrupts from 1e100000.ethernet would be 'balanced' across all the cpu's ? I guess I have a more fundamental problem in that I dont quite understand what 1e100000.ethernet represents . It is obviously an abstraction of the underlying network hardware . In my case there are 3 ethernet ports active .
Some devices you can't change the affinity at all or it won't allow all (usually that is affinity 3).
Some scripts may try to change keep changing it manually but that usually has the opposite affect because memory has to change too.
so on my machine interrupt 20 has /proc/irq/20/smp_affinity
set to f
yet only cpu 0 gets used .
What am I missing here (and obviously I am missing some thing basic)
OK I think I miss-understood what irqbalance is doing . So on my very lightly loaded system it looks as though its doing nothing when in fact , there is nothing much to do :}