Причина высоких прерываний и переключений контекста

У меня есть четырехъядерное ядро, и я заметил на munin (мониторинг прерываний и переключений контекста), что мои прерывания и переключатели контекста выросли до 25k в секунду, в то время как среднее значение было 250 в течение некоторого времени.

Понятия не имею, что произошло, а также понятия не имею, что это значит, за исключением того факта, что, согласно моим инструментам мониторинга, это аномалия.

Это произошло в одном из моих виртуальных контейнеров openVZ.

Примечание. В то же время нагрузка выросла до 2,5, а загрузка ЦП была в одной точке: 110% системы, 15% пользователей и 100% IOwait.

Я прикрепил вывод для /proc/interrupts на хост-машине.

           CPU0       CPU1       CPU2       CPU3       
  0:   48039108   56660082   56431151   51696624    IO-APIC-edge  timer
  1:          0          3          0          0    IO-APIC-edge  i8042
  4:          4          4          1          3    IO-APIC-edge  serial
  8:          1          0          0          0    IO-APIC-edge  rtc
  9:          0          0          0          0   IO-APIC-level  acpi
 12:          4          0          0          0    IO-APIC-edge  i8042
 50:         15         16         16         16   IO-APIC-level  ata_piix
 66:      11113          0          0   56276172         PCI-MSI  eth0
169:   12839820    4849263       1080       1167   IO-APIC-level  ioc0
225:          6          7          5          5   IO-APIC-level  ehci_hcd:usb1, uhci_hcd:usb2, uhci_hcd:usb4
233:          0          0          0          0   IO-APIC-level  uhci_hcd:usb3
NMI:      17173      16340      16694      17306 
LOC:  214221117  214220936  214196385  214196306 
ERR:          0
MIS:          0

3 ответа

Решение

Это будет многопоточное приложение, выполняющее много блокировок. Каждый раз, когда он блокируется, центральный процессор вытесняет свой квант и позволяет другому потоку идти. Вы можете писать M/T-приложения, которые тратят все свое время между потоками, ни одно из которых не выполняет никакой полезной работы, и поскольку они вызывают все эти переключения контекста, ЦП тратит больше времени на переключение потоков, чем сами потоки получают Работай.

Посмотрите, есть ли какие-либо всплески загрузки процессора приложением во время этих всплесков.

Это может быть числовой артефакт, созданный системой мониторинга, вызванный очень коротким интервалом времени. Может быть, это просто эффект выборки, который вы видите здесь.

Может быть, таймер ядра Linux (CONFIG_HZ) настроен на регулярный запуск, на частоте 250 Гц? Проверьте файл конфигурации ядра. Есть и другие частоты на выбор.

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