• Jens Axboe's avatar
    blk-mq: improve tag waiting setup for non-shared tags · f906a6a0
    Jens Axboe authored
    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.
    Reviewed-by: default avatarOmar Sandoval <osandov@fb.com>
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    f906a6a0
blk-mq.c 72.3 KB