aboutsummaryrefslogtreecommitdiff
path: root/block/blk-ioprio.h
diff options
context:
space:
mode:
authorGravatar Damien Le Moal <damien.lemoal@opensource.wdc.com> 2022-11-24 11:12:08 +0900
committerGravatar Jens Axboe <axboe@kernel.dk> 2022-11-24 06:29:36 -0700
commit015d02f48537cf2d1a65eeac50717566f9db6eec (patch)
tree6b7cad51f906aa32c451d8d73a99d8e186e9cec6 /block/blk-ioprio.h
parentblock: mq-deadline: Fix dd_finish_request() for zoned devices (diff)
downloadlinux-015d02f48537cf2d1a65eeac50717566f9db6eec.tar.gz
linux-015d02f48537cf2d1a65eeac50717566f9db6eec.tar.bz2
linux-015d02f48537cf2d1a65eeac50717566f9db6eec.zip
block: mq-deadline: Do not break sequential write streams to zoned HDDs
mq-deadline ensures an in order dispatching of write requests to zoned block devices using a per zone lock (a bit). This implies that for any purely sequential write workload, the drive is exercised most of the time at a maximum queue depth of one. However, when such sequential write workload crosses a zone boundary (when sequentially writing multiple contiguous zones), zone write locking may prevent the last write to one zone to be issued (as the previous write is still being executed) but allow the first write to the following zone to be issued (as that zone is not yet being writen and not locked). This result in an out of order delivery of the sequential write commands to the device every time a zone boundary is crossed. While such behavior does not break the sequential write constraint of zoned block devices (and does not generate any write error), some zoned hard-disks react badly to seeing these out of order writes, resulting in lower write throughput. This problem can be addressed by always dispatching the first request of a stream of sequential write requests, regardless of the zones targeted by these sequential writes. To do so, the function deadline_skip_seq_writes() is introduced and used in deadline_next_request() to select the next write command to issue if the target device is an HDD (blk_queue_nonrot() being false). deadline_fifo_request() is modified using the new deadline_earlier_request() and deadline_is_seq_write() helpers to ignore requests in the fifo list that have a preceding request in lba order that is sequential. With this fix, a sequential write workload executed with the following fio command: fio --name=seq-write --filename=/dev/sda --zonemode=zbd --direct=1 \ --size=68719476736 --ioengine=libaio --iodepth=32 --rw=write \ --bs=65536 results in an increase from 225 MB/s to 250 MB/s of the write throughput of an SMR HDD (11% increase). Cc: <stable@vger.kernel.org> Signed-off-by: Damien Le Moal <damien.lemoal@opensource.wdc.com> Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com> Link: https://lore.kernel.org/r/20221124021208.242541-3-damien.lemoal@opensource.wdc.com Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'block/blk-ioprio.h')
0 files changed, 0 insertions, 0 deletions