aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Documentation/cgroups/blkio-controller.txt35
-rw-r--r--block/Kconfig23
-rw-r--r--block/Kconfig.iosched16
-rw-r--r--block/blk-cgroup.c2
-rw-r--r--block/blk-cgroup.h14
-rw-r--r--block/cfq-iosched.c2
-rw-r--r--init/Kconfig27
7 files changed, 55 insertions, 64 deletions
diff --git a/Documentation/cgroups/blkio-controller.txt b/Documentation/cgroups/blkio-controller.txt
index d422b410a995..48e0b21b0059 100644
--- a/Documentation/cgroups/blkio-controller.txt
+++ b/Documentation/cgroups/blkio-controller.txt
@@ -17,6 +17,9 @@ HOWTO
17You can do a very simple testing of running two dd threads in two different 17You can do a very simple testing of running two dd threads in two different
18cgroups. Here is what you can do. 18cgroups. Here is what you can do.
19 19
20- Enable Block IO controller
21 CONFIG_BLK_CGROUP=y
22
20- Enable group scheduling in CFQ 23- Enable group scheduling in CFQ
21 CONFIG_CFQ_GROUP_IOSCHED=y 24 CONFIG_CFQ_GROUP_IOSCHED=y
22 25
@@ -54,24 +57,16 @@ cgroups. Here is what you can do.
54 57
55Various user visible config options 58Various user visible config options
56=================================== 59===================================
57CONFIG_CFQ_GROUP_IOSCHED
58 - Enables group scheduling in CFQ. Currently only 1 level of group
59 creation is allowed.
60
61CONFIG_DEBUG_CFQ_IOSCHED
62 - Enables some debugging messages in blktrace. Also creates extra
63 cgroup file blkio.dequeue.
64
65Config options selected automatically
66=====================================
67These config options are not user visible and are selected/deselected
68automatically based on IO scheduler configuration.
69
70CONFIG_BLK_CGROUP 60CONFIG_BLK_CGROUP
71 - Block IO controller. Selected by CONFIG_CFQ_GROUP_IOSCHED. 61 - Block IO controller.
72 62
73CONFIG_DEBUG_BLK_CGROUP 63CONFIG_DEBUG_BLK_CGROUP
74 - Debug help. Selected by CONFIG_DEBUG_CFQ_IOSCHED. 64 - Debug help. Right now some additional stats file show up in cgroup
65 if this option is enabled.
66
67CONFIG_CFQ_GROUP_IOSCHED
68 - Enables group scheduling in CFQ. Currently only 1 level of group
69 creation is allowed.
75 70
76Details of cgroup files 71Details of cgroup files
77======================= 72=======================
@@ -174,13 +169,13 @@ Details of cgroup files
174 write, sync or async. 169 write, sync or async.
175 170
176- blkio.avg_queue_size 171- blkio.avg_queue_size
177 - Debugging aid only enabled if CONFIG_DEBUG_CFQ_IOSCHED=y. 172 - Debugging aid only enabled if CONFIG_DEBUG_BLK_CGROUP=y.
178 The average queue size for this cgroup over the entire time of this 173 The average queue size for this cgroup over the entire time of this
179 cgroup's existence. Queue size samples are taken each time one of the 174 cgroup's existence. Queue size samples are taken each time one of the
180 queues of this cgroup gets a timeslice. 175 queues of this cgroup gets a timeslice.
181 176
182- blkio.group_wait_time 177- blkio.group_wait_time
183 - Debugging aid only enabled if CONFIG_DEBUG_CFQ_IOSCHED=y. 178 - Debugging aid only enabled if CONFIG_DEBUG_BLK_CGROUP=y.
184 This is the amount of time the cgroup had to wait since it became busy 179 This is the amount of time the cgroup had to wait since it became busy
185 (i.e., went from 0 to 1 request queued) to get a timeslice for one of 180 (i.e., went from 0 to 1 request queued) to get a timeslice for one of
186 its queues. This is different from the io_wait_time which is the 181 its queues. This is different from the io_wait_time which is the
@@ -191,7 +186,7 @@ Details of cgroup files
191 got a timeslice and will not include the current delta. 186 got a timeslice and will not include the current delta.
192 187
193- blkio.empty_time 188- blkio.empty_time
194 - Debugging aid only enabled if CONFIG_DEBUG_CFQ_IOSCHED=y. 189 - Debugging aid only enabled if CONFIG_DEBUG_BLK_CGROUP=y.
195 This is the amount of time a cgroup spends without any pending 190 This is the amount of time a cgroup spends without any pending
196 requests when not being served, i.e., it does not include any time 191 requests when not being served, i.e., it does not include any time
197 spent idling for one of the queues of the cgroup. This is in 192 spent idling for one of the queues of the cgroup. This is in
@@ -200,7 +195,7 @@ Details of cgroup files
200 time it had a pending request and will not include the current delta. 195 time it had a pending request and will not include the current delta.
201 196
202- blkio.idle_time 197- blkio.idle_time
203 - Debugging aid only enabled if CONFIG_DEBUG_CFQ_IOSCHED=y. 198 - Debugging aid only enabled if CONFIG_DEBUG_BLK_CGROUP=y.
204 This is the amount of time spent by the IO scheduler idling for a 199 This is the amount of time spent by the IO scheduler idling for a
205 given cgroup in anticipation of a better request than the exising ones 200 given cgroup in anticipation of a better request than the exising ones
206 from other queues/cgroups. This is in nanoseconds. If this is read 201 from other queues/cgroups. This is in nanoseconds. If this is read
@@ -209,7 +204,7 @@ Details of cgroup files
209 the current delta. 204 the current delta.
210 205
211- blkio.dequeue 206- blkio.dequeue
212 - Debugging aid only enabled if CONFIG_DEBUG_CFQ_IOSCHED=y. This 207 - Debugging aid only enabled if CONFIG_DEBUG_BLK_CGROUP=y. This
213 gives the statistics about how many a times a group was dequeued 208 gives the statistics about how many a times a group was dequeued
214 from service tree of the device. First two fields specify the major 209 from service tree of the device. First two fields specify the major
215 and minor number of the device and third field specifies the number 210 and minor number of the device and third field specifies the number
diff --git a/block/Kconfig b/block/Kconfig
index f9e89f4d94bb..9be0b56eaee1 100644
--- a/block/Kconfig
+++ b/block/Kconfig
@@ -77,29 +77,6 @@ config BLK_DEV_INTEGRITY
77 T10/SCSI Data Integrity Field or the T13/ATA External Path 77 T10/SCSI Data Integrity Field or the T13/ATA External Path
78 Protection. If in doubt, say N. 78 Protection. If in doubt, say N.
79 79
80config BLK_CGROUP
81 tristate "Block cgroup support"
82 depends on CGROUPS
83 depends on CFQ_GROUP_IOSCHED
84 default n
85 ---help---
86 Generic block IO controller cgroup interface. This is the common
87 cgroup interface which should be used by various IO controlling
88 policies.
89
90 Currently, CFQ IO scheduler uses it to recognize task groups and
91 control disk bandwidth allocation (proportional time slice allocation)
92 to such task groups.
93
94config DEBUG_BLK_CGROUP
95 bool
96 depends on BLK_CGROUP
97 default n
98 ---help---
99 Enable some debugging help. Currently it stores the cgroup path
100 in the blk group which can be used by cfq for tracing various
101 group related activity.
102
103endif # BLOCK 80endif # BLOCK
104 81
105config BLOCK_COMPAT 82config BLOCK_COMPAT
diff --git a/block/Kconfig.iosched b/block/Kconfig.iosched
index fc71cf071fb2..3199b76f795d 100644
--- a/block/Kconfig.iosched
+++ b/block/Kconfig.iosched
@@ -23,7 +23,8 @@ config IOSCHED_DEADLINE
23 23
24config IOSCHED_CFQ 24config IOSCHED_CFQ
25 tristate "CFQ I/O scheduler" 25 tristate "CFQ I/O scheduler"
26 select BLK_CGROUP if CFQ_GROUP_IOSCHED 26 # If BLK_CGROUP is a module, CFQ has to be built as module.
27 depends on (BLK_CGROUP=m && m) || !BLK_CGROUP || BLK_CGROUP=y
27 default y 28 default y
28 ---help--- 29 ---help---
29 The CFQ I/O scheduler tries to distribute bandwidth equally 30 The CFQ I/O scheduler tries to distribute bandwidth equally
@@ -33,22 +34,15 @@ config IOSCHED_CFQ
33 34
34 This is the default I/O scheduler. 35 This is the default I/O scheduler.
35 36
37 Note: If BLK_CGROUP=m, then CFQ can be built only as module.
38
36config CFQ_GROUP_IOSCHED 39config CFQ_GROUP_IOSCHED
37 bool "CFQ Group Scheduling support" 40 bool "CFQ Group Scheduling support"
38 depends on IOSCHED_CFQ && CGROUPS 41 depends on IOSCHED_CFQ && BLK_CGROUP
39 default n 42 default n
40 ---help--- 43 ---help---
41 Enable group IO scheduling in CFQ. 44 Enable group IO scheduling in CFQ.
42 45
43config DEBUG_CFQ_IOSCHED
44 bool "Debug CFQ Scheduling"
45 depends on CFQ_GROUP_IOSCHED
46 select DEBUG_BLK_CGROUP
47 default n
48 ---help---
49 Enable CFQ IO scheduling debugging in CFQ. Currently it makes
50 blktrace output more verbose.
51
52choice 46choice
53 prompt "Default I/O scheduler" 47 prompt "Default I/O scheduler"
54 default DEFAULT_CFQ 48 default DEFAULT_CFQ
diff --git a/block/blk-cgroup.c b/block/blk-cgroup.c
index af42efbb0c1d..d02bbf88de13 100644
--- a/block/blk-cgroup.c
+++ b/block/blk-cgroup.c
@@ -351,10 +351,8 @@ void blkiocg_add_blkio_group(struct blkio_cgroup *blkcg,
351 blkg->blkcg_id = css_id(&blkcg->css); 351 blkg->blkcg_id = css_id(&blkcg->css);
352 hlist_add_head_rcu(&blkg->blkcg_node, &blkcg->blkg_list); 352 hlist_add_head_rcu(&blkg->blkcg_node, &blkcg->blkg_list);
353 spin_unlock_irqrestore(&blkcg->lock, flags); 353 spin_unlock_irqrestore(&blkcg->lock, flags);
354#ifdef CONFIG_DEBUG_BLK_CGROUP
355 /* Need to take css reference ? */ 354 /* Need to take css reference ? */
356 cgroup_path(blkcg->css.cgroup, blkg->path, sizeof(blkg->path)); 355 cgroup_path(blkcg->css.cgroup, blkg->path, sizeof(blkg->path));
357#endif
358 blkg->dev = dev; 356 blkg->dev = dev;
359} 357}
360EXPORT_SYMBOL_GPL(blkiocg_add_blkio_group); 358EXPORT_SYMBOL_GPL(blkiocg_add_blkio_group);
diff --git a/block/blk-cgroup.h b/block/blk-cgroup.h
index a491a6d56ecf..2b866ec1dcea 100644
--- a/block/blk-cgroup.h
+++ b/block/blk-cgroup.h
@@ -108,10 +108,8 @@ struct blkio_group {
108 void *key; 108 void *key;
109 struct hlist_node blkcg_node; 109 struct hlist_node blkcg_node;
110 unsigned short blkcg_id; 110 unsigned short blkcg_id;
111#ifdef CONFIG_DEBUG_BLK_CGROUP
112 /* Store cgroup path */ 111 /* Store cgroup path */
113 char path[128]; 112 char path[128];
114#endif
115 /* The device MKDEV(major, minor), this group has been created for */ 113 /* The device MKDEV(major, minor), this group has been created for */
116 dev_t dev; 114 dev_t dev;
117 115
@@ -147,6 +145,11 @@ struct blkio_policy_type {
147extern void blkio_policy_register(struct blkio_policy_type *); 145extern void blkio_policy_register(struct blkio_policy_type *);
148extern void blkio_policy_unregister(struct blkio_policy_type *); 146extern void blkio_policy_unregister(struct blkio_policy_type *);
149 147
148static inline char *blkg_path(struct blkio_group *blkg)
149{
150 return blkg->path;
151}
152
150#else 153#else
151 154
152struct blkio_group { 155struct blkio_group {
@@ -158,6 +161,8 @@ struct blkio_policy_type {
158static inline void blkio_policy_register(struct blkio_policy_type *blkiop) { } 161static inline void blkio_policy_register(struct blkio_policy_type *blkiop) { }
159static inline void blkio_policy_unregister(struct blkio_policy_type *blkiop) { } 162static inline void blkio_policy_unregister(struct blkio_policy_type *blkiop) { }
160 163
164static inline char *blkg_path(struct blkio_group *blkg) { return NULL; }
165
161#endif 166#endif
162 167
163#define BLKIO_WEIGHT_MIN 100 168#define BLKIO_WEIGHT_MIN 100
@@ -165,10 +170,6 @@ static inline void blkio_policy_unregister(struct blkio_policy_type *blkiop) { }
165#define BLKIO_WEIGHT_DEFAULT 500 170#define BLKIO_WEIGHT_DEFAULT 500
166 171
167#ifdef CONFIG_DEBUG_BLK_CGROUP 172#ifdef CONFIG_DEBUG_BLK_CGROUP
168static inline char *blkg_path(struct blkio_group *blkg)
169{
170 return blkg->path;
171}
172void blkiocg_update_avg_queue_size_stats(struct blkio_group *blkg); 173void blkiocg_update_avg_queue_size_stats(struct blkio_group *blkg);
173void blkiocg_update_dequeue_stats(struct blkio_group *blkg, 174void blkiocg_update_dequeue_stats(struct blkio_group *blkg,
174 unsigned long dequeue); 175 unsigned long dequeue);
@@ -197,7 +198,6 @@ BLKG_FLAG_FNS(idling)
197BLKG_FLAG_FNS(empty) 198BLKG_FLAG_FNS(empty)
198#undef BLKG_FLAG_FNS 199#undef BLKG_FLAG_FNS
199#else 200#else
200static inline char *blkg_path(struct blkio_group *blkg) { return NULL; }
201static inline void blkiocg_update_avg_queue_size_stats( 201static inline void blkiocg_update_avg_queue_size_stats(
202 struct blkio_group *blkg) {} 202 struct blkio_group *blkg) {}
203static inline void blkiocg_update_dequeue_stats(struct blkio_group *blkg, 203static inline void blkiocg_update_dequeue_stats(struct blkio_group *blkg,
diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c
index 002a5b621653..286008cf889e 100644
--- a/block/cfq-iosched.c
+++ b/block/cfq-iosched.c
@@ -345,7 +345,7 @@ CFQ_CFQQ_FNS(deep);
345CFQ_CFQQ_FNS(wait_busy); 345CFQ_CFQQ_FNS(wait_busy);
346#undef CFQ_CFQQ_FNS 346#undef CFQ_CFQQ_FNS
347 347
348#ifdef CONFIG_DEBUG_CFQ_IOSCHED 348#ifdef CONFIG_CFQ_GROUP_IOSCHED
349#define cfq_log_cfqq(cfqd, cfqq, fmt, args...) \ 349#define cfq_log_cfqq(cfqd, cfqq, fmt, args...) \
350 blk_add_trace_msg((cfqd)->queue, "cfq%d%c %s " fmt, (cfqq)->pid, \ 350 blk_add_trace_msg((cfqd)->queue, "cfq%d%c %s " fmt, (cfqq)->pid, \
351 cfq_cfqq_sync((cfqq)) ? 'S' : 'A', \ 351 cfq_cfqq_sync((cfqq)) ? 'S' : 'A', \
diff --git a/init/Kconfig b/init/Kconfig
index eb77e8ccde1c..087c14f3c595 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -612,6 +612,33 @@ config RT_GROUP_SCHED
612 612
613endif #CGROUP_SCHED 613endif #CGROUP_SCHED
614 614
615config BLK_CGROUP
616 tristate "Block IO controller"
617 depends on CGROUPS && BLOCK
618 default n
619 ---help---
620 Generic block IO controller cgroup interface. This is the common
621 cgroup interface which should be used by various IO controlling
622 policies.
623
624 Currently, CFQ IO scheduler uses it to recognize task groups and
625 control disk bandwidth allocation (proportional time slice allocation)
626 to such task groups.
627
628 This option only enables generic Block IO controller infrastructure.
629 One needs to also enable actual IO controlling logic in CFQ for it
630 to take effect. (CONFIG_CFQ_GROUP_IOSCHED=y).
631
632 See Documentation/cgroups/blkio-controller.txt for more information.
633
634config DEBUG_BLK_CGROUP
635 bool "Enable Block IO controller debugging"
636 depends on BLK_CGROUP
637 default n
638 ---help---
639 Enable some debugging help. Currently it exports additional stat
640 files in a cgroup which can be useful for debugging.
641
615endif # CGROUPS 642endif # CGROUPS
616 643
617config MM_OWNER 644config MM_OWNER