drbr_enqueue - OCE driver - Freebsd 9.1

Ryan Stone rysto32 at gmail.com
Mon Apr 8 19:15:33 UTC 2013


On Mon, Apr 8, 2013 at 1:14 PM, Duvvuru,Venkat Kumar <
VenkatKumar.Duvvuru at emulex.com> wrote:

> Hi,
> In the transmit path, if enqueue mechanism is used instead of blocking on
> the lock, the throughput is not good in some scenarios (especially single
> queue, multiple connections).
> For example:
> if (TRY_LOCK(&wq->tx_lock)) {
>            status = oce_multiq_transmit(ifp, m, wq);
>            UNLOCK(&wq->tx_lock);
>      } else {
>            status = drbr_enqueue(ifp, wq->br, m);
>      }
>
> Instead of the above code where the request is enqueued if I use a normal
> LOCK and block on it, it is giving good performance.
>
> Any suggestions on why the throughput is low in case of enqueue mechanism.
>
> Thx,
> Venkat.
>

Shouldn't you be triggering a taskqueue to actually transmit the packet in
the "failed to acquire lock" case?  Otherwise it could be held in the drbr
indefinitely.


More information about the freebsd-net mailing list