The BGE0 test statistics you posted to the FreeBSD list were very
interesting. I'm still scratching my head wondering what changed
between 1.6 and HEAD to create such an improvement in packet rates.
The change I thought would make a big difference was when we embedded
the LWKT message header in the mbuf instead of allocating it separately,
but I looked at the CVS logs and that change actually occured before
the 1.6 release.
It ought to be possible to track down the EM lockups... The interface
if_ierrors counter is being updated so it has to be coming from one
of the recorded statistics:
/* Rx Errors */
ifp->if_ierrors =
adapter->dropped_pkts +
adapter->stats.rxerrc +
adapter->stats.crcerrs +
adapter->stats.algnerrc +
adapter->stats.ruc + adapter->stats.roc +
adapter->stats.mpc + adapter->stats.cexterr +
adapter->rx_overruns;
From the debug output, these lines stick out:
em0: Missed Packets = 7202325 <<<<<< adapter->stats.mpc
em0: XOFF Xmtd = 7202331
That doesn't look right at all. It kinda looks like the receive
ring got filled up and then never got cleaned out by the driver.
Either the ring state controller on the driver side or the state
controller on the EM hardware side got stuck.
-Matt