• Jan Kara's avatar
    bfq: Relax waker detection for shared queues · f9506673
    Jan Kara authored
    Currently we look for waker only if current queue has no requests. This
    makes sense for bfq queues with a single process however for shared
    queues when there is a larger number of processes the condition that
    queue has no requests is difficult to meet because often at least one
    process has some request in flight although all the others are waiting
    for the waker to do the work and this harms throughput. Relax the "no
    queued request for bfq queue" condition to "the current task has no
    queued requests yet". For this, we also need to start tracking number of
    requests in flight for each task.
    
    This patch (together with the following one) restores the performance
    for dbench with 128 clients that regressed with commit c65e6fd4
    ("bfq: Do not let waker requests skip proper accounting") because
    this commit makes requests of wakers properly enter BFQ queues and thus
    these queues become ineligible for the old waker detection logic.
    Dbench results:
    
             Vanilla 5.18-rc3        5.18-rc3 + revert      5.18-rc3 patched
    Mean     1237.36 (   0.00%)      950.16 *  23.21%*      988.35 *  20.12%*
    
    Numbers are time to complete workload so lower is better.
    
    Fixes: c65e6fd4 ("bfq: Do not let waker requests skip proper accounting")
    Signed-off-by: default avatarJan Kara <jack@suse.cz>
    Link: https://lore.kernel.org/r/20220519105235.31397-1-jack@suse.czSigned-off-by: default avatarJens Axboe <axboe@kernel.dk>
    f9506673
bfq-iosched.c 259 KB