On Thu, Nov 09, 2017 at 04:00:09PM -0700, Jens Axboe wrote: > If we run out of driver tags, we currently treat shared and non-shared > tags the same - both cases hook into the tag waitqueue. This is a bit > more costly than it needs to be on unshared tags, since we have to both > grab the hctx lock, and the waitqueue lock (and disable interrupts). > For the non-shared case, we can simply mark the queue as needing a > restart. > > Split blk_mq_dispatch_wait_add() to account for both cases, and > rename it to blk_mq_mark_tag_wait() to better reflect what it > does now. > > Without this patch, shared and non-shared performance is about the same > with 4 fio thread hammering on a single null_blk device (~410K, at 75% > sys). With the patch, the shared case is the same, but the non-shared > tags case runs at 431K at 71% sys. > > Signed-off-by: Jens Axboe <axboe@xxxxxxxxx> The best of both worlds. Reviewed-by: Omar Sandoval <osandov@xxxxxx>