cfq-iosched: Remove prio_change logic for workload selection
authorVivek Goyal <vgoyal@redhat.com>
Wed, 16 Dec 2009 22:52:59 +0000 (17:52 -0500)
committerJens Axboe <jens.axboe@oracle.com>
Fri, 18 Dec 2009 11:40:21 +0000 (12:40 +0100)
commit65b32a573eefa1cdd3cbe5ea59326308e6c3b9ad
treebdcca029d184056ffc9eab0a9c0b95cdf123c9fb
parentfb104db41e6e006c85ce1097f372cd1e10c1755c
cfq-iosched: Remove prio_change logic for workload selection

o CFQ now internally divides cfq queues in therr workload categories. sync-idle,
  sync-noidle and async. Which workload to run depends primarily on rb_key
  offset across three service trees. Which is a combination of mulitiple things
  including what time queue got queued on the service tree.

  There is one exception though. That is if we switched the prio class, say
  we served some RT tasks and again started serving BE class, then with-in
  BE class we always started with sync-noidle workload irrespective of rb_key
  offset in service trees.

  This can provide better latencies for sync-noidle workload in the presence
  of RT tasks.

o This patch gets rid of that exception and which workload to run with-in
  class always depends on lowest rb_key across service trees. The reason
  being that now we have multiple BE class groups and if we always switch
  to sync-noidle workload with-in group, we can potentially starve a sync-idle
  workload with-in group. Same is true for async workload which will be in
  root group. Also the workload-switching with-in group will become very
  unpredictable as it now depends whether some RT workload was running in
  the system or not.

Signed-off-by: Vivek Goyal <vgoyal@redhat.com>
Reviewed-by: Gui Jianfeng <guijianfeng@cn.fujitsu.com>
Acked-by: Corrado Zoccolo <czoccolo@gmail.com>
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
block/cfq-iosched.c