Solución de puntos muertos del temporizador de vigilancia Ethernet

11

Tengo un Debian Linux Box (Debian Squeeze) que se interrumpe cada pocas horas si ejecuto un script de Python que huele una interfaz ...

El seguimiento de la pila se adjunta al final de esta pregunta. Esencialmente, tengo una interfaz de Ethernet Broadcom ( bnx2controlador) que parece morir cuando comienzo una sesión de rastreo y luego trata de transmitir un marco a través de la misma interfaz.

Por lo que puedo decir, un temporizador de vigilancia del kernel se está disparando ...

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

Creo que hay una manera de controlar los temporizadores de vigilancia con ioctl(ref: EmbeddedFreak: Cómo usar Linux Watchdog ).

Preguntas (Original):

¿Cómo puedo encontrar qué temporizador (s) de vigilancia controla eth3? Puntos de bonificación si puede decirme cómo cambiar el temporizador o incluso desactivar el perro guardián ...

Preguntas (revisadas):

¿Cómo puedo evitar que el temporizador de vigilancia de Ethernet cause problemas?


Seguimiento de pila

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
fuente
1
¿Cuál es tu MTU?
Nils
¿Cómo supiste preguntar? Lo configuré manualmente en 9000 en esta interfaz antes de ejecutar el sniff; justo antes de que finalice el script, lo reinicio a 1500. De hecho, después de deshabilitar la función sniffer en el script, vi otro punto muerto cuando ejecuté sudo ip link set mtu 1500 dev eth3el script (cuando estaba terminando). ¿Tiene alguna idea sobre cambiar MTU en la interfaz?
Mike Pennington
@Nils, es muy posible que este sea un kernel PAE ... el procesador es un Quad-CPU Quad core x86-64
Mike Pennington
Interesante. Parece que Linux y OpenBSD tienen más en común de lo que pensaba.
Nils
Por cierto, ¿por qué cambia la MTU? ¿Está olfateando un portmirror en modo troncal?
Nils

Respuestas:

5

He leído una historia similar de GeNUA. Su solución fue reiniciar el controlador de red (OpenBSD). En Linux esto se traduciría en: ifdown eth3 && rmmod bnx2 && modprobe bnx2 && ifup eth3.

El problema central era un problema de codificación interna con punteros en un sistema PAE junto con el controlador broadcom.

Nils
fuente
¿Cuándo sugieres exactamente que ejecute esos comandos? ¿Solo después de cambiar la MTU?
Mike Pennington
1
@ MikePennington Cambié el enlace de mi respuesta a la versión en inglés. Léelo ... Creo que deberías cambiarlo cada 30 minutos.
Nils
Necesito ejecutar esto en producción durante unos días antes de poder aceptar ... si esto funciona, también otorgaré una recompensa. Esto ha sido patear mi trasero durante dos semanas
Mike Pennington
Presumiblemente no debería ver este problema si mi interfaz MTU es predeterminada (1500), ¿verdad? Eliminé el código que modificó mi MTU, pero todavía veo los puntos muertos
Mike Pennington,
¿Todas sus interfaces son del mismo tipo? Míralos con ethtool -gtal vez puedas aumentar los buffers de recepción o transmisión para evitar este problema.
Nils
2

Al comentar mi código que llamaba ethtoola modificar los búferes de NIC, los temporizadores de vigilancia no se activaban en la bnx2tarjeta.

Todavía quiero encontrar una respuesta a la pregunta sobre los temporizadores de vigilancia, pero haré otra pregunta

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
fuente