Memecahkan kebuntuan timer pengawas Ethernet

11

Saya memiliki kotak linux debian (Debian Squeeze) yang macet setiap beberapa jam jika saya menjalankan skrip python yang mengendus antarmuka ...

Jejak tumpukan dilampirkan ke bagian bawah pertanyaan ini. Pada dasarnya, saya memiliki antarmuka ethernet Broadcom ( bnx2driver) yang tampaknya mati ketika saya memulai sesi mengendus dan kemudian mencoba untuk mengirimkan bingkai keluar dari antarmuka yang sama.

Dari apa yang saya tahu, timer pengawas kernel tersandung ...

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

Saya pikir ada cara untuk mengontrol timer pengawas dengan ioctl(ref: EmbeddedFreak: Cara menggunakan pengawas linux ).

Pertanyaan (Asli):

Bagaimana saya dapat menemukan timer pengawas mana yang mengendalikan eth3? Poin bonus jika Anda dapat memberi tahu saya cara mengganti timer atau bahkan menonaktifkan ...

Pertanyaan (Direvisi):

Bagaimana saya bisa mencegah pengawas waktu ethernet dari menyebabkan masalah?


Jejak tumpukan

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
sumber
1
Apa MTUmu?
Nils
Bagaimana Anda tahu untuk bertanya? Saya secara manual mengaturnya ke 9000 pada antarmuka ini sebelum menjalankan sniff; tepat sebelum skrip selesai, saya mengatur ulang ke 1500. Bahkan, setelah menonaktifkan fungsi sniffer dalam skrip, saya melihat kebuntuan lain ketika saya menjalankan sudo ip link set mtu 1500 dev eth3skrip (saat itu selesai). Apakah Anda memiliki pemikiran tentang mengubah MTU pada antarmuka?
Mike Pennington
@Nils, sangat mungkin bahwa ini adalah kernel PAE ... prosesornya adalah Dual-CPU Quad core x86-64
Mike Pennington
Menarik. Sepertinya Linux dan OpenBSD memiliki lebih banyak kesamaan daripada yang saya kira.
Nils
BTW - mengapa Anda mengubah MTU - apakah Anda mengendus portmirror dalam mode trunk?
Nils

Jawaban:

5

Saya telah membaca kisah serupa dari GeNUA. Solusi mereka adalah memulai kembali driver jaringan (OpenBSD). Pada Linux ini akan menerjemahkan untuk: ifdown eth3 && rmmod bnx2 && modprobe bnx2 && ifup eth3.

Masalah inti adalah masalah pengkodean internal dengan pointer pada sistem PAE bersama dengan driver-broadcom.

Nils
sumber
Kapan tepatnya Anda menyarankan agar saya menjalankan perintah itu? Hanya setelah saya mengubah MTU?
Mike Pennington
1
@ MikePennington Saya mengubah tautan dari jawaban saya ke versi bahasa Inggris. Baca itu ... Saya pikir Anda harus mengubahnya setiap 30 menit.
Nils
Saya perlu menjalankan ini dalam produksi selama beberapa hari sebelum saya dapat menerima ... jika ini berhasil, saya akan memberikan hadiah juga. Ini telah menendang pantat saya selama dua minggu
Mike Pennington
Mungkin saya seharusnya tidak melihat masalah ini jika antarmuka MTU saya default (1500), kan? Saya menghapus kode yang mengubah MTU saya, tetapi saya masih melihat kebuntuan
Mike Pennington
Apakah semua antarmuka Anda dari jenis yang sama? Lihatlah mereka dengan ethtool -gmungkin Anda dapat meningkatkan penerimaan atau mengirimkan buffer untuk menghindari masalah ini.
Nils
2

Mengomentari kode saya yang dipanggil ethtooluntuk mengubah buffer NIC menghentikan pengawas waktu dari tersandung pada bnx2kartu.

Saya masih ingin menemukan jawaban untuk pertanyaan tentang pengawas waktu, tetapi saya akan mengajukan pertanyaan lain

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
sumber