Commit b5f74eca authored by Paolo Valente's avatar Paolo Valente Committed by Jens Axboe

block, bfq: use half slice_idle as a threshold to check short ttime

The value of the I/O plugging (idling) timeout is used also as the
think-time threshold to decide whether a process has a short think
time.  In this respect, a good value of this timeout for rotational
drives is un the order of several ms. Yet, this is often too long a
time interval to be effective as a think-time threshold. This commit
mitigates this problem (by a lot, according to tests), by halving the
threshold.
Tested-by: default avatarJan Kara <jack@suse.cz>
Signed-off-by: default avatarPaolo Valente <paolo.valente@linaro.org>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent a33df75c
...@@ -5238,12 +5238,13 @@ static void bfq_update_has_short_ttime(struct bfq_data *bfqd, ...@@ -5238,12 +5238,13 @@ static void bfq_update_has_short_ttime(struct bfq_data *bfqd,
return; return;
/* Think time is infinite if no process is linked to /* Think time is infinite if no process is linked to
* bfqq. Otherwise check average think time to * bfqq. Otherwise check average think time to decide whether
* decide whether to mark as has_short_ttime * to mark as has_short_ttime. To this goal, compare average
* think time with half the I/O-plugging timeout.
*/ */
if (atomic_read(&bic->icq.ioc->active_ref) == 0 || if (atomic_read(&bic->icq.ioc->active_ref) == 0 ||
(bfq_sample_valid(bfqq->ttime.ttime_samples) && (bfq_sample_valid(bfqq->ttime.ttime_samples) &&
bfqq->ttime.ttime_mean > bfqd->bfq_slice_idle)) bfqq->ttime.ttime_mean > bfqd->bfq_slice_idle>>1))
has_short_ttime = false; has_short_ttime = false;
state_changed = has_short_ttime != bfq_bfqq_has_short_ttime(bfqq); state_changed = has_short_ttime != bfq_bfqq_has_short_ttime(bfqq);
......
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