Linux: 특정 Lan Port의 IRQ Interrupt를 특정 CPU에 할당하기.

|

참고 사이트 : http://oss.sgi.com/archives/netdev/2004-06/msg00197.html

그러니까,

linux# cat /proc/interrupts
           CPU0       CPU1       CPU2       CPU3   
  0:    3248497    1403205    2133554    2023460     IO-APIC-edge  timer
  1:        290         41        287        136     IO-APIC-edge  i8042
  8:          0          0          0          0     IO-APIC-edge  rtc
  9:          0          0          0          0    IO-APIC-level  acpi
 12:       4113       1414       1245       5860     IO-APIC-edge  i8042
 14:      80792         98       2979       5681     IO-APIC-edge  ide0
177:          0          0          0          0    IO-APIC-level  ehci_hcd, uhci_hcd
185:       3882       2628      10213       1696    IO-APIC-level  libata, uhci_hcd
193:          0          0          0          0    IO-APIC-level  uhci_hcd
217:         24   51124253          0          0          PCI-MSI  eth1
225:          6          0   14392039          0          PCI-MSI  eth3
233:         13          0          0   21888105          PCI-MSI  eth2
NMI:   21681752   21681638   21681669   21681636  
LOC:   21677309   21677350   21677397   21677458  
ERR:          0
MIS:          0
linux# cat /proc/irq/217/smp_affinity
02
linux# cat /proc/irq/225/smp_affinity
04
linux# cat /proc/irq/233/smp_affinity
08
linux#


eth1은 217번 softirq를 사용하고, 이것은 /proc/irq/217/smp_affinity를 참조하면 1번 CPU를 사용하도록 되어 있다. (smp_affinity 내용은 bitmask인것 같다. 즉 01이면 0번 CPU, 02면 1번 CPU, 0번과 1번을 같이 쓰는 것이면 03)
역으로 할당하게 되면, 해당 irq는 원하는 bitmask에 해당하는 CPU를 사용하게 되는 것이다. (!!)


And