Commit d450542e authored by Davide Sapienza's avatar Davide Sapienza Committed by Jens Axboe

block, bfq: increase weight-raising duration for interactive apps

The maximum possible duration of the weight-raising period for
interactive applications is limited to 13 seconds, as this is the time
needed to load the largest application that we considered when tuning
weight raising. Unfortunately, in such an evaluation, we did not
consider the case of very slow virtual machines.

For example, on a QEMU/KVM virtual machine
- running in a slow PC;
- with a virtual disk stacked on a slow low-end 5400rpm HDD;
- serving a heavy I/O workload, such as the sequential reading of
several files;
mplayer takes 23 seconds to start, if constantly weight-raised.

To address this issue, this commit conservatively sets the upper limit
for weight-raising duration to 25 seconds.
Signed-off-by: default avatarDavide Sapienza <sapienza.dav@gmail.com>
Signed-off-by: default avatarPaolo Valente <paolo.valente@linaro.org>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent e24f1c24
...@@ -876,22 +876,26 @@ static unsigned int bfq_wr_duration(struct bfq_data *bfqd) ...@@ -876,22 +876,26 @@ static unsigned int bfq_wr_duration(struct bfq_data *bfqd)
do_div(dur, bfqd->peak_rate); do_div(dur, bfqd->peak_rate);
/* /*
* Limit duration between 3 and 13 seconds. Tests show that * Limit duration between 3 and 25 seconds. The upper limit
* higher values than 13 seconds often yield the opposite of * has been conservatively set after the following worst case:
* the desired result, i.e., worsen responsiveness by letting * on a QEMU/KVM virtual machine
* non-interactive and non-soft-real-time applications * - running in a slow PC
* preserve weight raising for a too long time interval. * - with a virtual disk stacked on a slow low-end 5400rpm HDD
* - serving a heavy I/O workload, such as the sequential reading
* of several files
* mplayer took 23 seconds to start, if constantly weight-raised.
*
* As for higher values than that accomodating the above bad
* scenario, tests show that higher values would often yield
* the opposite of the desired result, i.e., would worsen
* responsiveness by allowing non-interactive applications to
* preserve weight raising for too long.
* *
* On the other end, lower values than 3 seconds make it * On the other end, lower values than 3 seconds make it
* difficult for most interactive tasks to complete their jobs * difficult for most interactive tasks to complete their jobs
* before weight-raising finishes. * before weight-raising finishes.
*/ */
if (dur > msecs_to_jiffies(13000)) return clamp_val(dur, msecs_to_jiffies(3000), msecs_to_jiffies(25000));
dur = msecs_to_jiffies(13000);
else if (dur < msecs_to_jiffies(3000))
dur = msecs_to_jiffies(3000);
return dur;
} }
/* switch back from soft real-time to interactive weight raising */ /* switch back from soft real-time to interactive weight raising */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment