• Paolo Valente's avatar
    block, bfq: boost the throughput on NCQ-capable flash-based devices · bf2b79e7
    Paolo Valente authored
    This patch boosts the throughput on NCQ-capable flash-based devices,
    while still preserving latency guarantees for interactive and soft
    real-time applications. The throughput is boosted by just not idling
    the device when the in-service queue remains empty, even if the queue
    is sync and has a non-null idle window. This helps to keep the drive's
    internal queue full, which is necessary to achieve maximum
    performance. This solution to boost the throughput is a port of
    commits a68bbdd and f7d7b7a7 for CFQ.
    
    As already highlighted in a previous patch, allowing the device to
    prefetch and internally reorder requests trivially causes loss of
    control on the request service order, and hence on service guarantees.
    Fortunately, as discussed in detail in the comments on the function
    bfq_bfqq_may_idle(), if every process has to receive the same
    fraction of the throughput, then the service order enforced by the
    internal scheduler of a flash-based device is relatively close to that
    enforced by BFQ. In particular, it is close enough to let service
    guarantees be substantially preserved.
    
    Things change in an asymmetric scenario, i.e., if not every process
    has to receive the same fraction of the throughput. In this case, to
    guarantee the desired throughput distribution, the device must be
    prevented from prefetching requests. This is exactly what this patch
    does in asymmetric scenarios.
    Signed-off-by: default avatarPaolo Valente <paolo.valente@linaro.org>
    Signed-off-by: default avatarArianna Avanzini <avanzini.arianna@gmail.com>
    Signed-off-by: default avatarJens Axboe <axboe@fb.com>
    bf2b79e7
bfq-iosched.c 255 KB