• Paolo Valente's avatar
    block, bfq: reset inject limit when think-time state changes · 766d6141
    Paolo Valente authored
    Until the base value of the request service times gets finally
    computed for a bfq_queue, the inject limit does depend on the
    think-time state (short|long). The limit must be 0 or 1 if the think
    time is deemed, respectively, as short or long. However, such a check
    and possible limit update is performed only periodically, once per
    second. So, to make the injection mechanism much more reactive, this
    commit performs the update also every time the think-time state
    changes.
    
    In addition, in the following special case, this commit lets the
    inject limit of a bfq_queue bfqq remain equal to 1 even if bfqq's
    think time is short: bfqq's I/O is synchronized with that of some
    other queue, i.e., bfqq may receive new I/O only after the I/O of the
    other queue is completed. Keeping the inject limit to 1 allows the
    blocking I/O to be served while bfqq is in service. And this is very
    convenient both for bfqq and for the total throughput, as explained
    in detail in the comments in bfq_update_has_short_ttime().
    Reported-by: default avatarSrivatsa S. Bhat (VMware) <srivatsa@csail.mit.edu>
    Tested-by: default avatarSrivatsa S. Bhat (VMware) <srivatsa@csail.mit.edu>
    Signed-off-by: default avatarPaolo Valente <paolo.valente@linaro.org>
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    766d6141
bfq-iosched.c 220 KB