OSDN Git Service

block, bfq: use half slice_idle as a threshold to check short ttime
authorPaolo Valente <paolo.valente@linaro.org>
Fri, 22 Jan 2021 18:19:43 +0000 (19:19 +0100)
committerJens Axboe <axboe@kernel.dk>
Mon, 25 Jan 2021 01:18:24 +0000 (18:18 -0700)
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: Jan Kara <jack@suse.cz>
Signed-off-by: Paolo Valente <paolo.valente@linaro.org>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/bfq-iosched.c

index 9e4eb0f..eb2ca32 100644 (file)
@@ -5238,12 +5238,13 @@ static void bfq_update_has_short_ttime(struct bfq_data *bfqd,
                return;
 
        /* Think time is infinite if no process is linked to
-        * bfqq. Otherwise check average think time to
-        * decide whether to mark as has_short_ttime
+        * bfqq. Otherwise check average think time to decide whether
+        * 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 ||
            (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;
 
        state_changed = has_short_ttime != bfq_bfqq_has_short_ttime(bfqq);