Commit 2d870722 authored by Jens Axboe's avatar Jens Axboe

cfq-iosched: tweak kick logic a bit more

We only kick the dispatch for an idling queue, if we think it's a
(somewhat) fully merged request. Also allow a kick if we have other
busy queues in the system, since we don't want to risk waiting for
a potential merge in that case. It's better to get some work done and
proceed.
Signed-off-by: default avatarJens Axboe <jens.axboe@oracle.com>
parent 40bb54d1
...@@ -1905,10 +1905,13 @@ cfq_rq_enqueued(struct cfq_data *cfqd, struct cfq_queue *cfqq, ...@@ -1905,10 +1905,13 @@ cfq_rq_enqueued(struct cfq_data *cfqd, struct cfq_queue *cfqq,
* of tiny requests, because we disrupt the normal plugging * of tiny requests, because we disrupt the normal plugging
* and merging. If the request is already larger than a single * and merging. If the request is already larger than a single
* page, let it rip immediately. For that case we assume that * page, let it rip immediately. For that case we assume that
* merging is already done. * merging is already done. Ditto for a busy system that
* has other work pending, don't risk delaying until the
* idle timer unplug to continue working.
*/ */
if (cfq_cfqq_wait_request(cfqq)) { if (cfq_cfqq_wait_request(cfqq)) {
if (blk_rq_bytes(rq) > PAGE_CACHE_SIZE) { if (blk_rq_bytes(rq) > PAGE_CACHE_SIZE ||
cfqd->busy_queues > 1) {
del_timer(&cfqd->idle_slice_timer); del_timer(&cfqd->idle_slice_timer);
blk_start_queueing(cfqd->queue); blk_start_queueing(cfqd->queue);
} }
......
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