Raznos-eth-irq-po-cpu
Материал из Ksimute
Если на сервере многоядерном указать конкретное ядро для обработки прерываний интерфейса, производительность существенно возрастает. В некоторых случаях после привязки интерфейса к одному ядру, нагрузка на ядра упала на 20-30 %.
Как делается привязка:
r1-rostelecom ~ # cat /proc/cpuinfo | grep processor processor : 0 processor : 1 processor : 2 processor : 3
r1-rostelecom ~ # cat /proc/interrupts CPU0 CPU1 CPU2 CPU3 0: 104 0 0 0 IO-APIC-edge timer 1: 0 0 1 1 IO-APIC-edge i8042 8: 2 0 0 0 IO-APIC-edge rtc 9: 0 0 0 0 IO-APIC-fasteoi acpi 12: 1 2 1 0 IO-APIC-edge i8042 16: 1406418 440 0 0 IO-APIC-fasteoi eth1, ehci_hcd:usb1 17: 191133909 185155154 183762412 172394337 IO-APIC-fasteoi eth0 18: 6936344 7024130 7689809 7144232 IO-APIC-fasteoi ahci, uhci_hcd:usb4 19: 4013342575 3939460732 3890908950 3810335948 IO-APIC-fasteoi eth2, uhci_hcd:usb3, uhci_hcd:usb7 20: 3944870283 3999257495 3938074513 3954127928 IO-APIC-fasteoi eth3 21: 0 0 0 0 IO-APIC-fasteoi ehci_hcd:usb2, uhci_hcd:usb5 22: 0 0 0 0 IO-APIC-fasteoi uhci_hcd:usb6
NMI: 0 0 0 0 LOC: 249772459 249772413 249772213 249772430 ERR: 0 MIS: 0
Разносим eth0 и eth3 eth0 на 17 IRQ привяжем к CPU2 eth3 на 20 IRQ привяжем к CPU3
теперь надо указать какой прерывание будет обрабатываться каким процессором.
номера процессоров конвертируются в двоичную маску, т.е.
CPU0 - 1
CPU1 - 2
CPU2 - 4
CPU3 - 8
2^n где n - номер процессора.
echo 4 > /proc/irq/17/smp_affinity echo 8 > /proc/irq/16/smp_affinity
Все.