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

55

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

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

    
задан dasen 17.10.2010 в 06:55
источник

3 ответа

60

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

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

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

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

    
ответ дан Lucian Adrian Grijincu 17.10.2010 в 13:37
источник
17

Из 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
    
ответ дан Eduardo Bezerra 13.07.2012 в 16:12
3

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

    
ответ дан akshatj 17.10.2010 в 12:37