]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
Before it gets lost in the noise.
authorMaksim Yevmenkin <emax@FreeBSD.org>
Tue, 5 Jun 2012 18:48:02 +0000 (18:48 +0000)
committerMaksim Yevmenkin <emax@FreeBSD.org>
Tue, 5 Jun 2012 18:48:02 +0000 (18:48 +0000)
commitcd1fb2e0950eabbefbaee2feffa505b2bf81e076
tree633b5ae3b9d4086a402f340c8b33f210b64c4a8a
parenta4dec862ed5e1a08c3254b3468cd6349a11090e7
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
sys/dev/ixgbe/ixgbe.c