Почему процесс ksoftirqd / 0 использует весь мой процессор

Я чувствовал, что Ubuntu работает немного вяло, а затем я посмотрел процессы, запущенные на нем, и обнаружил, что он использует что-то вроде 50% CPU под названием ksoftirqd/0.

Кто-нибудь знает, что делает этот процесс, почему он использует так много ЦП и как сделать его менее ресурсоемким?

69
задан 13 December 2013 в 18:52

3 ответа

На странице руководства ksoftirqd - поток ядра для каждого процессора, который запускается, когда машина находится под большой нагрузкой мягкого прерывания.

Вы можете немного изменить настройки, определив, какой процессор подхватывает определенное прерывание. Вы делаете это, изменяя содержимое /proc/irq/$interrupt_number/smp_affinity. Вы можете получить список прерываний и их значение, выполнив:

cat /proc/interrupts

Число в smp_affinity - это растровое изображение процессора, представленное в шестнадцатеричном коде. Самый правый бит является наименее значимым. Например, моя система имеет 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
0
ответ дан 13 December 2013 в 18:52

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

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

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

Если ksoftirqd отнимает более крошечный процент процессорного времени, это указывает на то, что машина находится под большой нагрузкой прерывания.

0
ответ дан 13 December 2013 в 18:52

ksoftirqd - это поток ядра для каждого процессора, который запускается, когда машина находится под большой нагрузкой мягкого прерывания. Итак, он не ест ваш процессор, а скорее снижает нагрузку на IRQ.

0
ответ дан 13 December 2013 в 18:52

Другие вопросы по тегам:

Похожие вопросы: