Hello,
I've been using TinyCore Linux on a board with multiple NICs and i ran into the following problem:
cat /proc/interrupts
----
CPU0 CPU1
0: 46 0 IO-APIC-edge timer
1: 2 0 IO-APIC-edge i8042
6: 2 0 IO-APIC-edge floppy
8: 0 0 IO-APIC-edge rtc0
9: 0 0 IO-APIC-fasteoi acpi
12: 4 0 IO-APIC-edge i8042
16: 7068508 0 IO-APIC-fasteoi ahci, uhci_hcd:usb3, eth4
17: 10 0 IO-APIC-fasteoi pata_jmicron
18: 5 0 IO-APIC-fasteoi ehci_hcd:usb1, uhci_hcd:usb7, eth2
19: 156455084 0 IO-APIC-fasteoi ata_piix, ata_piix, uhci_hcd:usb6, eth3
21: 132342645 0 IO-APIC-fasteoi uhci_hcd:usb4, eth1
23: 6063 0 IO-APIC-fasteoi ehci_hcd:usb2, uhci_hcd:usb5
43: 10692563 0 PCI-MSI-edge eth0
NMI: 0 0 Non-maskable interrupts
LOC: 1790132 915131 Local timer interrupts
SPU: 0 0 Spurious interrupts
PMI: 0 0 Performance monitoring interrupts
IWI: 0 0 IRQ work interrupts
RES: 309061 47221 Rescheduling interrupts
CAL: 121 9351 Function call interrupts
TLB: 5131 3642 TLB shootdowns
TRM: 0 0 Thermal event interrupts
THR: 0 0 Threshold APIC interrupts
MCE: 0 0 Machine check exceptions
MCP: 268 268 Machine check polls
ERR: 0
MIS: 0
----
The irq smp_affinity mask of the network cards is set to 3 on all cards on a 2 core machine, however i don't get balanced IRQs.
The cards only hit the first core.
If i try to switch them to the second core manually, or the first core the IRQs are sent properly to the specified single cores, however if both are specified then there is no IRQ balancing.
As far as we're on the subject, is there any usable option of device polling in Linux (the only one i've found is NAPI and smp affinity), is there something similar to FreeBSD sysctl enable kernel device polling?
Best Regards,
Jovan
[EDIT]: Added code tags. Rich