[PATCH] cfq-iosched: check busy queues before deciding we are idle
authorJens Axboe <axboe@suse.de>
Thu, 1 Jun 2006 08:07:26 +0000 (10:07 +0200)
committerJens Axboe <axboe@suse.de>
Thu, 1 Jun 2006 08:07:26 +0000 (10:07 +0200)
For just one busy queue (like async write out), we often overlooked
that we could queue more io and decided we were idle instead. This causes
us quite a bit of performance loss.

Signed-off-by: Jens Axboe <axboe@suse.de>
block/cfq-iosched.c

index 11ce6aa..d582433 100644 (file)
@@ -879,6 +879,13 @@ static struct cfq_queue *cfq_set_active_queue(struct cfq_data *cfqd)
                cfqq = list_entry_cfqq(cfqd->cur_rr.next);
 
        /*
+        * If no new queues are available, check if the busy list has some
+        * before falling back to idle io.
+        */
+       if (!cfqq && !list_empty(&cfqd->busy_rr))
+               cfqq = list_entry_cfqq(cfqd->busy_rr.next);
+
+       /*
         * if we have idle queues and no rt or be queues had pending
         * requests, either allow immediate service if the grace period
         * has passed or arm the idle grace timer