irq

Нагрузка на процессор по прерываниям softirq dev_hard_start_xmit и netif_receive_skb

Заметил я вдруг большую нагрузку на проц у одного из моих серверов доступа на Линухе
Ядро загружено под 100%, клиенты страдают. Перетащил с него прерывания с сетевух, а ему хоть бы хрен, всё равно 100%.
смотрю в perf top

------------------------------------------------------------------------------
   PerfTop:   49401 irqs/sec  kernel:98.1% [100000 cycles],  (all, 4 CPUs)
------------------------------------------------------------------------------
 
             samples    pcnt   kernel function
             _______   _____   _______________

Как посмотреть количество прерываний на процах

Нужно будет установить пакет sysstat
Я юзаю обычно с такими ключами, но можно поиграться

mpstat -I SUM -u -P ALL 1

e1000e: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None

Случается какой то аппаратный глюк после чего сетевка перестает работать

Oct 29 00:40:28 ngtu kernel: [388735.949058] ------------[ cut here ]------------                                                                                                                                                  
Oct 29 00:40:28 ngtu kernel: [388735.949074] WARNING: at /build/buildd-linux-2.6_2.6.32-35-amd64-aZSlKL/linux-2.6-2.6.32/debian/build/source_amd64_none/net/sched/sch_generic.c:261 dev_watchdog+0xe2/0x194()                      

irq 33: nobody cared (try booting with the "irqpoll" option)

irq 33: nobody cared (try booting with the "irqpoll" option)
Disabling IRQ #33 

1.если у Вас там стоит UUID диска - смените на обозначение типа /dev/sda3
Т.е. вместо kernel /vmlinuz... root=UUID=.....
должно стать:
kernel /vmlinuz..... root=/dev/sda....(название Вашего корневого раздела)
2. допишите опцию irqpoll
3. допишите опцию noapic

Самое вероятное, что Вам поможет первый рецепт. Если же нет, то возможно irqpoll. noapic мне не нравится, она очень замедляет работу.

eth1: too many iterations (6) in nv_nic_irq.

eth1: too many iterations (6) in nv_nic_irq.
подобная проблема была замечена на сетевушках nvidia c драйвером forcedeth
помогла загрузка модуля с опцией
options forcedeth max_interrupt_work=25

балансировка сетевух на процессоры

смотрим на какой процессор больше нагрузку
1 столбец - номер прерывания
2 столбец - CPU0
3 столбец - CPU1

# grep eth /proc/interrupts
 18:    5434720  130601656   IO-APIC-fasteoi   eth0
 19:   20537977  184009107   IO-APIC-fasteoi   eth1

судя по количеству прерываний, в 3-ем столбце их больше, следовательно обе сетевушки грузят больше CPU1
так как eth1 делает больше прерываний, её и перенесем на CPU0
# echo 1 > /proc/irq/19/smp_affinity
где
1 - это номер процессора (CPU0)
19 - номер прерывания (eth1)