linux/Documentation/block
Paolo Valente 44e44a1b32 block, bfq: improve responsiveness
This patch introduces a simple heuristic to load applications quickly,
and to perform the I/O requested by interactive applications just as
quickly. To this purpose, both a newly-created queue and a queue
associated with an interactive application (we explain in a moment how
BFQ decides whether the associated application is interactive),
receive the following two special treatments:

1) The weight of the queue is raised.

2) The queue unconditionally enjoys device idling when it empties; in
fact, if the requests of a queue are sync, then performing device
idling for the queue is a necessary condition to guarantee that the
queue receives a fraction of the throughput proportional to its weight
(see [1] for details).

For brevity, we call just weight-raising the combination of these
two preferential treatments. For a newly-created queue,
weight-raising starts immediately and lasts for a time interval that:
1) depends on the device speed and type (rotational or
non-rotational), and 2) is equal to the time needed to load (start up)
a large-size application on that device, with cold caches and with no
additional workload.

Finally, as for guaranteeing a fast execution to interactive,
I/O-related tasks (such as opening a file), consider that any
interactive application blocks and waits for user input both after
starting up and after executing some task. After a while, the user may
trigger new operations, after which the application stops again, and
so on. Accordingly, the low-latency heuristic weight-raises again a
queue in case it becomes backlogged after being idle for a
sufficiently long (configurable) time. The weight-raising then lasts
for the same time as for a just-created queue.

According to our experiments, the combination of this low-latency
heuristic and of the improvements described in the previous patch
allows BFQ to guarantee a high application responsiveness.

[1] P. Valente, A. Avanzini, "Evolution of the BFQ Storage I/O
    Scheduler", Proceedings of the First Workshop on Mobile System
    Technologies (MST-2015), May 2015.
    http://algogroup.unimore.it/people/paolo/disk_sched/mst-2015.pdf

Signed-off-by: Paolo Valente <paolo.valente@linaro.org>
Signed-off-by: Arianna Avanzini <avanzini.arianna@gmail.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
2017-04-19 08:30:26 -06:00
..
00-INDEX block, bfq: introduce the BFQ-v0 I/O scheduler as an extra scheduler 2017-04-19 08:29:02 -06:00
bfq-iosched.txt block, bfq: improve responsiveness 2017-04-19 08:30:26 -06:00
biodoc.txt block: better op and flags encoding 2016-10-28 08:48:16 -06:00
biovecs.txt Documentation: update notes in biovecs about arbitrarily sized bios 2015-08-13 12:32:07 -06:00
capability.txt
cfq-iosched.txt block: replace REQ_NOIDLE with REQ_IDLE 2016-11-01 09:43:26 -06:00
cmdline-partition.txt block: change config option name for cmdline partition parsing 2013-09-30 14:31:02 -07:00
data-integrity.txt block: Remove integrity tagging functions 2014-09-27 09:14:50 -06:00
deadline-iosched.txt
ioprio.txt
kyber-iosched.txt blk-mq: introduce Kyber multiqueue I/O scheduler 2017-04-14 14:06:58 -06:00
null_blk.txt null_blk: add usage hints for NVM 2016-11-16 08:26:11 -07:00
pr.txt Doc: Fix double words in Documentation 2017-01-26 15:25:41 -07:00
queue-sysfs.txt block: remove the discard_zeroes_data flag 2017-04-08 11:25:38 -06:00
request.txt
stat.txt
switching-sched.txt Documentation: drop as block elevator reference in switching-sched.txt 2011-11-04 12:01:48 -07:00
writeback_cache_control.txt block, drivers, fs: rename REQ_FLUSH to REQ_PREFLUSH 2016-06-07 13:41:38 -06:00