From: Vivek Goyal <vgoyal@redhat.com>
To: linux-kernel@vger.kernel.org, jens.axboe@oracle.com
Cc: dhaval@linux.vnet.ibm.com, peterz@infradead.org,
dm-devel@redhat.com, dpshah@google.com, agk@redhat.com,
balbir@linux.vnet.ibm.com, paolo.valente@unimore.it,
jmarchan@redhat.com, guijianfeng@cn.fujitsu.com,
fernando@oss.ntt.co.jp, mikew@google.com, jmoyer@redhat.com,
nauman@google.com, mingo@elte.hu, m-ikeda@ds.jp.nec.com,
riel@redhat.com, lizf@cn.fujitsu.com, fchecconi@gmail.com,
s-uchida@ap.jp.nec.com, containers@lists.linux-foundation.org,
akpm@linux-foundation.org, righi.andrea@gmail.com,
torvalds@linux-foundation.org
Subject: [PATCH 26/23] io-controller: fix writer preemption with in a group
Date: Tue, 8 Sep 2009 18:28:35 -0400 [thread overview]
Message-ID: <20090908222835.GD3558@redhat.com> (raw)
In-Reply-To: <1251495072-7780-1-git-send-email-vgoyal@redhat.com>
o Found another issue during testing. Consider following hierarchy.
root
/ \
R1 G1
/\
R2 W
Generally in CFQ when readers and writers are running, reader immediately
preempts writers and hence reader gets the better bandwidth. In case of
hierarchical setup, it becomes little more tricky. In above diagram, G1
is a group and R1, R2 are readers and W is writer tasks.
Now assume W runs and then R1 runs and then R2 runs. After R2 has used its
time slice, if R1 is schedule in, after couple of ms, R1 will get backlogged
again in group G1, (streaming reader). But it will not preempt R1 as R1 is
also a reader and also because preemption across group is not allowed for
isolation reasons. Hence R2 will get backlogged in G1 and will get a
vdisktime much higher than W. So when G2 gets scheduled again, W will get
to run its full slice length despite the fact R2 is queue on same service
tree.
The core issue here is that apart from regular preemptions (preemption
across classes), CFQ also has this special notion of preemption with-in
class and that can lead to issues active task is running in a differnt
group than where new queue gets backlogged.
To solve the issue keep a track of this event (I am calling it late
preemption). When a group becomes eligible to run again, if late_preemption
is set, check if there are sync readers backlogged, and if yes, expire the
writer after one round of dispatch.
This solves the issue of reader not getting enough bandwidth in hierarchical
setups.
Signed-off-by: Vivek Goyal <vgoyal@redhat.com>
---
block/elevator-fq.c | 125 ++++++++++++++++++++++++++++++++++++++++++++++------
block/elevator-fq.h | 2
2 files changed, 114 insertions(+), 13 deletions(-)
Index: linux16/block/elevator-fq.h
===================================================================
--- linux16.orig/block/elevator-fq.h 2009-09-08 15:47:45.000000000 -0400
+++ linux16/block/elevator-fq.h 2009-09-08 16:12:25.000000000 -0400
@@ -43,6 +43,7 @@ struct io_sched_data {
struct io_entity *active_entity;
int nr_active;
struct io_service_tree service_tree[IO_IOPRIO_CLASSES];
+ int nr_sync;
};
struct io_entity {
@@ -150,6 +151,7 @@ struct io_group {
unsigned long state;
/* request list associated with the group */
struct request_list rl;
+ int late_preemption;
};
struct io_policy_node {
Index: linux16/block/elevator-fq.c
===================================================================
--- linux16.orig/block/elevator-fq.c 2009-09-08 15:47:45.000000000 -0400
+++ linux16/block/elevator-fq.c 2009-09-08 16:12:25.000000000 -0400
@@ -236,6 +236,68 @@ io_entity_sched_data(struct io_entity *e
return &iog_of(parent_entity(entity))->sched_data;
}
+static inline void set_late_preemption(struct elevator_queue *eq,
+ struct io_queue *active_ioq, struct io_queue *new_ioq)
+{
+ struct io_group *new_iog;
+
+ if (elv_iosched_single_ioq(eq))
+ return;
+
+ if (!active_ioq)
+ return;
+
+ /* For the time being, set late preempt only if new queue is sync */
+ if (!elv_ioq_sync(new_ioq))
+ return;
+
+ new_iog = ioq_to_io_group(new_ioq);
+
+ if (ioq_to_io_group(active_ioq) != new_iog
+ && !new_iog->late_preemption) {
+ new_iog->late_preemption = 1;
+ elv_log_ioq(eq->efqd, new_ioq, "set late preempt");
+ }
+}
+
+static inline void reset_late_preemption(struct elevator_queue *eq,
+ struct io_group *iog, struct io_queue *ioq)
+{
+ if (iog->late_preemption) {
+ iog->late_preemption = 0;
+ elv_log_ioq(eq->efqd, ioq, "reset late preempt");
+ }
+}
+
+static inline void
+check_late_preemption(struct elevator_queue *eq, struct io_queue *ioq)
+{
+ struct io_group *iog = ioq_to_io_group(ioq);
+
+ if (elv_iosched_single_ioq(eq))
+ return;
+
+ if (!iog->late_preemption)
+ return;
+
+ /*
+ * If a sync queue got queued in a group where other writers are are
+ * queued and at the time of queuing some other reader was running
+ * in anohter group, then this reader will not preempt the reader in
+ * another group. Side affect of this is that once this group gets
+ * scheduled, writer will start running and will not get preempted,
+ * as it should have been.
+ *
+ * Don't expire the writer right now otherwise writers might get
+ * completely starved. Let it just do one dispatch round and then
+ * expire. Mark the queue for expiry.
+ */
+ if (!elv_ioq_sync(ioq) && iog->sched_data.nr_sync) {
+ elv_mark_ioq_must_expire(ioq);
+ elv_log_ioq(eq->efqd, ioq, "late preempt, must expire");
+ }
+}
+
#else /* GROUP_IOSCHED */
#define for_each_entity(entity) \
for (; entity != NULL; entity = NULL)
@@ -267,6 +329,20 @@ io_entity_sched_data(struct io_entity *e
return &efqd->root_group->sched_data;
}
+
+static inline void set_late_preemption(struct elevator_queue *eq,
+ struct io_queue *active_ioq, struct io_queue *new_ioq)
+{
+}
+
+static inline void reset_late_preemption(struct elevator_queue *eq,
+ struct io_group *iog, struct io_queue *ioq)
+{
+}
+
+static inline void
+check_late_preemption(struct elevator_queue *eq, struct io_queue *ioq) { }
+
#endif /* GROUP_IOSCHED */
static inline void
@@ -620,11 +696,14 @@ static void dequeue_io_entity(struct io_
{
struct io_service_tree *st = entity->st;
struct io_sched_data *sd = io_entity_sched_data(entity);
+ struct io_queue *ioq = ioq_of(entity);
__dequeue_io_entity(st, entity);
entity->on_st = 0;
st->nr_active--;
sd->nr_active--;
+ if (ioq && elv_ioq_sync(ioq) && !elv_ioq_class_idle(ioq))
+ sd->nr_sync--;
debug_update_stats_dequeue(entity);
if (vdisktime_gt(entity->vdisktime, st->min_vdisktime))
@@ -669,6 +748,7 @@ static void enqueue_io_entity(struct io_
{
struct io_service_tree *st;
struct io_sched_data *sd = io_entity_sched_data(entity);
+ struct io_queue *ioq = ioq_of(entity);
if (entity->on_idle_st)
dequeue_io_entity_idle(entity);
@@ -684,6 +764,9 @@ static void enqueue_io_entity(struct io_
st = entity->st;
st->nr_active++;
sd->nr_active++;
+ /* Keep a track of how many sync queues are backlogged on this group */
+ if (ioq && elv_ioq_sync(ioq) && !elv_ioq_class_idle(ioq))
+ sd->nr_sync++;
entity->on_st = 1;
place_entity(st, entity, 0);
__enqueue_io_entity(st, entity, 0);
@@ -2796,6 +2879,8 @@ void elv_ioq_slice_expired(struct reques
elv_clear_iog_wait_busy_done(iog);
elv_clear_ioq_must_expire(ioq);
+ if (elv_ioq_sync(ioq))
+ reset_late_preemption(q->elevator, iog, ioq);
/*
* Queue got expired before even a single request completed or
* got expired immediately after first request completion. Use
@@ -2853,7 +2938,7 @@ void elv_slice_expired(struct request_qu
* no or if we aren't sure, a 1 will cause a preemption attempt.
*/
static int elv_should_preempt(struct request_queue *q, struct io_queue *new_ioq,
- struct request *rq)
+ struct request *rq, int group_wait_req)
{
struct io_queue *ioq;
struct elevator_queue *eq = q->elevator;
@@ -2909,6 +2994,14 @@ static int elv_should_preempt(struct req
if (iog != new_iog)
return 0;
+ /*
+ * New queue belongs to same group as active queue. If we are just
+ * idling on the group (not queue), then let this new queue preempt
+ * the active queue.
+ */
+ if (group_wait_req)
+ return 1;
+
if (eq->ops->elevator_should_preempt_fn) {
void *sched_queue = elv_ioq_sched_queue(new_ioq);
@@ -2939,9 +3032,10 @@ void elv_ioq_request_add(struct request_
struct elv_fq_data *efqd = q->elevator->efqd;
struct io_queue *ioq = rq->ioq;
struct io_group *iog = ioq_to_io_group(ioq);
- int group_wait = 0;
+ int group_wait_req = 0;
+ struct elevator_queue *eq = q->elevator;
- if (!elv_iosched_fair_queuing_enabled(q->elevator))
+ if (!elv_iosched_fair_queuing_enabled(eq))
return;
BUG_ON(!efqd);
@@ -2955,7 +3049,7 @@ void elv_ioq_request_add(struct request_
if (elv_iog_wait_request(iog)) {
del_timer(&efqd->idle_slice_timer);
elv_clear_iog_wait_request(iog);
- group_wait = 1;
+ group_wait_req = 1;
}
/*
@@ -2970,7 +3064,7 @@ void elv_ioq_request_add(struct request_
return;
}
- if (ioq == elv_active_ioq(q->elevator)) {
+ if (ioq == elv_active_ioq(eq)) {
/*
* Remember that we saw a request from this process, but
* don't start queuing just yet. Otherwise we risk seeing lots
@@ -2981,7 +3075,7 @@ void elv_ioq_request_add(struct request_
* has other work pending, don't risk delaying until the
* idle timer unplug to continue working.
*/
- if (group_wait || elv_ioq_wait_request(ioq)) {
+ if (group_wait_req || elv_ioq_wait_request(ioq)) {
del_timer(&efqd->idle_slice_timer);
if (blk_rq_bytes(rq) > PAGE_CACHE_SIZE ||
efqd->busy_queues > 1 || !blk_queue_plugged(q))
@@ -2989,7 +3083,7 @@ void elv_ioq_request_add(struct request_
else
elv_mark_ioq_must_dispatch(ioq);
}
- } else if (elv_should_preempt(q, ioq, rq)) {
+ } else if (elv_should_preempt(q, ioq, rq, group_wait_req)) {
/*
* not the active queue - expire current slice if it is
* idle and has expired it's mean thinktime or this new queue
@@ -2998,13 +3092,15 @@ void elv_ioq_request_add(struct request_
*/
elv_preempt_queue(q, ioq);
__blk_run_queue(q);
- } else if (group_wait) {
+ } else {
/*
- * Got a request in the group we were waiting for. Request
- * does not belong to active queue and we have not decided
- * to preempt the current active queue. Schedule the dispatch.
+ * Request came in a queue which is not active and we did not
+ * decide to preempt the active queue. It is possible that
+ * active queue belonged to a different group and we did not
+ * allow preemption. Keep a track of this event so that once
+ * this group is ready to dispatch, we can do some more checks
*/
- elv_schedule_dispatch(q);
+ set_late_preemption(eq, elv_active_ioq(eq), ioq);
}
}
@@ -3274,10 +3370,13 @@ expire:
new_queue:
ioq = elv_set_active_ioq(q, new_ioq);
keep_queue:
- if (ioq)
+ if (ioq) {
elv_log_ioq(efqd, ioq, "select busy=%d qued=%d disp=%d",
elv_nr_busy_ioq(q->elevator), ioq->nr_queued,
elv_ioq_nr_dispatched(ioq));
+ check_late_preemption(q->elevator, ioq);
+ }
+
return ioq;
}
WARNING: multiple messages have this Message-ID (diff)
From: Vivek Goyal <vgoyal@redhat.com>
To: linux-kernel@vger.kernel.org, jens.axboe@oracle.com
Cc: containers@lists.linux-foundation.org, dm-devel@redhat.com,
nauman@google.com, dpshah@google.com, lizf@cn.fujitsu.com,
mikew@google.com, fchecconi@gmail.com, paolo.valente@unimore.it,
ryov@valinux.co.jp, fernando@oss.ntt.co.jp,
s-uchida@ap.jp.nec.com, taka@valinux.co.jp,
guijianfeng@cn.fujitsu.com, jmoyer@redhat.com,
dhaval@linux.vnet.ibm.com, balbir@linux.vnet.ibm.com,
righi.andrea@gmail.com, m-ikeda@ds.jp.nec.com, agk@redhat.com,
akpm@linux-foundation.org, peterz@infradead.org,
jmarchan@redhat.com, torvalds@linux-foundation.org,
mingo@elte.hu, riel@redhat.com
Subject: [PATCH 26/23] io-controller: fix writer preemption with in a group
Date: Tue, 8 Sep 2009 18:28:35 -0400 [thread overview]
Message-ID: <20090908222835.GD3558@redhat.com> (raw)
In-Reply-To: <1251495072-7780-1-git-send-email-vgoyal@redhat.com>
o Found another issue during testing. Consider following hierarchy.
root
/ \
R1 G1
/\
R2 W
Generally in CFQ when readers and writers are running, reader immediately
preempts writers and hence reader gets the better bandwidth. In case of
hierarchical setup, it becomes little more tricky. In above diagram, G1
is a group and R1, R2 are readers and W is writer tasks.
Now assume W runs and then R1 runs and then R2 runs. After R2 has used its
time slice, if R1 is schedule in, after couple of ms, R1 will get backlogged
again in group G1, (streaming reader). But it will not preempt R1 as R1 is
also a reader and also because preemption across group is not allowed for
isolation reasons. Hence R2 will get backlogged in G1 and will get a
vdisktime much higher than W. So when G2 gets scheduled again, W will get
to run its full slice length despite the fact R2 is queue on same service
tree.
The core issue here is that apart from regular preemptions (preemption
across classes), CFQ also has this special notion of preemption with-in
class and that can lead to issues active task is running in a differnt
group than where new queue gets backlogged.
To solve the issue keep a track of this event (I am calling it late
preemption). When a group becomes eligible to run again, if late_preemption
is set, check if there are sync readers backlogged, and if yes, expire the
writer after one round of dispatch.
This solves the issue of reader not getting enough bandwidth in hierarchical
setups.
Signed-off-by: Vivek Goyal <vgoyal@redhat.com>
---
block/elevator-fq.c | 125 ++++++++++++++++++++++++++++++++++++++++++++++------
block/elevator-fq.h | 2
2 files changed, 114 insertions(+), 13 deletions(-)
Index: linux16/block/elevator-fq.h
===================================================================
--- linux16.orig/block/elevator-fq.h 2009-09-08 15:47:45.000000000 -0400
+++ linux16/block/elevator-fq.h 2009-09-08 16:12:25.000000000 -0400
@@ -43,6 +43,7 @@ struct io_sched_data {
struct io_entity *active_entity;
int nr_active;
struct io_service_tree service_tree[IO_IOPRIO_CLASSES];
+ int nr_sync;
};
struct io_entity {
@@ -150,6 +151,7 @@ struct io_group {
unsigned long state;
/* request list associated with the group */
struct request_list rl;
+ int late_preemption;
};
struct io_policy_node {
Index: linux16/block/elevator-fq.c
===================================================================
--- linux16.orig/block/elevator-fq.c 2009-09-08 15:47:45.000000000 -0400
+++ linux16/block/elevator-fq.c 2009-09-08 16:12:25.000000000 -0400
@@ -236,6 +236,68 @@ io_entity_sched_data(struct io_entity *e
return &iog_of(parent_entity(entity))->sched_data;
}
+static inline void set_late_preemption(struct elevator_queue *eq,
+ struct io_queue *active_ioq, struct io_queue *new_ioq)
+{
+ struct io_group *new_iog;
+
+ if (elv_iosched_single_ioq(eq))
+ return;
+
+ if (!active_ioq)
+ return;
+
+ /* For the time being, set late preempt only if new queue is sync */
+ if (!elv_ioq_sync(new_ioq))
+ return;
+
+ new_iog = ioq_to_io_group(new_ioq);
+
+ if (ioq_to_io_group(active_ioq) != new_iog
+ && !new_iog->late_preemption) {
+ new_iog->late_preemption = 1;
+ elv_log_ioq(eq->efqd, new_ioq, "set late preempt");
+ }
+}
+
+static inline void reset_late_preemption(struct elevator_queue *eq,
+ struct io_group *iog, struct io_queue *ioq)
+{
+ if (iog->late_preemption) {
+ iog->late_preemption = 0;
+ elv_log_ioq(eq->efqd, ioq, "reset late preempt");
+ }
+}
+
+static inline void
+check_late_preemption(struct elevator_queue *eq, struct io_queue *ioq)
+{
+ struct io_group *iog = ioq_to_io_group(ioq);
+
+ if (elv_iosched_single_ioq(eq))
+ return;
+
+ if (!iog->late_preemption)
+ return;
+
+ /*
+ * If a sync queue got queued in a group where other writers are are
+ * queued and at the time of queuing some other reader was running
+ * in anohter group, then this reader will not preempt the reader in
+ * another group. Side affect of this is that once this group gets
+ * scheduled, writer will start running and will not get preempted,
+ * as it should have been.
+ *
+ * Don't expire the writer right now otherwise writers might get
+ * completely starved. Let it just do one dispatch round and then
+ * expire. Mark the queue for expiry.
+ */
+ if (!elv_ioq_sync(ioq) && iog->sched_data.nr_sync) {
+ elv_mark_ioq_must_expire(ioq);
+ elv_log_ioq(eq->efqd, ioq, "late preempt, must expire");
+ }
+}
+
#else /* GROUP_IOSCHED */
#define for_each_entity(entity) \
for (; entity != NULL; entity = NULL)
@@ -267,6 +329,20 @@ io_entity_sched_data(struct io_entity *e
return &efqd->root_group->sched_data;
}
+
+static inline void set_late_preemption(struct elevator_queue *eq,
+ struct io_queue *active_ioq, struct io_queue *new_ioq)
+{
+}
+
+static inline void reset_late_preemption(struct elevator_queue *eq,
+ struct io_group *iog, struct io_queue *ioq)
+{
+}
+
+static inline void
+check_late_preemption(struct elevator_queue *eq, struct io_queue *ioq) { }
+
#endif /* GROUP_IOSCHED */
static inline void
@@ -620,11 +696,14 @@ static void dequeue_io_entity(struct io_
{
struct io_service_tree *st = entity->st;
struct io_sched_data *sd = io_entity_sched_data(entity);
+ struct io_queue *ioq = ioq_of(entity);
__dequeue_io_entity(st, entity);
entity->on_st = 0;
st->nr_active--;
sd->nr_active--;
+ if (ioq && elv_ioq_sync(ioq) && !elv_ioq_class_idle(ioq))
+ sd->nr_sync--;
debug_update_stats_dequeue(entity);
if (vdisktime_gt(entity->vdisktime, st->min_vdisktime))
@@ -669,6 +748,7 @@ static void enqueue_io_entity(struct io_
{
struct io_service_tree *st;
struct io_sched_data *sd = io_entity_sched_data(entity);
+ struct io_queue *ioq = ioq_of(entity);
if (entity->on_idle_st)
dequeue_io_entity_idle(entity);
@@ -684,6 +764,9 @@ static void enqueue_io_entity(struct io_
st = entity->st;
st->nr_active++;
sd->nr_active++;
+ /* Keep a track of how many sync queues are backlogged on this group */
+ if (ioq && elv_ioq_sync(ioq) && !elv_ioq_class_idle(ioq))
+ sd->nr_sync++;
entity->on_st = 1;
place_entity(st, entity, 0);
__enqueue_io_entity(st, entity, 0);
@@ -2796,6 +2879,8 @@ void elv_ioq_slice_expired(struct reques
elv_clear_iog_wait_busy_done(iog);
elv_clear_ioq_must_expire(ioq);
+ if (elv_ioq_sync(ioq))
+ reset_late_preemption(q->elevator, iog, ioq);
/*
* Queue got expired before even a single request completed or
* got expired immediately after first request completion. Use
@@ -2853,7 +2938,7 @@ void elv_slice_expired(struct request_qu
* no or if we aren't sure, a 1 will cause a preemption attempt.
*/
static int elv_should_preempt(struct request_queue *q, struct io_queue *new_ioq,
- struct request *rq)
+ struct request *rq, int group_wait_req)
{
struct io_queue *ioq;
struct elevator_queue *eq = q->elevator;
@@ -2909,6 +2994,14 @@ static int elv_should_preempt(struct req
if (iog != new_iog)
return 0;
+ /*
+ * New queue belongs to same group as active queue. If we are just
+ * idling on the group (not queue), then let this new queue preempt
+ * the active queue.
+ */
+ if (group_wait_req)
+ return 1;
+
if (eq->ops->elevator_should_preempt_fn) {
void *sched_queue = elv_ioq_sched_queue(new_ioq);
@@ -2939,9 +3032,10 @@ void elv_ioq_request_add(struct request_
struct elv_fq_data *efqd = q->elevator->efqd;
struct io_queue *ioq = rq->ioq;
struct io_group *iog = ioq_to_io_group(ioq);
- int group_wait = 0;
+ int group_wait_req = 0;
+ struct elevator_queue *eq = q->elevator;
- if (!elv_iosched_fair_queuing_enabled(q->elevator))
+ if (!elv_iosched_fair_queuing_enabled(eq))
return;
BUG_ON(!efqd);
@@ -2955,7 +3049,7 @@ void elv_ioq_request_add(struct request_
if (elv_iog_wait_request(iog)) {
del_timer(&efqd->idle_slice_timer);
elv_clear_iog_wait_request(iog);
- group_wait = 1;
+ group_wait_req = 1;
}
/*
@@ -2970,7 +3064,7 @@ void elv_ioq_request_add(struct request_
return;
}
- if (ioq == elv_active_ioq(q->elevator)) {
+ if (ioq == elv_active_ioq(eq)) {
/*
* Remember that we saw a request from this process, but
* don't start queuing just yet. Otherwise we risk seeing lots
@@ -2981,7 +3075,7 @@ void elv_ioq_request_add(struct request_
* has other work pending, don't risk delaying until the
* idle timer unplug to continue working.
*/
- if (group_wait || elv_ioq_wait_request(ioq)) {
+ if (group_wait_req || elv_ioq_wait_request(ioq)) {
del_timer(&efqd->idle_slice_timer);
if (blk_rq_bytes(rq) > PAGE_CACHE_SIZE ||
efqd->busy_queues > 1 || !blk_queue_plugged(q))
@@ -2989,7 +3083,7 @@ void elv_ioq_request_add(struct request_
else
elv_mark_ioq_must_dispatch(ioq);
}
- } else if (elv_should_preempt(q, ioq, rq)) {
+ } else if (elv_should_preempt(q, ioq, rq, group_wait_req)) {
/*
* not the active queue - expire current slice if it is
* idle and has expired it's mean thinktime or this new queue
@@ -2998,13 +3092,15 @@ void elv_ioq_request_add(struct request_
*/
elv_preempt_queue(q, ioq);
__blk_run_queue(q);
- } else if (group_wait) {
+ } else {
/*
- * Got a request in the group we were waiting for. Request
- * does not belong to active queue and we have not decided
- * to preempt the current active queue. Schedule the dispatch.
+ * Request came in a queue which is not active and we did not
+ * decide to preempt the active queue. It is possible that
+ * active queue belonged to a different group and we did not
+ * allow preemption. Keep a track of this event so that once
+ * this group is ready to dispatch, we can do some more checks
*/
- elv_schedule_dispatch(q);
+ set_late_preemption(eq, elv_active_ioq(eq), ioq);
}
}
@@ -3274,10 +3370,13 @@ expire:
new_queue:
ioq = elv_set_active_ioq(q, new_ioq);
keep_queue:
- if (ioq)
+ if (ioq) {
elv_log_ioq(efqd, ioq, "select busy=%d qued=%d disp=%d",
elv_nr_busy_ioq(q->elevator), ioq->nr_queued,
elv_ioq_nr_dispatched(ioq));
+ check_late_preemption(q->elevator, ioq);
+ }
+
return ioq;
}
next prev parent reply other threads:[~2009-09-08 22:28 UTC|newest]
Thread overview: 321+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-08-28 21:30 [RFC] IO scheduler based IO controller V9 Vivek Goyal
2009-08-28 21:30 ` Vivek Goyal
2009-08-28 21:30 ` [PATCH 01/23] io-controller: Documentation Vivek Goyal
2009-08-28 21:30 ` Vivek Goyal
2009-08-28 21:30 ` [PATCH 02/23] io-controller: Core of the elevator fair queuing Vivek Goyal
2009-08-28 21:30 ` Vivek Goyal
[not found] ` <1251495072-7780-3-git-send-email-vgoyal-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-08-28 22:26 ` Rik van Riel
2009-08-28 22:26 ` Rik van Riel
2009-08-28 22:26 ` Rik van Riel
[not found] ` <1251495072-7780-1-git-send-email-vgoyal-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-08-28 21:30 ` [PATCH 01/23] io-controller: Documentation Vivek Goyal
2009-08-28 21:30 ` [PATCH 02/23] io-controller: Core of the elevator fair queuing Vivek Goyal
2009-08-28 21:30 ` [PATCH 03/23] io-controller: Common flat fair queuing code in elevaotor layer Vivek Goyal
2009-08-28 21:30 ` [PATCH 04/23] io-controller: Modify cfq to make use of flat elevator fair queuing Vivek Goyal
2009-08-28 21:30 ` [PATCH 05/23] io-controller: Core scheduler changes to support hierarhical scheduling Vivek Goyal
2009-08-28 21:30 ` [PATCH 06/23] io-controller: cgroup related changes for hierarchical group support Vivek Goyal
2009-08-28 21:30 ` [PATCH 07/23] io-controller: Common hierarchical fair queuing code in elevaotor layer Vivek Goyal
2009-08-28 21:30 ` [PATCH 08/23] io-controller: cfq changes to use " Vivek Goyal
2009-08-28 21:30 ` [PATCH 09/23] io-controller: Export disk time used and nr sectors dipatched through cgroups Vivek Goyal
2009-08-28 21:30 ` [PATCH 10/23] io-controller: Debug hierarchical IO scheduling Vivek Goyal
2009-08-28 21:31 ` [PATCH 11/23] io-controller: Introduce group idling Vivek Goyal
2009-08-28 21:31 ` [PATCH 12/23] io-controller: Wait for requests to complete from last queue before new queue is scheduled Vivek Goyal
2009-08-28 21:31 ` [PATCH 13/23] io-controller: Separate out queue and data Vivek Goyal
2009-08-28 21:31 ` [PATCH 14/23] io-conroller: Prepare elevator layer for single queue schedulers Vivek Goyal
2009-08-28 21:31 ` [PATCH 15/23] io-controller: noop changes for hierarchical fair queuing Vivek Goyal
2009-08-28 21:31 ` [PATCH 16/23] io-controller: deadline " Vivek Goyal
2009-08-28 21:31 ` [PATCH 17/23] io-controller: anticipatory " Vivek Goyal
2009-08-28 21:31 ` [PATCH 18/23] io-controller: blkio_cgroup patches from Ryo to track async bios Vivek Goyal
2009-08-28 21:31 ` [PATCH 19/23] io-controller: map async requests to appropriate cgroup Vivek Goyal
2009-08-28 21:31 ` [PATCH 20/23] io-controller: Per cgroup request descriptor support Vivek Goyal
2009-08-28 21:31 ` [PATCH 21/23] io-controller: Per io group bdi congestion interface Vivek Goyal
2009-08-28 21:31 ` [PATCH 22/23] io-controller: Support per cgroup per device weights and io class Vivek Goyal
2009-08-28 21:31 ` [PATCH 23/23] io-controller: debug elevator fair queuing support Vivek Goyal
2009-08-31 1:09 ` [RFC] IO scheduler based IO controller V9 Gui Jianfeng
2009-09-02 0:58 ` Gui Jianfeng
2009-09-07 7:40 ` Gui Jianfeng
2009-09-08 22:28 ` Vivek Goyal
2009-09-08 22:28 ` [PATCH 24/23] io-controller: Don't leave a queue active when a disk is idle Vivek Goyal
2009-09-08 22:28 ` [PATCH 25/23] io-controller: fix queue vs group fairness Vivek Goyal
2009-09-08 22:28 ` [PATCH 26/23] io-controller: fix writer preemption with in a group Vivek Goyal
2009-09-10 15:18 ` [RFC] IO scheduler based IO controller V9 Jerome Marchand
2009-08-28 21:30 ` [PATCH 03/23] io-controller: Common flat fair queuing code in elevaotor layer Vivek Goyal
2009-08-28 21:30 ` Vivek Goyal
[not found] ` <1251495072-7780-4-git-send-email-vgoyal-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-08-29 1:29 ` Rik van Riel
2009-08-29 1:29 ` Rik van Riel
2009-08-29 1:29 ` Rik van Riel
2009-08-28 21:30 ` [PATCH 04/23] io-controller: Modify cfq to make use of flat elevator fair queuing Vivek Goyal
2009-08-28 21:30 ` Vivek Goyal
2009-08-29 1:44 ` Rik van Riel
2009-08-29 1:44 ` Rik van Riel
[not found] ` <1251495072-7780-5-git-send-email-vgoyal-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-08-29 1:44 ` Rik van Riel
2009-08-28 21:30 ` [PATCH 05/23] io-controller: Core scheduler changes to support hierarhical scheduling Vivek Goyal
2009-08-28 21:30 ` Vivek Goyal
2009-08-29 3:31 ` Rik van Riel
2009-08-29 3:31 ` Rik van Riel
[not found] ` <1251495072-7780-6-git-send-email-vgoyal-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-08-29 3:31 ` Rik van Riel
2009-08-28 21:30 ` [PATCH 06/23] io-controller: cgroup related changes for hierarchical group support Vivek Goyal
2009-08-28 21:30 ` Vivek Goyal
2009-08-29 3:37 ` Rik van Riel
2009-08-29 3:37 ` Rik van Riel
[not found] ` <1251495072-7780-7-git-send-email-vgoyal-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-08-29 3:37 ` Rik van Riel
2009-08-28 21:30 ` [PATCH 07/23] io-controller: Common hierarchical fair queuing code in elevaotor layer Vivek Goyal
2009-08-28 21:30 ` Vivek Goyal
2009-08-29 23:04 ` Rik van Riel
2009-08-29 23:04 ` Rik van Riel
[not found] ` <1251495072-7780-8-git-send-email-vgoyal-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-08-29 23:04 ` Rik van Riel
2009-09-03 3:08 ` Munehiro Ikeda
2009-09-03 3:08 ` Munehiro Ikeda
2009-09-03 3:08 ` Munehiro Ikeda
[not found] ` <4A9F3319.8040509-MDRzhb/z0dd8UrSeD/g0lQ@public.gmane.org>
2009-09-10 20:11 ` Vivek Goyal
2009-09-10 20:11 ` Vivek Goyal
2009-09-10 20:11 ` Vivek Goyal
2009-08-28 21:30 ` [PATCH 08/23] io-controller: cfq changes to use " Vivek Goyal
2009-08-28 21:30 ` Vivek Goyal
2009-08-29 23:11 ` Rik van Riel
2009-08-29 23:11 ` Rik van Riel
[not found] ` <1251495072-7780-9-git-send-email-vgoyal-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-08-29 23:11 ` Rik van Riel
2009-08-28 21:30 ` [PATCH 09/23] io-controller: Export disk time used and nr sectors dipatched through cgroups Vivek Goyal
2009-08-28 21:30 ` Vivek Goyal
2009-08-29 23:12 ` Rik van Riel
2009-08-29 23:12 ` Rik van Riel
[not found] ` <1251495072-7780-10-git-send-email-vgoyal-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-08-29 23:12 ` Rik van Riel
2009-08-28 21:30 ` [PATCH 10/23] io-controller: Debug hierarchical IO scheduling Vivek Goyal
2009-08-28 21:30 ` Vivek Goyal
2009-08-30 0:10 ` Rik van Riel
2009-08-30 0:10 ` Rik van Riel
[not found] ` <1251495072-7780-11-git-send-email-vgoyal-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-08-30 0:10 ` Rik van Riel
2009-08-28 21:31 ` [PATCH 11/23] io-controller: Introduce group idling Vivek Goyal
2009-08-28 21:31 ` Vivek Goyal
[not found] ` <1251495072-7780-12-git-send-email-vgoyal-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-08-30 0:38 ` Rik van Riel
2009-09-18 3:56 ` [PATCH] io-controller: Fix another bug that causing system hanging Gui Jianfeng
2009-08-30 0:38 ` [PATCH 11/23] io-controller: Introduce group idling Rik van Riel
2009-08-30 0:38 ` Rik van Riel
2009-09-18 3:56 ` [PATCH] io-controller: Fix another bug that causing system hanging Gui Jianfeng
2009-09-18 3:56 ` Gui Jianfeng
2009-09-18 14:47 ` Vivek Goyal
2009-09-18 14:47 ` Vivek Goyal
[not found] ` <4AB30508.6010206-BthXqXjhjHXQFUHtdCDX3A@public.gmane.org>
2009-09-18 14:47 ` Vivek Goyal
2009-08-28 21:31 ` [PATCH 12/23] io-controller: Wait for requests to complete from last queue before new queue is scheduled Vivek Goyal
2009-08-28 21:31 ` Vivek Goyal
[not found] ` <1251495072-7780-13-git-send-email-vgoyal-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-08-30 0:40 ` Rik van Riel
2009-08-30 0:40 ` Rik van Riel
2009-08-30 0:40 ` Rik van Riel
2009-08-28 21:31 ` [PATCH 13/23] io-controller: Separate out queue and data Vivek Goyal
2009-08-28 21:31 ` Vivek Goyal
[not found] ` <1251495072-7780-14-git-send-email-vgoyal-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-08-31 15:27 ` Rik van Riel
2009-08-31 15:27 ` Rik van Riel
2009-08-31 15:27 ` Rik van Riel
2009-08-28 21:31 ` [PATCH 14/23] io-conroller: Prepare elevator layer for single queue schedulers Vivek Goyal
2009-08-28 21:31 ` Vivek Goyal
[not found] ` <1251495072-7780-15-git-send-email-vgoyal-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-08-31 2:49 ` Rik van Riel
2009-08-31 2:49 ` Rik van Riel
2009-08-31 2:49 ` Rik van Riel
2009-08-28 21:31 ` [PATCH 15/23] io-controller: noop changes for hierarchical fair queuing Vivek Goyal
2009-08-28 21:31 ` Vivek Goyal
[not found] ` <1251495072-7780-16-git-send-email-vgoyal-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-08-31 2:52 ` Rik van Riel
2009-08-31 2:52 ` Rik van Riel
2009-08-31 2:52 ` Rik van Riel
2009-09-10 17:32 ` Vivek Goyal
2009-09-10 17:32 ` Vivek Goyal
[not found] ` <4A9B3B0B.9090009-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-09-10 17:32 ` Vivek Goyal
2009-08-28 21:31 ` [PATCH 16/23] io-controller: deadline " Vivek Goyal
2009-08-28 21:31 ` Vivek Goyal
2009-08-31 3:13 ` Rik van Riel
2009-08-31 3:13 ` Rik van Riel
[not found] ` <4A9B3FD3.6000407-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-08-31 13:46 ` Vivek Goyal
2009-08-31 13:46 ` Vivek Goyal
2009-08-31 13:46 ` Vivek Goyal
[not found] ` <1251495072-7780-17-git-send-email-vgoyal-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-08-31 3:13 ` Rik van Riel
2009-08-28 21:31 ` [PATCH 17/23] io-controller: anticipatory " Vivek Goyal
2009-08-28 21:31 ` Vivek Goyal
[not found] ` <1251495072-7780-18-git-send-email-vgoyal-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-08-31 17:21 ` Rik van Riel
2009-08-31 17:21 ` Rik van Riel
2009-08-31 17:21 ` Rik van Riel
2009-08-28 21:31 ` [PATCH 18/23] io-controller: blkio_cgroup patches from Ryo to track async bios Vivek Goyal
2009-08-28 21:31 ` Vivek Goyal
2009-08-31 17:34 ` Rik van Riel
2009-08-31 17:34 ` Rik van Riel
2009-08-31 18:56 ` Vivek Goyal
2009-08-31 18:56 ` Vivek Goyal
[not found] ` <20090831185640.GF3758-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-08-31 23:51 ` Nauman Rafique
2009-08-31 23:51 ` Nauman Rafique
2009-08-31 23:51 ` Nauman Rafique
2009-09-01 7:00 ` Ryo Tsuruta
2009-09-01 7:00 ` Ryo Tsuruta
2009-09-01 14:11 ` Vivek Goyal
2009-09-01 14:11 ` Vivek Goyal
2009-09-01 14:53 ` Rik van Riel
2009-09-01 14:53 ` Rik van Riel
[not found] ` <20090901141142.GA13709-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-09-01 14:53 ` Rik van Riel
2009-09-01 18:02 ` Nauman Rafique
2009-09-02 0:59 ` KAMEZAWA Hiroyuki
2009-09-02 9:52 ` Ryo Tsuruta
2009-09-01 18:02 ` Nauman Rafique
2009-09-01 18:02 ` Nauman Rafique
2009-09-02 0:59 ` KAMEZAWA Hiroyuki
2009-09-02 0:59 ` KAMEZAWA Hiroyuki
[not found] ` <20090902095912.cdf8a55e.kamezawa.hiroyu-+CUm20s59erQFUHtdCDX3A@public.gmane.org>
2009-09-02 3:12 ` Balbir Singh
2009-09-02 3:12 ` Balbir Singh
2009-09-02 3:12 ` Balbir Singh
2009-09-02 9:52 ` Ryo Tsuruta
[not found] ` <20090902.185251.193693849.ryov-jCdQPDEk3idL9jVzuh4AOg@public.gmane.org>
2009-09-02 13:58 ` Vivek Goyal
2009-09-02 13:58 ` Vivek Goyal
2009-09-02 13:58 ` Vivek Goyal
[not found] ` <20090902135821.GB5012-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-09-03 2:24 ` Ryo Tsuruta
2009-09-03 2:24 ` Ryo Tsuruta
[not found] ` <20090903.112423.226782505.ryov-jCdQPDEk3idL9jVzuh4AOg@public.gmane.org>
2009-09-03 2:40 ` Vivek Goyal
2009-09-03 2:40 ` Vivek Goyal
2009-09-03 2:40 ` Vivek Goyal
2009-09-03 3:41 ` Ryo Tsuruta
2009-09-03 3:41 ` Ryo Tsuruta
[not found] ` <20090903024014.GA8644-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-09-03 3:41 ` Ryo Tsuruta
[not found] ` <20090901.160004.226800357.ryov-jCdQPDEk3idL9jVzuh4AOg@public.gmane.org>
2009-09-01 14:11 ` Vivek Goyal
[not found] ` <e98e18940908311651s26de5b70ye6f4a82402956309-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2009-09-01 7:00 ` Ryo Tsuruta
[not found] ` <4A9C09BE.4060404-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-08-31 18:56 ` Vivek Goyal
[not found] ` <1251495072-7780-19-git-send-email-vgoyal-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-08-31 17:34 ` Rik van Riel
2009-08-28 21:31 ` [PATCH 19/23] io-controller: map async requests to appropriate cgroup Vivek Goyal
2009-08-28 21:31 ` Vivek Goyal
[not found] ` <1251495072-7780-20-git-send-email-vgoyal-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-08-31 17:39 ` Rik van Riel
2009-08-31 17:39 ` Rik van Riel
2009-08-31 17:39 ` Rik van Riel
2009-08-28 21:31 ` [PATCH 20/23] io-controller: Per cgroup request descriptor support Vivek Goyal
2009-08-28 21:31 ` Vivek Goyal
2009-08-31 17:54 ` Rik van Riel
2009-08-31 17:54 ` Rik van Riel
[not found] ` <1251495072-7780-21-git-send-email-vgoyal-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-08-31 17:54 ` Rik van Riel
2009-09-14 18:33 ` Nauman Rafique
2009-09-14 18:33 ` Nauman Rafique
2009-09-14 18:33 ` Nauman Rafique
[not found] ` <e98e18940909141133m5186b780r3215ce15141e4f87-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2009-09-16 18:47 ` Vivek Goyal
2009-09-16 18:47 ` Vivek Goyal
2009-09-16 18:47 ` Vivek Goyal
2009-08-28 21:31 ` [PATCH 21/23] io-controller: Per io group bdi congestion interface Vivek Goyal
2009-08-28 21:31 ` Vivek Goyal
[not found] ` <1251495072-7780-22-git-send-email-vgoyal-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-08-31 19:49 ` Rik van Riel
2009-08-31 19:49 ` Rik van Riel
2009-08-31 19:49 ` Rik van Riel
2009-08-28 21:31 ` [PATCH 22/23] io-controller: Support per cgroup per device weights and io class Vivek Goyal
2009-08-28 21:31 ` Vivek Goyal
[not found] ` <1251495072-7780-23-git-send-email-vgoyal-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-08-31 20:56 ` Rik van Riel
2009-08-31 20:56 ` Rik van Riel
2009-08-31 20:56 ` Rik van Riel
2009-08-28 21:31 ` [PATCH 23/23] io-controller: debug elevator fair queuing support Vivek Goyal
2009-08-28 21:31 ` Vivek Goyal
2009-08-31 20:57 ` Rik van Riel
2009-08-31 20:57 ` Rik van Riel
2009-08-31 21:01 ` Vivek Goyal
2009-08-31 21:01 ` Vivek Goyal
2009-08-31 21:12 ` Rik van Riel
2009-08-31 21:12 ` Rik van Riel
[not found] ` <20090831210154.GA8229-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-08-31 21:12 ` Rik van Riel
[not found] ` <4A9C3951.8020302-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-08-31 21:01 ` Vivek Goyal
[not found] ` <1251495072-7780-24-git-send-email-vgoyal-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-08-31 20:57 ` Rik van Riel
2009-08-31 1:09 ` [RFC] IO scheduler based IO controller V9 Gui Jianfeng
2009-08-31 1:09 ` Gui Jianfeng
2009-09-02 0:58 ` Gui Jianfeng
2009-09-02 0:58 ` Gui Jianfeng
2009-09-02 13:45 ` Vivek Goyal
2009-09-02 13:45 ` Vivek Goyal
2009-09-07 2:14 ` Gui Jianfeng
2009-09-07 2:14 ` Gui Jianfeng
2009-09-08 13:55 ` Vivek Goyal
2009-09-08 13:55 ` Vivek Goyal
[not found] ` <4AA46C6E.4010109-BthXqXjhjHXQFUHtdCDX3A@public.gmane.org>
2009-09-08 13:55 ` Vivek Goyal
[not found] ` <4A9DC33E.6000408-BthXqXjhjHXQFUHtdCDX3A@public.gmane.org>
2009-09-02 13:45 ` Vivek Goyal
2009-09-07 2:14 ` Gui Jianfeng
2009-09-07 7:40 ` Gui Jianfeng
2009-09-07 7:40 ` Gui Jianfeng
2009-09-08 13:53 ` Vivek Goyal
2009-09-08 13:53 ` Vivek Goyal
[not found] ` <4AA4B905.8010801-BthXqXjhjHXQFUHtdCDX3A@public.gmane.org>
2009-09-08 13:53 ` Vivek Goyal
2009-09-08 19:19 ` Vivek Goyal
2009-09-08 19:19 ` Vivek Goyal
2009-09-08 19:19 ` Vivek Goyal
2009-09-09 7:38 ` Gui Jianfeng
2009-09-09 7:38 ` Gui Jianfeng
[not found] ` <4AA75B71.5060109-BthXqXjhjHXQFUHtdCDX3A@public.gmane.org>
2009-09-09 15:05 ` Vivek Goyal
2009-09-09 15:05 ` Vivek Goyal
2009-09-09 15:05 ` Vivek Goyal
[not found] ` <20090909150537.GD8256-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-09-10 3:20 ` Gui Jianfeng
2009-09-11 1:15 ` [PATCH] io-controller: Fix task hanging when there are more than one groups Gui Jianfeng
2009-09-10 3:20 ` [RFC] IO scheduler based IO controller V9 Gui Jianfeng
2009-09-11 1:15 ` [PATCH] io-controller: Fix task hanging when there are more than one groups Gui Jianfeng
2009-09-14 2:44 ` Vivek Goyal
2009-09-14 2:44 ` Vivek Goyal
2009-09-15 3:37 ` Vivek Goyal
2009-09-15 3:37 ` Vivek Goyal
2009-09-16 0:05 ` Gui Jianfeng
2009-09-16 0:05 ` Gui Jianfeng
[not found] ` <20090915033739.GA4054-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-09-16 0:05 ` Gui Jianfeng
2009-09-16 2:58 ` Gui Jianfeng
2009-09-24 1:10 ` Gui Jianfeng
2009-09-16 2:58 ` Gui Jianfeng
[not found] ` <4AB05442.6080004-BthXqXjhjHXQFUHtdCDX3A@public.gmane.org>
2009-09-16 18:09 ` Vivek Goyal
2009-09-16 18:09 ` Vivek Goyal
2009-09-16 18:09 ` Vivek Goyal
2009-09-17 6:08 ` Gui Jianfeng
2009-09-17 6:08 ` Gui Jianfeng
[not found] ` <20090916180915.GE5221-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-09-17 6:08 ` Gui Jianfeng
2009-09-24 1:10 ` Gui Jianfeng
[not found] ` <4AA9A4BE.30005-BthXqXjhjHXQFUHtdCDX3A@public.gmane.org>
2009-09-14 2:44 ` Vivek Goyal
2009-09-15 3:37 ` Vivek Goyal
[not found] ` <20090908191941.GF15974-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-09-09 7:38 ` [RFC] IO scheduler based IO controller V9 Gui Jianfeng
2009-09-09 9:41 ` Jens Axboe
2009-09-09 9:41 ` Jens Axboe
2009-09-09 9:41 ` Jens Axboe
2009-09-08 22:28 ` Vivek Goyal
2009-09-08 22:28 ` Vivek Goyal
2009-09-08 22:28 ` [PATCH 24/23] io-controller: Don't leave a queue active when a disk is idle Vivek Goyal
2009-09-09 3:39 ` Rik van Riel
[not found] ` <20090908222821.GB3558-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-09-09 3:39 ` Rik van Riel
2009-09-08 22:28 ` [PATCH 25/23] io-controller: fix queue vs group fairness Vivek Goyal
2009-09-08 22:28 ` Vivek Goyal
2009-09-08 22:37 ` Daniel Walker
2009-09-09 1:09 ` Vivek Goyal
2009-09-09 1:09 ` Vivek Goyal
2009-09-09 1:09 ` Vivek Goyal
[not found] ` <20090908222827.GC3558-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-09-08 22:37 ` Daniel Walker
2009-09-08 23:13 ` Fabio Checconi
2009-09-09 4:44 ` Rik van Riel
2009-09-08 23:13 ` Fabio Checconi
[not found] ` <20090908231334.GJ17468-f9ZlEuEWxVeACYmtYXMKmw@public.gmane.org>
2009-09-09 1:32 ` Vivek Goyal
2009-09-09 1:32 ` Vivek Goyal
2009-09-09 1:32 ` Vivek Goyal
2009-09-09 2:03 ` Fabio Checconi
[not found] ` <20090909013205.GB3594-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-09-09 2:03 ` Fabio Checconi
2009-09-09 4:44 ` Rik van Riel
2009-09-09 4:44 ` Rik van Riel
2009-09-08 22:28 ` Vivek Goyal [this message]
2009-09-08 22:28 ` [PATCH 26/23] io-controller: fix writer preemption with in a group Vivek Goyal
[not found] ` <20090908222835.GD3558-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-09-09 4:59 ` Rik van Riel
2009-09-09 4:59 ` Rik van Riel
2009-09-09 4:59 ` Rik van Riel
2009-09-10 15:18 ` [RFC] IO scheduler based IO controller V9 Jerome Marchand
[not found] ` <4AA918C1.6070907-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-09-10 20:52 ` Vivek Goyal
2009-09-13 18:54 ` Vivek Goyal
2009-09-10 20:52 ` Vivek Goyal
2009-09-10 20:52 ` Vivek Goyal
2009-09-10 20:56 ` Vivek Goyal
2009-09-10 20:56 ` Vivek Goyal
[not found] ` <20090910205657.GD3617-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-09-11 13:16 ` Jerome Marchand
2009-09-11 13:16 ` Jerome Marchand
2009-09-11 14:30 ` Vivek Goyal
2009-09-11 14:30 ` Vivek Goyal
[not found] ` <20090911143040.GB6758-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-09-11 14:43 ` Vivek Goyal
2009-09-11 14:44 ` Jerome Marchand
2009-09-11 14:43 ` Vivek Goyal
2009-09-11 14:43 ` Vivek Goyal
[not found] ` <20090911144341.GC6758-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-09-11 14:55 ` Jerome Marchand
2009-09-11 14:55 ` Jerome Marchand
2009-09-11 15:01 ` Vivek Goyal
2009-09-11 15:01 ` Vivek Goyal
[not found] ` <4AAA64F6.2050800-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-09-11 15:01 ` Vivek Goyal
2009-09-11 14:44 ` Jerome Marchand
[not found] ` <4AAA4DA7.8010909-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-09-11 14:30 ` Vivek Goyal
[not found] ` <20090910205227.GB3617-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-09-10 20:56 ` Vivek Goyal
2009-09-14 14:26 ` Jerome Marchand
2009-09-14 14:26 ` Jerome Marchand
2009-09-13 18:54 ` Vivek Goyal
2009-09-13 18:54 ` Vivek Goyal
[not found] ` <20090913185447.GA11003-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-09-14 14:31 ` Jerome Marchand
2009-09-14 14:31 ` Jerome Marchand
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20090908222835.GD3558@redhat.com \
--to=vgoyal@redhat.com \
--cc=agk@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=balbir@linux.vnet.ibm.com \
--cc=containers@lists.linux-foundation.org \
--cc=dhaval@linux.vnet.ibm.com \
--cc=dm-devel@redhat.com \
--cc=dpshah@google.com \
--cc=fchecconi@gmail.com \
--cc=fernando@oss.ntt.co.jp \
--cc=guijianfeng@cn.fujitsu.com \
--cc=jens.axboe@oracle.com \
--cc=jmarchan@redhat.com \
--cc=jmoyer@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=lizf@cn.fujitsu.com \
--cc=m-ikeda@ds.jp.nec.com \
--cc=mikew@google.com \
--cc=mingo@elte.hu \
--cc=nauman@google.com \
--cc=paolo.valente@unimore.it \
--cc=peterz@infradead.org \
--cc=riel@redhat.com \
--cc=righi.andrea@gmail.com \
--cc=s-uchida@ap.jp.nec.com \
--cc=torvalds@linux-foundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.