diff options
author | Paolo Valente <paolo.valente@linaro.org> | 2017-04-12 12:23:12 -0400 |
---|---|---|
committer | Jens Axboe <axboe@fb.com> | 2017-04-19 10:30:26 -0400 |
commit | 44e44a1b329ed37a98bc41ab21fb6897d5a922ac (patch) | |
tree | b98a87130dddbba1fa3b7a755ea77998d4841ee1 /Documentation/block/bfq-iosched.txt | |
parent | c074170e65995706be78e8c57ed2017c638d5464 (diff) |
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>
Diffstat (limited to 'Documentation/block/bfq-iosched.txt')
-rw-r--r-- | Documentation/block/bfq-iosched.txt | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/Documentation/block/bfq-iosched.txt b/Documentation/block/bfq-iosched.txt index 461b27fce979..1b87df6cd476 100644 --- a/Documentation/block/bfq-iosched.txt +++ b/Documentation/block/bfq-iosched.txt | |||
@@ -375,6 +375,11 @@ default, low latency mode is enabled. If enabled, interactive and soft | |||
375 | real-time applications are privileged and experience a lower latency, | 375 | real-time applications are privileged and experience a lower latency, |
376 | as explained in more detail in the description of how BFQ works. | 376 | as explained in more detail in the description of how BFQ works. |
377 | 377 | ||
378 | DO NOT enable this mode if you need full control on bandwidth | ||
379 | distribution. In fact, if it is enabled, then BFQ automatically | ||
380 | increases the bandwidth share of privileged applications, as the main | ||
381 | means to guarantee a lower latency to them. | ||
382 | |||
378 | timeout_sync | 383 | timeout_sync |
379 | ------------ | 384 | ------------ |
380 | 385 | ||
@@ -507,6 +512,10 @@ linear mapping between ioprio and weights, described at the beginning | |||
507 | of the tunable section, is still valid, but all weights higher than | 512 | of the tunable section, is still valid, but all weights higher than |
508 | IOPRIO_BE_NR*10 are mapped to ioprio 0. | 513 | IOPRIO_BE_NR*10 are mapped to ioprio 0. |
509 | 514 | ||
515 | Recall that, if low-latency is set, then BFQ automatically raises the | ||
516 | weight of the queues associated with interactive and soft real-time | ||
517 | applications. Unset this tunable if you need/want to control weights. | ||
518 | |||
510 | 519 | ||
511 | [1] P. Valente, A. Avanzini, "Evolution of the BFQ Storage I/O | 520 | [1] P. Valente, A. Avanzini, "Evolution of the BFQ Storage I/O |
512 | Scheduler", Proceedings of the First Workshop on Mobile System | 521 | Scheduler", Proceedings of the First Workshop on Mobile System |