Lösen von Deadlocks bei Ethernet-Watchdog-Timern

11

Ich habe eine Debian-Linux-Box (Debian Squeeze), die alle paar Stunden blockiert, wenn ich ein Python-Skript ausführe, das an einer Schnittstelle schnüffelt ...

Die Stapelverfolgung wird am Ende dieser Frage angehängt. Im Wesentlichen habe ich eine Broadcom-Ethernet-Schnittstelle ( bnx2Treiber), die zu sterben scheint, wenn ich eine Sniffing-Sitzung starte und dann versucht, einen Frame über dieselbe Schnittstelle zu übertragen.

Soweit ich das beurteilen kann, löst ein Kernel-Watchdog-Timer aus ...

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

Ich denke, es gibt eine Möglichkeit, Watchdog-Timer mit zu steuern ioctl(Ref: EmbeddedFreak: Verwendung von Linux Watchdog ).

Fragen (Original):

Wie kann ich herausfinden, welche Watchdog-Timer eth3 steuern? Bonuspunkte, wenn Sie mir sagen können, wie ich den Timer ändern oder sogar den Watchdog deaktivieren kann ...

Fragen (überarbeitet):

Wie kann ich verhindern, dass der Ethernet-Watchdog-Timer Probleme verursacht?


Stapelspur

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
quelle
1
Was ist deine MTU?
Nils
Woher wusstest du zu fragen? Ich habe es auf dieser Schnittstelle manuell auf 9000 eingestellt, bevor ich den Sniff ausgeführt habe. Kurz bevor das Skript beendet ist, habe ich es auf 1500 zurückgesetzt. Nachdem ich die Sniffer-Funktion im Skript deaktiviert hatte, sah ich einen weiteren Deadlock, als ich sudo ip link set mtu 1500 dev eth3das Skript ausführte (als es fertig war). Haben Sie einige Gedanken zum Ändern der MTU auf der Benutzeroberfläche?
Mike Pennington
@Nils, es ist sehr wahrscheinlich, dass dies ein PAE-Kernel ist ... der Prozessor ist ein Dual-CPU-Quad-Core x86-64
Mike Pennington
Interessant. Es scheint, dass Linux und OpenBSD mehr gemeinsam haben als ich dachte.
Nils
Übrigens - warum ändern Sie die MTU - schnüffeln Sie einen Portspiegel im Trunk-Modus?
Nils

Antworten:

5

Ich habe eine ähnliche Geschichte von GeNUA gelesen. Ihre Problemumgehung bestand darin, den Netzwerktreiber (OpenBSD) neu zu starten. Unter Linux würde dies bedeuten : ifdown eth3 && rmmod bnx2 && modprobe bnx2 && ifup eth3.

Das Kernproblem war ein internes Codierungsproblem mit Zeigern auf einem PAE-System in Verbindung mit dem Broadcom-Treiber.

Nils
quelle
Wann genau schlagen Sie vor, dass ich diese Befehle ausführe? Erst nachdem ich die MTU gewechselt habe?
Mike Pennington
1
@ MikePennington Ich habe den Link von meiner Antwort auf die englische Version geändert. Lesen Sie es ... Ich denke, Sie sollten es alle 30 Minuten ändern.
Nils
Ich muss das ein paar Tage in der Produktion laufen lassen, bevor ich es akzeptieren kann ... wenn das funktioniert, werde ich auch ein Kopfgeld vergeben. Dies hat meinen Hintern seit zwei Wochen getreten
Mike Pennington
Vermutlich sollte ich dieses Problem nicht sehen, wenn meine Schnittstellen-MTU Standard (1500) ist, oder? Ich habe den Code entfernt, der meine MTU geändert hat, aber ich sehe immer noch die Deadlocks
Mike Pennington
Sind alle Ihre Schnittstellen vom gleichen Typ? Schauen Sie sie sich an, ethtool -gvielleicht können Sie die Empfangs- oder Sendepuffer erhöhen, um dieses Problem zu vermeiden.
Nils
2

Durch das Auskommentieren meines Codes, der ethtoolzum Ändern der NIC-Puffer aufgerufen wurde, wurde verhindert , dass Watchdog-Timer auf der bnx2Karte ausgelöst wurden .

Ich möchte immer noch eine Antwort auf die Frage zu Watchdog-Timern finden, aber ich werde eine andere Frage stellen

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
quelle