aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVivek Goyal <vgoyal@redhat.com>2009-07-10 04:20:30 -0400
committerJens Axboe <jens.axboe@oracle.com>2009-09-11 08:33:30 -0400
commitd58b85e1e891cd842d6e183f5d94d06a4fd0122c (patch)
tree32a77721594c79610b8dba9026ff9f9928545d17
parent5ad531db6e0f3c3c985666e83d3c1c4d53acccf9 (diff)
cfq-iosched: no need to keep track of busy_rt_queues
o Get rid of busy_rt_queues infrastructure. Looks like it is redundant. o Once an RT queue gets request it will preempt any of the BE or IDLE queues immediately. Otherwise this queue will be put on service tree and scheduler will anyway select this queue before any of the BE or IDLE queue. Hence looks like there is no need to keep track of how many busy RT queues are currently on service tree. Signed-off-by: Vivek Goyal <vgoyal@redhat.com> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
-rw-r--r--block/cfq-iosched.c23
1 files changed, 0 insertions, 23 deletions
diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c
index 93693bf6083e..ca0d7e71324b 100644
--- a/block/cfq-iosched.c
+++ b/block/cfq-iosched.c
@@ -134,11 +134,6 @@ struct cfq_data {
134 struct rb_root prio_trees[CFQ_PRIO_LISTS]; 134 struct rb_root prio_trees[CFQ_PRIO_LISTS];
135 135
136 unsigned int busy_queues; 136 unsigned int busy_queues;
137 /*
138 * Used to track any pending rt requests so we can pre-empt current
139 * non-RT cfqq in service when this value is non-zero.
140 */
141 unsigned int busy_rt_queues;
142 137
143 int rq_in_driver[2]; 138 int rq_in_driver[2];
144 int sync_flight; 139 int sync_flight;
@@ -653,8 +648,6 @@ static void cfq_add_cfqq_rr(struct cfq_data *cfqd, struct cfq_queue *cfqq)
653 BUG_ON(cfq_cfqq_on_rr(cfqq)); 648 BUG_ON(cfq_cfqq_on_rr(cfqq));
654 cfq_mark_cfqq_on_rr(cfqq); 649 cfq_mark_cfqq_on_rr(cfqq);
655 cfqd->busy_queues++; 650 cfqd->busy_queues++;
656 if (cfq_class_rt(cfqq))
657 cfqd->busy_rt_queues++;
658 651
659 cfq_resort_rr_list(cfqd, cfqq); 652 cfq_resort_rr_list(cfqd, cfqq);
660} 653}
@@ -678,8 +671,6 @@ static void cfq_del_cfqq_rr(struct cfq_data *cfqd, struct cfq_queue *cfqq)
678 671
679 BUG_ON(!cfqd->busy_queues); 672 BUG_ON(!cfqd->busy_queues);
680 cfqd->busy_queues--; 673 cfqd->busy_queues--;
681 if (cfq_class_rt(cfqq))
682 cfqd->busy_rt_queues--;
683} 674}
684 675
685/* 676/*
@@ -1185,20 +1176,6 @@ static struct cfq_queue *cfq_select_queue(struct cfq_data *cfqd)
1185 goto expire; 1176 goto expire;
1186 1177
1187 /* 1178 /*
1188 * If we have a RT cfqq waiting, then we pre-empt the current non-rt
1189 * cfqq.
1190 */
1191 if (!cfq_class_rt(cfqq) && cfqd->busy_rt_queues) {
1192 /*
1193 * We simulate this as cfqq timed out so that it gets to bank
1194 * the remaining of its time slice.
1195 */
1196 cfq_log_cfqq(cfqd, cfqq, "preempt");
1197 cfq_slice_expired(cfqd, 1);
1198 goto new_queue;
1199 }
1200
1201 /*
1202 * The active queue has requests and isn't expired, allow it to 1179 * The active queue has requests and isn't expired, allow it to
1203 * dispatch. 1180 * dispatch.
1204 */ 1181 */