Before it gets lost in the noise.
Put a bandaid to prevent ixgbe(4) from completely locking up the system under high load. Our platform has a few CPU cores and a single active ixgbe(4) port with 4 queues. Under high enough traffic load, at about 7.5GBs and 700,000 packets/sec (outbound), the entire system would deadlock. What we found was that each CPU was in an endless loop on a different ix taskqueue thread. The OACTIVE flag had gotten set on each queue, and the ixgbe_handle_queue() function was continuously rescheduling itself via the taskqueue_enqueue. Since all CPUs were busy with their taskqueue threads, the ixgbe_local_timer() function couldn't run to clear the OACTIVE flag. Submitted by: scottl MFC after: 1 week
This commit is contained in:
parent
a4dec862ed
commit
cd1fb2e095
@ -1368,7 +1368,7 @@ ixgbe_handle_que(void *context, int pending)
|
||||
ixgbe_start_locked(txr, ifp);
|
||||
#endif
|
||||
IXGBE_TX_UNLOCK(txr);
|
||||
if (more || (ifp->if_drv_flags & IFF_DRV_OACTIVE)) {
|
||||
if (more) {
|
||||
taskqueue_enqueue(que->tq, &que->que_task);
|
||||
return;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user