Seeking help understanding my "emX: watchdog timeout" messages

Rudy crapsh at monkeybrains.net
Sun Jun 22 22:16:08 UTC 2008


Reading if_em.h

  77  * EM_TIDV - Transmit Interrupt Delay Value
  78  * Valid Range: 0-65535 (0=off)
  79  * Default Value: 64
  80  *   This value delays the generation of transmit interrupts in units of
  81  *   1.024 microseconds. Transmit interrupt reduction can improve CPU
  82  *   efficiency if properly tuned for specific network traffic. If the
  83  *   system is reporting dropped transmits, this value may be set too high
  84  *   causing the driver to run out of available transmit descriptors.


seems to indicate that 'dropped transmits' may be due to the 'tx_int_delay' being too high.  So, I 
lowered the Transmit Interrupt Delay Values 33 useconds.  I will report if this helps.
Does anyone have experience using tuning these values?

  dev.em.2.tx_int_delay: 33
  dev.em.2.tx_abs_int_delay: 33


The Intel docs explain the tx_int_delay vs the tx_abs_int_delay:
"In [high traffic] situations, the absolute timer is the source of most
  device interrupts. Under light loads or brief bursts of traffic, the
  packet timers are the primary source of interrupts.  In these situations,
  the packet timers determine the latency suffered by most packets. The
  packet timers also determine the minimum traffic rate required to trigger
  the absolute timer interrupts. For example, if the traffic rate is high
  enough to prevent the packet timer from ever expiring, then the GbE
  controller does not interrupt until the absolute timer has expired."

That is why I picked a tx_abs_int_delay == tx_int_delay.

The source code references running out of available transmit descriptors...
Is there a way to bump up the number of available transmit descriptors or to change the packet 
buffer size?  here is the dev.em.2.debug info:

  kernel: em2: Adapter hardware address = 0xc4d91224
  kernel: em2: CTRL = 0x400c0241 RCTL = 0x8002
  kernel: em2: Packet buffer = Tx=16k Rx=32k
  kernel: em2: Flow control watermarks high = 30720 low = 29220
  kernel: em2: tx_int_delay = 32, tx_abs_int_delay = 32
  kernel: em2: rx_int_delay = 0, rx_abs_int_delay = 66
  kernel: em2: fifo workaround = 0, fifo_reset_count = 0
  kernel: em2: hw tdh = 41, hw tdt = 41
  kernel: em2: hw rdh = 130, hw rdt = 129
  kernel: em2: Num Tx descriptors avail = 254         (Can I increase?)
  kernel: em2: Tx Descriptors not avail1 = 15         (Why not available?)
  kernel: em2: Tx Descriptors not avail2 = 0
  kernel: em2: Std mbuf failed = 0
  kernel: em2: Std mbuf cluster failed = 0
  kernel: em2: Driver dropped packets = 0
  kernel: em2: Driver tx dma failure in encap = 0

(not sure why tx_int_delay is 32 when I set it to 33... starts counting at 0?)


Rudy



Reference for if_em.h:
   http://fxr.watson.org/fxr/source/dev/em/if_em.h?v=FREEBSD7
Referenve for Absolute vs Packet timer:
   http://www.intel.com/design/network/applnots/ap450.pdf  (page 12)


More information about the freebsd-net mailing list