Message ID | 1251495072-7780-16-git-send-email-vgoyal@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Vivek Goyal wrote: > This patch changes noop to use queue scheduling code from elevator layer. > One can go back to old noop by deselecting CONFIG_IOSCHED_NOOP_HIER. > > Signed-off-by: Nauman Rafique <nauman@google.com> > Signed-off-by: Vivek Goyal <vgoyal@redhat.com> Not sure why noop needs hierarchical fair queueing support, but this patch is so small we might as well take it to keep things consistent between schedulers. Acked-by: Rik van Riel <riel@redhat.com>
On Sun, Aug 30, 2009 at 10:52:59PM -0400, Rik van Riel wrote: > Vivek Goyal wrote: >> This patch changes noop to use queue scheduling code from elevator layer. >> One can go back to old noop by deselecting CONFIG_IOSCHED_NOOP_HIER. >> >> Signed-off-by: Nauman Rafique <nauman@google.com> >> Signed-off-by: Vivek Goyal <vgoyal@redhat.com> > > Not sure why noop needs hierarchical fair queueing > support, but this patch is so small we might as well > take it to keep things consistent between schedulers. > Thinking more about it. It probably can be useful for the case ryo is pointing out where fast SSD drivers are not making use of kernel IO schedulers. If they want group io schduling support on these SSDs, they can modify their driver to make use of hierarchical noop. > Acked-by: Rik van Riel <riel@redhat.com> Thanks Vivek > > -- > All rights reversed. -- dm-devel mailing list dm-devel@redhat.com https://www.redhat.com/mailman/listinfo/dm-devel
diff --git a/block/Kconfig.iosched b/block/Kconfig.iosched index a7d0bf8..28cd500 100644 --- a/block/Kconfig.iosched +++ b/block/Kconfig.iosched @@ -25,6 +25,17 @@ config IOSCHED_NOOP that do their own scheduling and require only minimal assistance from the kernel. +config IOSCHED_NOOP_HIER + bool "Noop Hierarchical Scheduling support" + depends on IOSCHED_NOOP && CGROUPS + select ELV_FAIR_QUEUING + select GROUP_IOSCHED + default n + ---help--- + Enable hierarhical scheduling in noop. In this mode noop keeps + one IO queue per cgroup instead of a global queue. Elevator + fair queuing logic ensures fairness among various queues. + config IOSCHED_AS tristate "Anticipatory I/O scheduler" default y diff --git a/block/noop-iosched.c b/block/noop-iosched.c index 731dbf2..4ba496f 100644 --- a/block/noop-iosched.c +++ b/block/noop-iosched.c @@ -6,6 +6,7 @@ #include <linux/bio.h> #include <linux/module.h> #include <linux/init.h> +#include "elevator-fq.h" struct noop_queue { struct list_head queue; @@ -82,6 +83,15 @@ static void noop_free_noop_queue(struct elevator_queue *e, void *sched_queue) kfree(nq); } +#ifdef CONFIG_IOSCHED_NOOP_HIER +static struct elv_fs_entry noop_attrs[] = { + ELV_ATTR(fairness), + ELV_ATTR(slice_sync), + ELV_ATTR(group_idle), + __ATTR_NULL +}; +#endif + static struct elevator_type elevator_noop = { .ops = { .elevator_merge_req_fn = noop_merged_requests, @@ -92,6 +102,10 @@ static struct elevator_type elevator_noop = { .elevator_alloc_sched_queue_fn = noop_alloc_noop_queue, .elevator_free_sched_queue_fn = noop_free_noop_queue, }, +#ifdef CONFIG_IOSCHED_NOOP_HIER + .elevator_features = ELV_IOSCHED_NEED_FQ | ELV_IOSCHED_SINGLE_IOQ, + .elevator_attrs = noop_attrs, +#endif .elevator_name = "noop", .elevator_owner = THIS_MODULE, };