lkml.org 
[lkml]   [2019]   [Jan]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH BUGFIX IMPROVEMENT 09/14] block, bfq: fix sequential rq detection in rate estimation
    Date
    In bfq_update_peak_rate, to check whether an I/O request rq is
    sequential, only the seek distance of rq w.r.t. the last request
    dispatched is controlled. This is not sufficient for non-rotational
    storage, where the size of rq is at least as relevant. This commit
    adds the missing control.

    Signed-off-by: Paolo Valente <paolo.valente@linaro.org>
    ---
    block/bfq-iosched.c | 12 +++++++-----
    1 file changed, 7 insertions(+), 5 deletions(-)

    diff --git a/block/bfq-iosched.c b/block/bfq-iosched.c
    index c1bb5e5fcdc4..12228af16198 100644
    --- a/block/bfq-iosched.c
    +++ b/block/bfq-iosched.c
    @@ -235,6 +235,11 @@ static struct kmem_cache *bfq_pool;

    #define BFQQ_SEEK_THR (sector_t)(8 * 100)
    #define BFQQ_SECT_THR_NONROT (sector_t)(2 * 32)
    +#define BFQ_RQ_SEEKY(bfqd, last_pos, rq) \
    + (get_sdist(last_pos, rq) > \
    + BFQQ_SEEK_THR && \
    + (!blk_queue_nonrot(bfqd->queue) || \
    + blk_rq_sectors(rq) < BFQQ_SECT_THR_NONROT))
    #define BFQQ_CLOSE_THR (sector_t)(8 * 1024)
    #define BFQQ_SEEKY(bfqq) (hweight32(bfqq->seek_history) > 19)

    @@ -2754,7 +2759,7 @@ static void bfq_update_peak_rate(struct bfq_data *bfqd, struct request *rq)

    if ((bfqd->rq_in_driver > 0 ||
    now_ns - bfqd->last_completion < BFQ_MIN_TT)
    - && get_sdist(bfqd->last_position, rq) < BFQQ_SEEK_THR)
    + && !BFQ_RQ_SEEKY(bfqd, bfqd->last_position, rq))
    bfqd->sequential_samples++;

    bfqd->tot_sectors_dispatched += blk_rq_sectors(rq);
    @@ -4511,10 +4516,7 @@ bfq_update_io_seektime(struct bfq_data *bfqd, struct bfq_queue *bfqq,
    struct request *rq)
    {
    bfqq->seek_history <<= 1;
    - bfqq->seek_history |=
    - get_sdist(bfqq->last_request_pos, rq) > BFQQ_SEEK_THR &&
    - (!blk_queue_nonrot(bfqd->queue) ||
    - blk_rq_sectors(rq) < BFQQ_SECT_THR_NONROT);
    + bfqq->seek_history |= BFQ_RQ_SEEKY(bfqd, bfqq->last_request_pos, rq);
    }

    static void bfq_update_has_short_ttime(struct bfq_data *bfqd,
    --
    2.20.1
    \
     
     \ /
      Last update: 2019-01-29 12:08    [W:2.378 / U:0.044 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site