Commit 149321a6 authored by Jan Kara's avatar Jan Kara Committed by Jens Axboe

cfq-iosched: Fix regression in bonnie++ rewrite performance

Commit 9a7f38c4 (cfq-iosched: Convert from jiffies to nanoseconds)
broke the condition for detecting starved sync IO in
cfq_completed_request() because rq->start_time remained in jiffies but
we compared it with nanosecond values. This manifested as a regression
in bonnie++ rewrite performance because we always ended up considering
sync IO starved and thus never increased async IO queue depth.

Since rq->start_time is used in a lot of places, converting it to ns
values would be non-trivial. So just revert the condition in CFQ to use
comparison with jiffies. This will lead to suboptimal results if
cfq_fifo_expire[1] will ever come close to 1 jiffie but so far we are
relatively far from that with the storage used with CFQ (the default
value is 128 ms).

Fixes: 9a7f38c4Signed-off-by: default avatarJan Kara <jack@suse.cz>
Signed-off-by: default avatarJens Axboe <axboe@fb.com>
parent 93fdf147
...@@ -4243,7 +4243,16 @@ static void cfq_completed_request(struct request_queue *q, struct request *rq) ...@@ -4243,7 +4243,16 @@ static void cfq_completed_request(struct request_queue *q, struct request *rq)
cfqq_type(cfqq)); cfqq_type(cfqq));
st->ttime.last_end_request = now; st->ttime.last_end_request = now;
if (!(rq->start_time + cfqd->cfq_fifo_expire[1] > now)) /*
* We have to do this check in jiffies since start_time is in
* jiffies and it is not trivial to convert to ns. If
* cfq_fifo_expire[1] ever comes close to 1 jiffie, this test
* will become problematic but so far we are fine (the default
* is 128 ms).
*/
if (!time_after(rq->start_time +
nsecs_to_jiffies(cfqd->cfq_fifo_expire[1]),
jiffies))
cfqd->last_delayed_sync = now; cfqd->last_delayed_sync = now;
} }
......
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