diff options
author | Chunguang Xu <brookxu@tencent.com> | 2021-08-02 11:51:56 +0800 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2021-08-14 19:14:56 -0600 |
commit | 4f1e9630afe6332de7286820fedd019f19eac057 (patch) | |
tree | 470518b99f9dcee9e8c73f5772c755860bfdb279 /block/blk-merge.c | |
parent | 3d2e79894bd7adc7d14638a0c72ceb8b722d1fa3 (diff) | |
download | linux-4f1e9630afe6332de7286820fedd019f19eac057.tar.gz linux-4f1e9630afe6332de7286820fedd019f19eac057.tar.bz2 linux-4f1e9630afe6332de7286820fedd019f19eac057.zip |
blk-throtl: optimize IOPS throttle for large IO scenarios
After patch 54efd50 (block: make generic_make_request handle
arbitrarily sized bios), the IO through io-throttle may be larger,
and these IOs may be further split into more small IOs. However,
IOPS throttle does not seem to be aware of this change, which
makes the calculation of IOPS of large IOs incomplete, resulting
in disk-side IOPS that does not meet expectations. Maybe we should
fix this problem.
We can reproduce it by set max_sectors_kb of disk to 128, set
blkio.write_iops_throttle to 100, run a dd instance inside blkio
and use iostat to watch IOPS:
dd if=/dev/zero of=/dev/sdb bs=1M count=1000 oflag=direct
As a result, without this change the average IOPS is 1995, with
this change the IOPS is 98.
Signed-off-by: Chunguang Xu <brookxu@tencent.com>
Acked-by: Tejun Heo <tj@kernel.org>
Link: https://lore.kernel.org/r/65869aaad05475797d63b4c3fed4f529febe3c26.1627876014.git.brookxu@tencent.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'block/blk-merge.c')
-rw-r--r-- | block/blk-merge.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/block/blk-merge.c b/block/blk-merge.c index f8707ff7e2fc..eeba8422ae82 100644 --- a/block/blk-merge.c +++ b/block/blk-merge.c @@ -348,6 +348,8 @@ void __blk_queue_split(struct bio **bio, unsigned int *nr_segs) trace_block_split(split, (*bio)->bi_iter.bi_sector); submit_bio_noacct(*bio); *bio = split; + + blk_throtl_charge_bio_split(*bio); } } |