Résolution des interblocages d'horloge de surveillance Ethernet

11

J'ai une boîte Linux Debian (Debian Squeeze) qui se bloque toutes les quelques heures si j'exécute un script python qui renifle une interface ...

La trace de pile est attachée au bas de cette question. Essentiellement, j'ai une interface Ethernet Broadcom ( bnx2pilote) qui semble mourir lorsque je démarre une session de reniflement, puis il essaie de transmettre une trame sur la même interface.

D'après ce que je peux dire, une minuterie de surveillance du noyau se déclenche ...

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

Je pense qu'il y a un moyen de contrôler les temporisateurs de chien de garde avec ioctl(ref: EmbeddedFreak: Comment utiliser le chien de garde linux ).

Questions (originales):

Comment puis-je trouver le ou les minuteurs de surveillance contrôlant eth3? Des points bonus si vous pouvez me dire comment changer la minuterie ou même désactiver le chien de garde ...

Questions (révisées):

Comment puis-je empêcher le temporisateur de surveillance Ethernet de causer des problèmes?


Trace de la pile

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
la source
1
Quel est votre MTU?
Nils
Comment avez-vous su demander? Je l'ai réglé manuellement sur 9000 sur cette interface avant d'exécuter le sniff; juste avant la fin du script, je l'ai réinitialisé à 1500. En fait, après avoir désactivé la fonction renifleur dans le script, j'ai vu un autre blocage lorsque j'ai exécuté sudo ip link set mtu 1500 dev eth3le script (car il se terminait). Avez-vous des réflexions sur le changement de MTU sur l'interface?
Mike Pennington
@Nils, il est très possible qu'il s'agisse d'un noyau PAE ... le processeur est un Quad Core double processeur x86-64
Mike Pennington
Intéressant. Il semble que Linux et OpenBSD aient plus en commun que je ne le pensais.
Nils
BTW - pourquoi changez-vous le MTU - reniflez-vous un miroir de port en mode trunk?
Nils

Réponses:

5

J'ai lu une histoire similaire de GeNUA. Leur solution de contournement consistait à redémarrer le pilote réseau (OpenBSD). Sous Linux , cela se traduirait par: ifdown eth3 && rmmod bnx2 && modprobe bnx2 && ifup eth3.

Le problème principal était un problème de codage interne avec des pointeurs sur un système PAE en conjonction avec le pilote Broadcom.

Nils
la source
Quand proposez-vous exactement que j'exécute ces commandes? Seulement après avoir changé le MTU?
Mike Pennington
1
@MikePennington J'ai changé le lien de ma réponse à la version anglaise. Lisez-le ... Je pense que vous devriez le changer toutes les 30 minutes.
Nils
J'ai besoin de faire tourner ceci en production pendant quelques jours avant de pouvoir l'accepter ... ça marche, j'accorderai aussi une prime. Cela me donne des coups de pied depuis deux semaines
Mike Pennington
Vraisemblablement, je ne devrais pas voir ce problème si mon interface MTU est par défaut (1500), non? J'ai supprimé le code qui a modifié mon MTU, mais je vois toujours les blocages
Mike Pennington
Toutes vos interfaces sont-elles du même type? Regardez-les avec ethtool -gpeut-être que vous pouvez augmenter les tampons de réception ou de transmission pour éviter ce problème.
Nils
2

Commentant mon code qui a appelé ethtoolà modifier les tampons NIC a empêché les minuteries de surveillance de se déclencher sur la bnx2carte.

Je veux toujours trouver une réponse à la question sur les minuteries de surveillance, mais je vais poser une autre question

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
la source