Resolvendo deadlocks do timer de watchdog Ethernet

11

Eu tenho uma caixa debian linux (Debian Squeeze) que trava a cada poucas horas se eu executar um script python que cheira uma interface ...

O rastreamento de pilha está anexado à parte inferior desta pergunta. Basicamente, eu tenho uma interface Ethernet ( bnx2driver) da Broadcom que parece morrer quando inicio uma sessão de detecção e, em seguida, ela tenta transmitir um quadro pela mesma interface.

Pelo que sei, um timer de watchdog do kernel está disparando ...

NETDEV WATCHDOG: eth3 (bnx2): transmit queue 0 timed out

Eu acho que existe uma maneira de controlar os temporizadores do watchdog com ioctl(ref: EmbeddedFreak: Como usar o watchdog linux ).

Perguntas (Original):

Como posso descobrir quais cronômetros de watchdog estão controlando o eth3? Pontos de bônus, se você puder me dizer como alterar o cronômetro ou até desativar o watchdog ...

Perguntas (revisadas):

Como posso impedir que o timer do watchdog ethernet cause problemas?


Rastreio de pilha

Apr 30 08:38:44 Hotcoffee kernel: [275460.837147] ------------[ cut here ]------------
Apr 30 08:38:44 Hotcoffee kernel: [275460.837166] WARNING: at /build/buildd-linux-2.6_2.6.32-41squeeze2-amd64-NDo8b7/linux-2.6-2.6.32/debian/build/source_amd64_none/net/sched/sch_generic.c:261 dev_watchdog+0xe2/0x194()
Apr 30 08:38:44 Hotcoffee kernel: [275460.837169] Hardware name: PowerEdge R710
Apr 30 08:38:44 Hotcoffee kernel: [275460.837171] NETDEV WATCHDOG: eth3 (bnx2): transmit queue 0 timed out
Apr 30 08:38:44 Hotcoffee kernel: [275460.837172] Modules linked in: 8021q garp stp parport_pc ppdev lp parport pci_stub vboxpci vboxnetadp vboxnetflt vboxdrv ext2 loop psmouse power_meter button dcdbas evdev pcspkr processor serio_raw ext4 mbcache jbd2 crc16 sg sr_mod cdrom ses ata_generic sd_mod usbhid hid crc_t10dif enclosure uhci_hcd ehci_hcd megaraid_sas ata_piix thermal libata usbcore nls_base scsi_mod bnx2 thermal_sys [last unloaded: scsi_wait_scan]
Apr 30 08:38:44 Hotcoffee kernel: [275460.837202] Pid: 0, comm: swapper Not tainted 2.6.32-5-amd64 #1
Apr 30 08:38:44 Hotcoffee kernel: [275460.837204] Call Trace:
Apr 30 08:38:44 Hotcoffee kernel: [275460.837206]  <IRQ>  [<ffffffff81263086>] ? dev_watchdog+0xe2/0x194
Apr 30 08:38:44 Hotcoffee kernel: [275460.837211]  [<ffffffff81263086>] ? dev_watchdog+0xe2/0x194
Apr 30 08:38:44 Hotcoffee kernel: [275460.837217]  [<ffffffff8104df9c>] ? warn_slowpath_common+0x77/0xa3
Apr 30 08:38:44 Hotcoffee kernel: [275460.837220]  [<ffffffff81262fa4>] ? dev_watchdog+0x0/0x194
Apr 30 08:38:44 Hotcoffee kernel: [275460.837223]  [<ffffffff8104e024>] ? warn_slowpath_fmt+0x51/0x59
Apr 30 08:38:44 Hotcoffee kernel: [275460.837228]  [<ffffffff8104a4ba>] ? try_to_wake_up+0x289/0x29b
Apr 30 08:38:44 Hotcoffee kernel: [275460.837231]  [<ffffffff81262f78>] ? netif_tx_lock+0x3d/0x69
Apr 30 08:38:44 Hotcoffee kernel: [275460.837237]  [<ffffffff8124dda3>] ? netdev_drivername+0x3b/0x40
Apr 30 08:38:44 Hotcoffee kernel: [275460.837240]  [<ffffffff81263086>] ? dev_watchdog+0xe2/0x194
Apr 30 08:38:44 Hotcoffee kernel: [275460.837242]  [<ffffffff8103fa2a>] ? __wake_up+0x30/0x44
Apr 30 08:38:44 Hotcoffee kernel: [275460.837249]  [<ffffffff8105a71b>] ? run_timer_softirq+0x1c9/0x268
Apr 30 08:38:44 Hotcoffee kernel: [275460.837252]  [<ffffffff81053dc7>] ? __do_softirq+0xdd/0x1a6
Apr 30 08:38:44 Hotcoffee kernel: [275460.837257]  [<ffffffff8102462a>] ? lapic_next_event+0x18/0x1d
Apr 30 08:38:44 Hotcoffee kernel: [275460.837262]  [<ffffffff81011cac>] ? call_softirq+0x1c/0x30
Apr 30 08:38:44 Hotcoffee kernel: [275460.837265]  [<ffffffff8101322b>] ? do_softirq+0x3f/0x7c
Apr 30 08:38:44 Hotcoffee kernel: [275460.837267]  [<ffffffff81053c37>] ? irq_exit+0x36/0x76
Apr 30 08:38:44 Hotcoffee kernel: [275460.837270]  [<ffffffff810250f8>] ? smp_apic_timer_interrupt+0x87/0x95
Apr 30 08:38:44 Hotcoffee kernel: [275460.837273]  [<ffffffff81011673>] ? apic_timer_interrupt+0x13/0x20
Apr 30 08:38:44 Hotcoffee kernel: [275460.837274]  <EOI>  [<ffffffffa01bc509>] ? acpi_idle_enter_bm+0x27d/0x2af [processor]
Apr 30 08:38:44 Hotcoffee kernel: [275460.837283]  [<ffffffffa01bc502>] ? acpi_idle_enter_bm+0x276/0x2af [processor]
Apr 30 08:38:44 Hotcoffee kernel: [275460.837289]  [<ffffffff8123a0ba>] ? cpuidle_idle_call+0x94/0xee
Apr 30 08:38:44 Hotcoffee kernel: [275460.837293]  [<ffffffff8100fe97>] ? cpu_idle+0xa2/0xda
Apr 30 08:38:44 Hotcoffee kernel: [275460.837297]  [<ffffffff8151c140>] ? early_idt_handler+0x0/0x71
Apr 30 08:38:44 Hotcoffee kernel: [275460.837301]  [<ffffffff8151ccdd>] ? start_kernel+0x3dc/0x3e8
Apr 30 08:38:44 Hotcoffee kernel: [275460.837304]  [<ffffffff8151c3b7>] ? x86_64_start_kernel+0xf9/0x106
Apr 30 08:38:44 Hotcoffee kernel: [275460.837306] ---[ end trace 92c65e52c9e327ec ]---
Mike Pennington
fonte
1
Qual é o seu MTU?
Nils
Como você soube perguntar? Eu o defino manualmente como 9000 nessa interface antes de executar o sniff; pouco antes da conclusão do script, redefini-o para 1500. De fato, depois de desativar a função sniffer no script, vi outro impasse ao executar sudo ip link set mtu 1500 dev eth3o script (quando ele estava sendo finalizado). Você pensa em mudar o MTU na interface?
Mike Pennington
@Nils, é muito possível que este é um kernel PAE ... o processador é um núcleo x86-64 Dual-CPU Quad
Mike Pennington
Interessante. Parece que o Linux e o OpenBSD têm mais em comum do que eu pensava.
Nils
BTW - por que você altera o MTU - você está farejando um portmirror no modo de tronco?
Nils

Respostas:

5

Eu li uma história semelhante do GeNUA. A solução alternativa foi reiniciar o driver de rede (OpenBSD). No Linux isso se traduziria em: ifdown eth3 && rmmod bnx2 && modprobe bnx2 && ifup eth3.

O principal problema era um problema interno de codificação com ponteiros em um sistema PAE em conjunto com o driver de broadcom.

Nils
fonte
Quando exatamente você está sugerindo que eu execute esses comandos? Somente depois de trocar o MTU?
Mike Pennington
1
@ MikePennington Alterei o link da minha resposta para a versão em inglês. Leia ... Eu acho que você deveria trocá-lo a cada 30 minutos.
Nils
Preciso executá-lo em produção por alguns dias antes de poder aceitar ... se funcionar, também recompensarei uma recompensa. Este tem sido chutar a minha bunda por duas semanas
Mike Pennington
Presumivelmente, eu não deveria ver esse problema se minha interface MTU for o padrão (1500), certo? I removido o código que modifiquei meu MTU, mas eu ainda estou vendo os impasses
Mike Pennington
Todas as suas interfaces são do mesmo tipo? Veja-os com ethtool -gtalvez você possa aumentar os buffers de recebimento ou transmissão para evitar esse problema.
Nils
2

Comentar o meu código que chamava ethtoolpara modificar os buffers da NIC impediu que os temporizadores do watchdog disparassem no bnx2cartão.

Ainda quero encontrar uma resposta para a pergunta sobre temporizadores de vigilância, mas farei outra pergunta

def _linux_buffer_alloc(iface=None, rx_ring_buffers=768,
    netdev_max_backlog=30000):

    default_rx = 255
    default_rx_jumbo = 0
    default_netdev_max_backlog = 1000
    ## Set linux rx ring buffers (to prevent tcpdump 'dropped by intf' msg)
## FIXME: removing for now due to systematic deadlocks with the bnx2 driver
#    sample: ethtool -G eth3 rx 768
#    cmd = 'ethtool -G %s rx %s' % (iface, rx_ring_buffers)
#    p = Popen(cmd.split(' '), stdout=PIPE)
#    p.communicate(); time.sleep(0.15)
#    sample: ethtool -G eth3 rx-jumbo 0
#    cmd = 'ethtool -G %s rx-jumbo %s' % (iface, default_rx_jumbo)
#    p = Popen(cmd.split(' '), stdout=PIPE)
#    p.communicate(); time.sleep(0.15)
## /FIXME
Mike Pennington
fonte