• Yu Kuai's avatar
    block: fix that util can be greater than 100% · 7be83569
    Yu Kuai authored
    util means the percentage that disk has IO, and theoretically it should
    not be greater than 100%. However, there is a gap for rq-based disk:
    
    io_ticks will be updated when rq is allocated, however, before such rq
    dispatch to driver, it will not be account as inflight from
    blk_mq_start_request() hence diskstats_show()/part_stat_show() will not
    update io_ticks. For example:
    
    1) at t0, issue a new IO, rq is allocated, and blk_account_io_start()
    update io_ticks;
    
    2) something is wrong with drivers, and the rq can't be dispatched;
    
    3) at t0 + 10s, drivers recovers and rq is dispatched and done, io_ticks
    is updated;
    
    Then if user is using "iostat 1" to monitor "util", between t0 - t0+9s,
    util will be zero, and between t0+9s - t0+10s, util will be 1000%.
    
    Fix this problem by updating io_ticks from diskstats_show() and
    part_stat_show() if there are rq allocated.
    Signed-off-by: default avatarYu Kuai <yukuai3@huawei.com>
    Link: https://lore.kernel.org/r/20240509123717.3223892-3-yukuai1@huaweicloud.comSigned-off-by: default avatarJens Axboe <axboe@kernel.dk>
    7be83569
genhd.c 37.1 KB