Rozwiązywanie zakleszczeń timera watchdoga Ethernet

11

Mam okno Linuksa Debiana (Debian Squeeze), które blokuje się co kilka godzin, jeśli uruchomię skrypt Pythona, który wącha interfejs ...

Ślad stosu jest dołączony do dolnej części tego pytania. Zasadniczo mam interfejs Broadcom Ethernet ( bnx2sterownik), który zdaje się umierać, kiedy rozpoczynam sesję wąchania, a następnie próbuje przesłać ramkę z tego samego interfejsu.

Z tego, co mogę powiedzieć, wyłącza się kontroler czasu jądra ...

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

Myślę, że istnieje sposób kontrolowania timerów watchdoga ioctl(ref: EmbeddedFreak: Jak korzystać z watchdoga linux ).

Pytania (oryginalne):

Jak mogę znaleźć, które zegary kontrolujące kontrolują eth3? Punkty bonusowe, jeśli możesz mi powiedzieć, jak zmienić minutnik, a nawet wyłączyć strażnika ...

Pytania (zmienione):

Jak mogę zapobiec pojawianiu się problemów z zegarem nadzorującym Ethernet?


Ślad stosu

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
źródło
1
Jaka jest Twoja MTU?
Nils
Skąd wiedziałeś zapytać? Przed uruchomieniem wąchania ręcznie ustawiłem go na 9000 w tym interfejsie; tuż przed zakończeniem skryptu resetuję go do 1500. W rzeczywistości po wyłączeniu funkcji sniffer w skrypcie zobaczyłem kolejny impas, gdy uruchomiłem sudo ip link set mtu 1500 dev eth3skrypt (gdy się kończyło). Czy masz jakieś przemyślenia na temat zmiany MTU w interfejsie?
Mike Pennington
@Nils, jest bardzo możliwe, że jest to jądro PAE ... procesor to czterordzeniowy czterordzeniowy procesor x86-64
Mike Pennington
Ciekawy. Wygląda na to, że Linux i OpenBSD mają więcej wspólnego niż myślałem.
Nils
BTW - dlaczego zmieniasz MTU - wąchasz portmirror w trybie trunk?
Nils

Odpowiedzi:

5

Przeczytałem podobną historię z GeNUA. Ich obejściem było ponowne uruchomienie sterownika sieciowego (OpenBSD). W systemie Linux to przekłada się to: ifdown eth3 && rmmod bnx2 && modprobe bnx2 && ifup eth3.

Podstawowym problemem był wewnętrzny problem z kodowaniem wskaźników w systemie PAE w połączeniu ze sterownikiem broadcom.

Nils
źródło
Kiedy dokładnie sugerujesz, żebym uruchomił te polecenia? Dopiero po zmianie MTU?
Mike Pennington
1
@MikePennington Zmieniłem link z mojej odpowiedzi na wersję angielską. Przeczytaj ... Myślę, że powinieneś to zmieniać co 30 minut.
Nils
Muszę uruchomić to w produkcji przez kilka dni, zanim będę mógł zaakceptować ... to działa, przyznam też nagrodę. To kopało mnie w tyłek przez dwa tygodnie
Mike Pennington
Prawdopodobnie nie powinienem widzieć tego problemu, jeśli MTU interfejsu jest domyślne (1500), prawda? Usunąłem kod, który zmodyfikował moje MTU, ale wciąż widzę impas
Mike Pennington
Czy wszystkie interfejsy są tego samego typu? Spójrz na nie, ethtool -gbyć może możesz podnieść bufory odbioru lub transmisji, aby uniknąć tego problemu.
Nils
2

Komentowanie mojego kodu, który wywołał ethtoolmodyfikację buforów karty sieciowej, zatrzymało liczniki kontrolne przed zadziałaniem na bnx2karcie.

Nadal chcę znaleźć odpowiedź na pytanie dotyczące timerów nadzorujących, ale zadam kolejne pytanie

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
źródło