Irqbalance on 1e100000.ethernet

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 :slight_smile: ).

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 :}