이더넷 워치 독 타이머 교착 상태 해결


11

인터페이스를 스니핑하는 파이썬 스크립트를 실행하면 몇 시간마다 교착 상태가되는 데비안 리눅스 상자 (Debian Squeeze)가 있습니다 ...

스택 추적은이 질문의 맨 아래에 첨부됩니다. 기본적 bnx2으로 스니핑 세션을 시작할 때 죽는 것처럼 보이는 Broadcom 이더넷 인터페이스 ( 드라이버)가 있으며 동일한 인터페이스로 프레임을 전송하려고 시도합니다.

내가 알 수 있듯이 커널 워치 독 타이머가 작동합니다 ...

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

와치 독 타이머를 제어하는 ​​방법이 있다고 생각합니다 ioctl(참고 : EmbeddedFreak : Linux 워치 독 사용 방법 ).

질문 (원본) :

eth3를 제어하는 ​​워치 독 타이머를 어떻게 찾을 수 있습니까? 타이머를 변경하거나 감시자를 비활성화하는 방법을 알려 주면 보너스 포인트 ...

질문 (개정) :

이더넷 워치 독 타이머로 인해 문제가 발생하지 않도록하려면 어떻게해야합니까?


스택 추적

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 ]---

1
당신의 MTU는 무엇입니까?
닐스

어떻게 물어 보셨나요? 스 니프를 실행하기 전에이 인터페이스에서 수동으로 9000으로 설정했습니다. 스크립트가 끝나기 직전에 1500으로 재설정했습니다. 실제로 스크립트에서 스니퍼 기능을 비활성화 한 후 스크립트를 실행할 때 또 다른 교착 상태를 보았습니다 sudo ip link set mtu 1500 dev eth3(완료 됨). 인터페이스에서 MTU를 변경하는 것에 대한 생각이 있습니까?
Mike Pennington

@Nils, 이것이 PAE 커널 일 가능성이 매우 높습니다 ... 프로세서는 듀얼 CPU 쿼드 코어 x86-64입니다.
Mike Pennington

흥미 롭군 Linux와 OpenBSD가 생각보다 공통점이 많습니다.
Nils

BTW-왜 MTU를 변경합니까? 트렁크 모드에서 포트 미러를 스니핑하고 있습니까?
Nils

답변:


5

나는 GeNUA에서 비슷한 이야기를 읽었습니다. 해결 방법은 네트워크 드라이버 (OpenBSD)를 다시 시작하는 것이 었습니다. Linux에서는 다음과 같이 번역됩니다 ifdown eth3 && rmmod bnx2 && modprobe bnx2 && ifup eth3..

핵심 문제는 Broadcom 드라이버와 함께 PAE 시스템의 포인터에 대한 내부 코딩 문제입니다.


내가 언제 그런 명령을 실행하라고 제안하고 있습니까? MTU를 변경 한 후에 만?
Mike Pennington

1
@ MikePennington 나는 대답에서 영어 버전으로의 링크를 변경했습니다. 읽어보세요 ... 30 분마다 바꿔야한다고 생각합니다.
Nils

수락하기 전에 며칠 동안 프로덕션 환경에서이 작업을 실행해야합니다.이 기능이 작동하면 현상금도 수여합니다. 이것은 2 주 동안 내 엉덩이를 걷어차 고있다
마이크 Pennington

내 인터페이스 MTU가 기본값 (1500) 인 경우이 문제가 표시되지 않습니다. MTU를 수정 한 코드를 제거했지만 여전히 교착 상태가 나타납니다.
Mike Pennington

모든 인터페이스가 동일한 유형입니까? ethtool -g이 문제를 피하기 위해 수신 또는 전송 버퍼를 올릴 수 있는 것으로 살펴보십시오 .
Nils

2

ethtoolNIC 버퍼를 수정하기 위해 호출 한 코드를 주석 처리하면 워치 독 타이머가 bnx2카드 에서 넘어지지 않습니다.

여전히 워치 독 타이머에 관한 질문에 대한 답변을 찾고 싶지만 다른 질문을하겠습니다.

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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.