• Paolo Valente's avatar
    blok, bfq: do not plug I/O if all queues are weight-raised · 89f4d27c
    Paolo Valente authored
    [ Upstream commit c8765de0 ]
    
    To reduce latency for interactive and soft real-time applications, bfq
    privileges the bfq_queues containing the I/O of these
    applications. These privileged queues, referred-to as weight-raised
    queues, get a much higher share of the device throughput
    w.r.t. non-privileged queues. To preserve this higher share, the I/O
    of any non-weight-raised queue must be plugged whenever a sync
    weight-raised queue, while being served, remains temporarily empty. To
    attain this goal, bfq simply plugs any I/O (from any queue), if a sync
    weight-raised queue remains empty while in service.
    
    Unfortunately, this plugging typically lowers throughput with random
    I/O, on devices with internal queueing (because it reduces the filling
    level of the internal queues of the device).
    
    This commit addresses this issue by restricting the cases where
    plugging is performed: if a sync weight-raised queue remains empty
    while in service, then I/O plugging is performed only if some of the
    active bfq_queues are *not* weight-raised (which is actually the only
    circumstance where plugging is needed to preserve the higher share of
    the throughput of weight-raised queues). This restriction proved able
    to boost throughput in really many use cases needing only maximum
    throughput.
    Signed-off-by: default avatarPaolo Valente <paolo.valente@linaro.org>
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
    89f4d27c
bfq-iosched.c 191 KB