FastNetMon

Sunday, 31 January 2010

Как в мультипроцессорной системе перенести обработку прерываний eth на другое ядро?

Имеем такую картину:

cat /proc/interrupts
CPU0 CPU1 CPU2 CPU3 CPU4 CPU5 CPU6 CPU7
0: 524 0 0 1797756799 0 0 0 0 IO-APIC-edge timer
1: 0 0 0 968 0 0 0 0 IO-APIC-edge i8042
8: 0 0 0 0 0 0 3 0 IO-APIC-edge rtc
9: 0 0 0 0 0 0 0 0 IO-APIC-level acpi
12: 4 0 0 0 0 0 0 0 IO-APIC-edge i8042
50: 0 0 0 0 0 0 0 0 IO-APIC-level uhci_hcd:usb3
58: 0 0 0 0 0 0 0 0 IO-APIC-level uhci_hcd:usb4
66: 0 0 0 0 0 0 0 0 IO-APIC-level uhci_hcd:usb5, uhci_hcd:usb7
74: 2230577823 0 0 0 0 0 0 0 PCI-MSI ahci
82: 97331448 0 0 0 0 0 0 0 PCI-MSI eth0
225: 0 0 0 0 0 0 0 0 IO-APIC-level ehci_hcd:usb1, uhci_hcd:usb8
233: 0 0 0 0 0 0 0 0 IO-APIC-level ehci_hcd:usb2, uhci_hcd:usb6
NMI: 0 0 0 0 0 0 0 0
LOC: 1747868310 1788131037 1787952568 1797756803 1788681699 1790209706 1788657167 1790195713
ERR: 0
MIS: 0


eth0 соответствует 82 прерывание и все они обрабатываются 1м ядром.

cat /proc/irq/82/smp_affinity
ffffffff



Чтобы привязать прерывание к процессору или группе процессоров, сначала нужно определить, какой процессор должен обрабатывать прерывание, и соответствующим образом задать битовую маску. Крайний справа бит маски устанавливается для CPU0, следующий для CPU1 и так далее. Для обозначения группы процессоров можно установить несколько битов. После этого задайте значение битовой маски, выполнив следующую команду:

echo bitmask > /proc/irq/IRQ_number/smp_affinity

Например, чтобы привязать обработку прерывания номер 177 к процессорам с 4 по 7 (битовая маска 11110000), выполните:

echo f0 > /proc/irq/177/smp_affinity


Переносим обработку прерываний на 4-8е ядра:

echo f0 > /proc/irq/82/smp_affinity


Смотрим результат:

cat /proc/irq/82/smp_affinity
000000f0


Ну и результат:

cat /proc/interrupts
CPU0 CPU1 CPU2 CPU3 CPU4 CPU5 CPU6 CPU7
0: 524 0 0 1798224886 0 0 0 0 IO-APIC-edge timer
1: 0 0 0 968 0 0 0 0 IO-APIC-edge i8042
8: 0 0 0 0 0 0 3 0 IO-APIC-edge rtc
9: 0 0 0 0 0 0 0 0 IO-APIC-level acpi
12: 4 0 0 0 0 0 0 0 IO-APIC-edge i8042
50: 0 0 0 0 0 0 0 0 IO-APIC-level uhci_hcd:usb3
58: 0 0 0 0 0 0 0 0 IO-APIC-level uhci_hcd:usb4
66: 0 0 0 0 0 0 0 0 IO-APIC-level uhci_hcd:usb5, uhci_hcd:usb7
74: 2230694661 0 0 0 0 0 0 0 PCI-MSI ahci
82: 97820891 0 0 0 74684 0 0 0 PCI-MSI eth0
225: 0 0 0 0 0 0 0 0 IO-APIC-level ehci_hcd:usb1, uhci_hcd:usb8
233: 0 0 0 0 0 0 0 0 IO-APIC-level ehci_hcd:usb2, uhci_hcd:usb6
NMI: 0 0 0 0 0 0 0 0
LOC: 1748336398 1788599125 1788420656 1798224891 1789149787 1790677794 1789125255 1790663801
ERR: 0
MIS: 0



(с) http://www.ibm.com/developerworks/ru/library/l-scalability/index.html

No comments :

Post a Comment

Note: only a member of this blog may post a comment.