• John Garry's avatar
    blk-mq: Use shared tags for shared sbitmap support · e155b0c2
    John Garry authored
    Currently we use separate sbitmap pairs and active_queues atomic_t for
    shared sbitmap support.
    
    However a full sets of static requests are used per HW queue, which is
    quite wasteful, considering that the total number of requests usable at
    any given time across all HW queues is limited by the shared sbitmap depth.
    
    As such, it is considerably more memory efficient in the case of shared
    sbitmap to allocate a set of static rqs per tag set or request queue, and
    not per HW queue.
    
    So replace the sbitmap pairs and active_queues atomic_t with a shared
    tags per tagset and request queue, which will hold a set of shared static
    rqs.
    
    Since there is now no valid HW queue index to be passed to the blk_mq_ops
    .init and .exit_request callbacks, pass an invalid index token. This
    changes the semantics of the APIs, such that the callback would need to
    validate the HW queue index before using it. Currently no user of shared
    sbitmap actually uses the HW queue index (as would be expected).
    Signed-off-by: default avatarJohn Garry <john.garry@huawei.com>
    Reviewed-by: default avatarMing Lei <ming.lei@redhat.com>
    Link: https://lore.kernel.org/r/1633429419-228500-13-git-send-email-john.garry@huawei.comSigned-off-by: default avatarJens Axboe <axboe@kernel.dk>
    e155b0c2
blk-mq.c 101 KB