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