mirror of https://gitee.com/openkylin/linux.git
block: Make CFQ default to IOPS mode on SSDs
CFQ idling causes reduced IOPS throughput on non-rotational disks. Since disk head seeking is not applicable to SSDs, it doesn't really help performance by anticipating future near-by IO requests. By turning off idling (and switching to IOPS mode), we allow other processes to dispatch IO requests down to the driver and so increase IO throughput. Following FIO benchmark results were taken on a cloud SSD offering with idling on and off: Idling iops avg-lat(ms) stddev bw ------------------------------------------------------ On 7054 90.107 38.697 28217KB/s Off 29255 21.836 11.730 117022KB/s fio --name=temp --size=100G --time_based --ioengine=libaio \ --randrepeat=0 --direct=1 --invalidate=1 --verify=0 \ --verify_fatal=0 --rw=randread --blocksize=4k --group_reporting=1 \ --filename=/dev/sdb --runtime=10 --iodepth=64 --numjobs=10 And the following is from a local SSD run: Idling iops avg-lat(ms) stddev bw ------------------------------------------------------ On 19320 33.043 14.068 77281KB/s Off 21626 29.465 12.662 86507KB/s fio --name=temp --size=5G --time_based --ioengine=libaio \ --randrepeat=0 --direct=1 --invalidate=1 --verify=0 \ --verify_fatal=0 --rw=randread --blocksize=4k --group_reporting=1 \ --filename=/fio_data --runtime=10 --iodepth=64 --numjobs=10 Reviewed-by: Nauman Rafique <nauman@google.com> Signed-off-by: Tahsin Erdogan <tahsin@google.com> Signed-off-by: Jens Axboe <axboe@fb.com>
This commit is contained in:
parent
3f21c265cd
commit
41c0126b3f
|
@ -4460,7 +4460,7 @@ static int cfq_init_queue(struct request_queue *q, struct elevator_type *e)
|
||||||
cfqd->cfq_slice[1] = cfq_slice_sync;
|
cfqd->cfq_slice[1] = cfq_slice_sync;
|
||||||
cfqd->cfq_target_latency = cfq_target_latency;
|
cfqd->cfq_target_latency = cfq_target_latency;
|
||||||
cfqd->cfq_slice_async_rq = cfq_slice_async_rq;
|
cfqd->cfq_slice_async_rq = cfq_slice_async_rq;
|
||||||
cfqd->cfq_slice_idle = cfq_slice_idle;
|
cfqd->cfq_slice_idle = blk_queue_nonrot(q) ? 0 : cfq_slice_idle;
|
||||||
cfqd->cfq_group_idle = cfq_group_idle;
|
cfqd->cfq_group_idle = cfq_group_idle;
|
||||||
cfqd->cfq_latency = 1;
|
cfqd->cfq_latency = 1;
|
||||||
cfqd->hw_tag = -1;
|
cfqd->hw_tag = -1;
|
||||||
|
|
Loading…
Reference in New Issue