• Paolo Valente's avatar
    block, bfq: avoid selecting a queue w/o budget · 218cb897
    Paolo Valente authored
    To boost throughput on devices with internal queueing and in scenarios
    where device idling is not strictly needed, bfq immediately starts
    serving a new bfq_queue if the in-service bfq_queue remains without
    pending I/O, even if new I/O may arrive soon for the latter queue. Then,
    if such I/O actually arrives soon, bfq preempts the new in-service
    bfq_queue so as to give the previous queue a chance to go on being
    served (in case the previous queue should actually be the one to be
    served, according to its timestamps).
    
    However, the in-service bfq_queue, say Q, may also be without further
    budget when it remains also pending I/O. Since bfq changes budgets
    dynamically to fit the needs of bfq_queues, this happens more often than
    one may expect. If this happens, then there is no point in trying to go
    on serving Q when new I/O arrives for it soon: Q would be expired
    immediately after being selected for service. This would only cause
    useless overhead. This commit avoids such a useless selection.
    Signed-off-by: default avatarPaolo Valente <paolo.valente@linaro.org>
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    218cb897
bfq-iosched.c 195 KB