Я хотел бы запретить прерывания от определенных процессоров. Я слышал о опции IRQBALANCE_BANNED_CPUS. Я вижу, что irqbalance работает в фоновом режиме на моей машине. Куда мне перейти для редактирования и как настроить эту опцию? Например, я хочу исключить процессоры 2,3,4,5 из прерываний. Аргумент дескриптор является:
Предоставляет маску процессора, которую irqbalance должен игнорировать и никогда не назначать прерывания для
Что значит маска? И где мне настроить irqbalance с этой опцией?
РЕДАКТИРОВАТЬ1: Как узнать, что моя конфигурация действует, другими словами, что мой процессор НЕ получает прерываний? Я проверяю / proc / interrupts, но некоторые числа там увеличиваются.
РЕДАКТИРОВАТЬ2: Теперь я загрузил свою машину с IRQBALANCE_BANNED_CPUS = 3e, поэтому только ЦП 0 НЕ забанен на прерывания. Так что я должен ожидать, что cpo0 получит много прерываний, а другой процессор не получит прерываний, верно? Вот мой / proc / interrupts. Строки, выделенные жирным шрифтом, меняются для ВСЕХ процессоров. Строки 22, 24, 35 и LOC меняются.
CPU0 CPU1 CPU2 CPU3 CPU4 CPU5
0: 26 0 0 0 0 0 IO-APIC-edge timer
1: 2 0 0 0 0 0 IO-APIC-edge i8042
6: 3 0 0 0 0 0 IO-APIC-edge floppy
8: 1 0 0 0 0 0 IO-APIC-edge rtc0
9: 0 0 0 0 0 0 IO-APIC-fasteoi acpi
12: 4 0 0 0 0 0 IO-APIC-edge i8042
14: 13556 0 0 0 0 0 IO-APIC-edge ata_piix
15: 0 0 0 0 0 0 IO-APIC-edge ata_piix
18: 0 0 0 0 0 0 IO-APIC-fasteoi ata_piix
19: 2 0 0 0 0 0 IO-APIC-fasteoi ohci1394
20: 3 0 0 0 0 0 IO-APIC-fasteoi ehci_hcd:usb2, uhci_hcd:usb3, uhci_hcd:usb6
21: 197 635 39 0 0 0 IO-APIC-fasteoi uhci_hcd:usb4, uhci_hcd:usb7, HDA Intel
22: 344 3506 0 702 0 0 IO-APIC-fasteoi ehci_hcd:usb1, uhci_hcd:usb5, uhci_hcd:usb8
24: 162 48 0 0 0 0 IO-APIC-fasteoi nvidia
35: 174 0 47 0 0 0 IO-APIC-fasteoi nvidia
53: 3517 0 0 0 0 0 PCI-MSI-edge eth0
NMI: 0 0 0 0 0 0 Non-maskable interrupts
LOC: 11007 8840 6480 5652 4272 3046 Local timer interrupts
SPU: 0 0 0 0 0 0 Spurious interrupts
PMI: 0 0 0 0 0 0 Performance monitoring interrupts
PND: 0 0 0 0 0 0 Performance pending work
RES: 292 169 217 125 122 126 Rescheduling interrupts
CAL: 86 280 254 292 293 291 Function call interrupts
TLB: 1147 1031 1348 616 177 322 TLB shootdowns
TRM: 0 0 0 0 0 0 Thermal event interrupts
THR: 0 0 0 0 0 0 Threshold APIC interrupts
MCE: 0 0 0 0 0 0 Machine check exceptions
MCP: 2 2 2 2 2 2 Machine check polls
ERR: 5
MIS: 0
РЕДАКТИРОВАТЬ3: Это выглядит как Параметр IRQBALANCE_BANNED_CPUS полностью ИГНОРИРОВАН в Ubuntu. Я попытался перезагрузить свою машину с помощью 1, 3e, и везде были прерывания. Когда я отключаю irqbalance, установив ENABLED = 0, я получаю чистый / proc / interrupts только на cpu0 и ни на каком другом процессоре.
Вы устанавливаете IRQBALANCE_BANNED_CPUS в / и т.д. / по умолчанию / irqbalance. Я нашел это, заглянув в /etc/init.d/irqbalance. Но каковы допустимые значения для этого параметра? На странице руководства Red Hat:
Это шестнадцатеричная маска без начального '0x', в системах с большим количеством процессоров каждая группа из восьми шестнадцатеричных цифр отделяется запятой ','. т.е.
export IRQBALANCE_BANNED_CPUS=fc0
предотвратит назначение irqbalance irq на 7-12-й процессор (cpu6-cpu11) илиexport IRQBALANCE_BANNED_CPUS=ff000000,00000001
предотвратит назначение irqbalance irq на 1-й (cpu0) и 57–64-й процессор (cpu56-cpu63).
В концепция маски объясняется в Википедии. Прочтите это и вернитесь. Давайте разберем первый пример Red Hat. Число, которое записывается как fc0 в шестнадцатеричном формате, записывается как 111111000000 в двоичном формате. Сканирование справа налево (т. Е. От младший бит к старший бит) нулей шесть. Это означает, что с 1-го по 5-й процессор (cpu0-cpu5) могут быть назначены прерывания. Затем их шесть. Это означает, что 7–12 процессору (cpu6-cpu11) не будут назначаться прерывания.
Похоже, вы хотите разрешить процессорам cpu0 и cpu1 получать прерывания, но не позволять процессорам cpu2, cpu3, cpu4 и cpu5 назначать прерывания. Это означает, что вам нужно два нуля и четыре единицы, или 111100. Это 3C в шестнадцатеричном формате. Итак, вы бы создали / и т.д. / по умолчанию / irqbalance с содержанием
ENABLED="1"
ONESHOT="0"
IRQBALANCE_BANNED_CPUS="3f"
Чтобы узнать, что происходит, попробуйте
$ sudo service irqbalance stop
Stopping SMP IRQ Balancer: irqbalance.
$ source /etc/default/irqbalance
$ sudo irqbalance --debug
ошибка irqbalance не позволяет IRQBALANCE_BANNED_CPUS работать на машинах NUMA: http://code.google.com/p/irqbalance/issues/detail?id=43
На данный момент 1.0.5 является последней версией irqbalance и не содержит исправления.
Добавление к приведенным выше предложениям по устранению проблем irqbalance - полезная команда для просмотра схожести прерываний, возникающих в результате выполнения irqbalance:
find /proc/irq/ -name smp_affinity | xargs cat | less
Вы должны использовать 3c, как указано выше, чтобы он работал. Более поздние версии делают это автоматически (по крайней мере, до версии 1.9 на debian / sid)