Interrupts Affinity on ARM systems
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 23 May 2023 19:57:59 UTC
I'm using the same freebsd kernel and same network driver on ARM based instance and intel based instance. ARM based instance uname: uname -a FreeBSD freebsd 13.2-RELEASE FreeBSD 13.2-RELEASE releng/13.2-n254617-525ecfdad597 GENERIC arm64 Intel based instance uname: uname -a FreeBSD freebsd 13.2-RELEASE FreeBSD 13.2-RELEASE releng/13.2-n254617-525ecfdad597 GENERIC amd64 For the intel based instance, I want to see the affinity of then hardware interrupts so i run the following: $ vmstat -i interrupt total rate . . irq41: ena0 137 4 irq42: ena0 97 3 irq43: ena0 18 1 irq44: ena0 5254 159 Now after I run cpuset I get: $ cpuset -g -x 44 irq 44 mask: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 However on ARM instance I do the same and get the following: $ vmstat -i interrupt total rate gic0,p11:-ic_timer0 44021813 503 .. its0,75: ena0 580 0 its0,76: ena0 2943 0 its0,77: ena0 586 0 After running cpuset: $ cpuset -g -x 75 cpuset: getaffinity: No such process The device interrupts are allocated in the driver using bus_alloc_resource_any() & bus_setup_intr(). Why are the interrupts names different in ARM/Intel and how can I get the interrupts affinity in ARM systems? Followup question: Upon printing the cpu on which the HW interrupts are received (curcpu parameter within the msix interrupt handler) on ARM systems I can see that all interrupts are received on CPU 0. Why is that? Is it an acceptable practice in FreeBSD to spread the interrupt affinity upon different cores by default using bus_bind_intr() calls? Within the intel based instance I can see that the interrupts are spread across all CPU’s by default.