Чому процес ksoftirqd / 0 використовує весь мій процесор?


67

Я відчував, що Ubuntu працює трохи мляво, і тоді я пішов подивитися процеси, що працюють на ньому, і виявив той, який використовує щось на зразок 50% викликаного процесора ksoftirqd/0.

Хтось знає, що робить цей процес, чому він використовує стільки процесора і як зробити його менш інтенсивним процесором?

Відповіді:


77

Ваш комп'ютер спілкується з приєднаними до нього пристроями через IRQ (запити про переривання). Коли з пристрою відбувається переривання, операційна система призупиняє те, що робила, і починає вирішувати це переривання.

У деяких ситуаціях IRQ надходять дуже швидко один за одним, і операційна система не може закінчити обслуговування один до іншого. Це може статися, коли високошвидкісна мережева карта отримує дуже велику кількість пакетів за короткий проміжок часу.

Оскільки операційна система не може обробляти IRQ по мірі їх надходження (оскільки вони надто швидко надходять один за одним), операційна система подає чергу на них для подальшої обробки спеціальним внутрішнім процесом з назвою ksoftirqd.

Якщо процес ksoftirqdзаймає більше ніж невеликий відсоток часу процесора, це означає, що машина перебуває під великим навантаженням переривання.


22

Зі сторінки man ksoftirqd- це потік ядра per-cpu, який працює, коли машина перебуває під великим навантаженням на переривання.

Ви можете трохи змінити налаштування, визначивши, який процесор сприймає певне переривання. Ви робите це, змінюючи вміст /proc/irq/$interrupt_number/smp_affinity. Ви можете отримати список переривань та їх значення, виконавши:

cat /proc/interrupts

Число в smp_affinityє растровою картою cpus, представленою в шістнадцятковий код. Крайній правий біт є найменш значущим. Наприклад, моя система має 8 ядер. Якби я хотів використовувати лише ядра 1, 3 і 4, я встановив би smp_affinity на 1a:

cpu_7 cpu_6 cpu_5 cpu_4 cpu_3 cpu_2 cpu_1 cpu_0
  0     0     0     1     1     0     1     0    = 0001 1010 = 1a (in hex)

Особисто я створив будь-який процесор, щоб мати можливість переривати переривання 29 (eth0 в моїй 8-ядерній системі) за допомогою:

sudo echo ff > /proc/irq/29/smp_affinity

4

ksoftirqd - це потік ядра per-cpu, який працює, коли машина перебуває під сильним навантаженням, що переривається. Отже, він не їсть ваш процесор, а швидше зменшує завантаження IRQ.


1
Я знаю, що це askubuntu.com, але в Raspberry Pi це зовсім навпаки, ksoftirqd їсть увесь процесор при інтенсивному навантаженні IRQ.
машинобудівний вирок

Як я розумію, процеси ksoftirqd відкладаються softirqs (коли вони не можуть бути оброблені досить швидко). Коли є багато softirq і / або вони вимагають багато процесорного часу для обробки, то ksoftirqd вимагає багато процесорного часу.
пабук
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.