Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.
CPU_IRQ_IMBALANCE Linux / DevOps

Мониторинг прерываний процессора в Linux: /proc/interrupts и smp_affinity

Обновлено: 21.08.2026
  • Одно из ядер CPU (обычно CPU0) загружено на 100% в режиме %si (Software Interrupts) или %hi (Hardware Interrupts).
  • Дропы сетевых пакетов на сетевых интерфейсах (RX drops/overruns) при высокой сетевой нагрузке.
  • Неравномерное распределение счетчиков прерываний в /proc/interrupts между ядрами.

1. Анализ распределения аппаратных прерываний

watch -n 1 -d cat /proc/interrupts

Или фильтрация по сетевым интерфейсам (например, eth0):

grep -E "CPU|eth0|mlx|ixgbe" /proc/interrupts

2. Проверка и настройка демона irqbalance

# Установка и запуск демона
apt-get install -y irqbalance || dnf install -y irqbalance
systemctl enable --now irqbalance

Исключение изолированных ядер из балансировки в /etc/default/irqbalance:

IRQBALANCE_BANNED_CPUS="0000ff00"

3. Ручная привязка IRQ через smp_affinity (для High-Load / Low-Latency)

Отключите irqbalance для целевых интерфейсов и задайте маску CPU напрямую (маска в hex-формате, например bitmask 2 = CPU1, 4 = CPU2):

# Определение номера IRQ для очереди eth0-rx-0
IRQ_NUM=$(grep "eth0-rx-0" /proc/interrupts | awk -F: '{print $1}' | tr -d ' ')

# Привязка к конкретному ядру CPU1 (маска 0x2)
echo 2 > /proc/irq/$IRQ_NUM/smp_affinity

4. Включение многоочередевой обработки RPS/RFS

# Включение Receive Packet Steering на все ядра для eth0 (маска f = первые 4 ядра)
echo f > /sys/class/net/eth0/queues/rx-0/rps_cpus
Практический опыт инженера: Для сетевых адаптеров 10G/40G/100G с поддержкой RSS (Receive Side Scaling) настраивайте количество очередей сетевой карты равным количеству NUMA-узлов или физических ядер (ethtool -L eth0 combined N), избегая Hyper-Threading siblings.

Частые вопросы (FAQ)

Что означает smp_affinity_list вместо smp_affinity?

Файл smp_affinity принимает шестнадцатеричную битовую маску (hex), а smp_affinity_list принимает понятный список ядер через запятую или диапазон (например, '0-3,7').

Почему все прерывания по умолчанию идут на CPU0?

В старых версиях ядер или при отключенном irqbalance BIOS/ядро назначает обработчик прерывания на первичный загрузочный процессор (Boot Strap Processor, BSP).