Як заборонити апаратні переривання з IRQBALANCE_BANNED_CPUS на Ubuntu?


9

Я хотів би заборонити переривання певних процесорів. Я чув про варіант IRQBALANCE_BANNED_CPUS. Я бачу, що irqbalance працює на задньому плані моєї машини. Де я можу редагувати та як налаштувати цю опцію? Наприклад, я хочу виключити cpus 2,3,4,5 з переривань. Дескриптор аргументу :

Надає маску cpus, яку irqbalance слід ігнорувати і ніколи не призначати переривання

Що означає маска? І де я можу налаштувати irqbalance з цим параметром?

EDIT1: Як знати, що моя конфігурація діє, іншими словами, що мій процесор отримує НЕ переривань? Я перевіряю / proc / перериває, але деякі цифри там збільшуються.

EDIT2: Тепер я завантажив свою машину IRQBALANCE_BANNED_CPUS = 3e, тому лише CPU 0 НЕ заборонено переривати. Тож я повинен очікувати, що cpo0 отримує багато перерв, а інший процесор не отримує перерв, правда? Ось мій / proc / перериває. Рядки, виділені жирним шрифтом, змінюються для ВСІХ cpus. Рядки 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

EDIT3: Схоже, опція IRQBALANCE_BANNED_CPUS повністю IGNORED на Ubuntu . Я спробував перезавантажити свою машину з 1, 3e і перервав всю роботу. Тільки коли я відключаю irqbalance, встановивши ENABLED = 0, я отримую чистий / proc / перериває просто на cpu0 і ніяких інших процесорів.

Відповіді:


7

Ви встановлюєте IRQBALANCE_BANNED_CPUS в / etc / default / irqbalance . Я виявив це, переглянувши в /etc/init.d/irqbalance . Але які дійсні значення для цього параметра? Зі сторінки чоловіка Red Hat:

Це шестигранна маска без провідного "0x", у системах з великою кількістю процесорів кожна група з восьми шістнадцяткових цифр відокремлена базі комою ",". тобто export IRQBALANCE_BANNED_CPUS=fc0перешкоджатиме призначенню irqbalance присвоювати irqs 7-й 12-й cpu (cpu6-cpu11) або export IRQBALANCE_BANNED_CPUS=ff000000,00000001запобігає призначенню irqbalance для додавання irqs до 1-го (cpu0) та 57-го-64-го cpus (cpu56-cpu63).

Поняття маски пояснюється на вікіпедії. Прочитайте це, а потім поверніться. Розбимо перший приклад Red Hat. Число, яке записується як fc0 у шістнадцятковій кількості, записується як 111111000000 у двійковій формі. Скануючи справа наліво (тобто від найменш значущого біта до найбільш значущого біта ), є шість нулів. Це означає, що 1-й-5-й процесор (cpu0-cpu5) може призначати переривання. Тоді є шість. Це означає, що 7-12-й процесору (cpu6-cpu11) не буде призначено переривань.

Здається, ви хочете дозволити cpu0 і cpu1 отримувати переривання, але не дозволяти cpu2, cpu3, ​​cpu4 і cpu5 призначати переривання. Це означає, що вам потрібно два нулі і чотири, або 111100. Це шістнадцяткове значення 3C. Отже, ви б створили / etc / default / 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

Дякую за пояснення. Плутанина тут полягає в: БАН ЦП 0 на 6-процесорній машині. Чи потрібно використовувати: 000001 (1) або 111110 (3e). Це перше, правда?
TraderJoeChicago

Будь ласка, перевірте мою редакцію в оригінальному запитанні. Мені потрібно знати, як читати / proc / переривати, щоб переконатися, що моя конфігурація працює, і мій процесор заборонений для переривань. Дякую!
TraderJoeChicago

Дивіться мій номер редагування 3: IRQBALANCE_BANNED_CPUS використовується на Ubuntu, якщо ми не зіпсуємо маску. Але я спробував 1 і 3e без жодного успіху. :(
TraderJoeChicago

Дивіться мої зміни налагодження.
sciurus

2
НОПА. Я можу підтвердити, що НЕ працює на Ubuntu 10.04.1. Цей параметр конфігурації IRQBALANCE_BANNED_CPUS = "1" ігнорується.
TraderJoeChicago


0

Ви повинні використовувати 3c, як зазначено вище, щоб він працював. Пізніші версії роблять це автоматично (принаймні, v 1.9 на debian / sid)


0

Додавання до запропонованих вище пропозицій щодо усунення неполадок ірбалансу - Корисна команда для перегляду спорідненості переривання, що виникає в результаті запуску irqbalance:

find /proc/irq/ -name smp_affinity | xargs cat | less
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.