cfq-iosched: enable idling for last queue on priority class
authorCorrado Zoccolo <czoccolo@gmail.com>
Mon, 26 Oct 2009 21:45:11 +0000 (22:45 +0100)
committerJens Axboe <jens.axboe@oracle.com>
Wed, 28 Oct 2009 08:23:26 +0000 (09:23 +0100)
commita6d44e982d3734583b3b4e1d36921af8cfd61fc0
tree1d9b409057361524af2e097fe5de1c505533d603
parentc0324a020e5b351f100569b128715985f1023af8
cfq-iosched: enable idling for last queue on priority class

cfq can disable idling for queues in various circumstances.
When workloads of different priorities are competing, if the higher
priority queue has idling disabled, lower priority queues may steal
its disk share. For example, in a scenario with an RT process
performing seeky reads vs a BE process performing sequential reads,
on an NCQ enabled hardware, with low_latency unset,
the RT process will dispatch only the few pending requests every full
slice of service for the BE process.

The patch solves this issue by always performing idle on the last
queue at a given priority class > idle. If the same process, or one
that can pre-empt it (so at the same priority or higher), submits a
new request within the idle window, the lower priority queue won't
dispatch, saving the disk bandwidth for higher priority ones.

Note: this doesn't touch the non_rotational + NCQ case (no hardware
to test if this is a benefit in that case).

Signed-off-by: Corrado Zoccolo <czoccolo@gmail.com>
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
block/cfq-iosched.c