1 =================== 1 =================== 2 Block IO Controller 2 Block IO Controller 3 =================== 3 =================== 4 4 5 Overview 5 Overview 6 ======== 6 ======== 7 cgroup subsys "blkio" implements the block io 7 cgroup subsys "blkio" implements the block io controller. There seems to be 8 a need of various kinds of IO control policies 8 a need of various kinds of IO control policies (like proportional BW, max BW) 9 both at leaf nodes as well as at intermediate 9 both at leaf nodes as well as at intermediate nodes in a storage hierarchy. 10 Plan is to use the same cgroup based managemen 10 Plan is to use the same cgroup based management interface for blkio controller 11 and based on user options switch IO policies i 11 and based on user options switch IO policies in the background. 12 12 13 One IO control policy is throttling policy whi 13 One IO control policy is throttling policy which can be used to 14 specify upper IO rate limits on devices. This 14 specify upper IO rate limits on devices. This policy is implemented in 15 generic block layer and can be used on leaf no 15 generic block layer and can be used on leaf nodes as well as higher 16 level logical devices like device mapper. 16 level logical devices like device mapper. 17 17 18 HOWTO 18 HOWTO 19 ===== 19 ===== 20 << 21 Throttling/Upper Limit policy 20 Throttling/Upper Limit policy 22 ----------------------------- 21 ----------------------------- 23 Enable Block IO controller:: !! 22 - Enable Block IO controller:: 24 23 25 CONFIG_BLK_CGROUP=y 24 CONFIG_BLK_CGROUP=y 26 25 27 Enable throttling in block layer:: !! 26 - Enable throttling in block layer:: 28 27 29 CONFIG_BLK_DEV_THROTTLING=y 28 CONFIG_BLK_DEV_THROTTLING=y 30 29 31 Mount blkio controller (see cgroups.txt, Why a !! 30 - Mount blkio controller (see cgroups.txt, Why are cgroups needed?):: 32 31 33 mount -t cgroup -o blkio none /sys/fs/ 32 mount -t cgroup -o blkio none /sys/fs/cgroup/blkio 34 33 35 Specify a bandwidth rate on particular device !! 34 - Specify a bandwidth rate on particular device for root group. The format 36 for policy is "<major>:<minor> <bytes_per_sec !! 35 for policy is "<major>:<minor> <bytes_per_second>":: 37 36 38 echo "8:16 1048576" > /sys/fs/cgroup/ 37 echo "8:16 1048576" > /sys/fs/cgroup/blkio/blkio.throttle.read_bps_device 39 38 40 This will put a limit of 1MB/second on reads h !! 39 Above will put a limit of 1MB/second on reads happening for root group 41 on device having major/minor number 8:16. !! 40 on device having major/minor number 8:16. 42 41 43 Run dd to read a file and see if rate is throt !! 42 - Run dd to read a file and see if rate is throttled to 1MB/s or not:: 44 43 45 # dd iflag=direct if=/mnt/common/zerof 44 # dd iflag=direct if=/mnt/common/zerofile of=/dev/null bs=4K count=1024 46 1024+0 records in 45 1024+0 records in 47 1024+0 records out 46 1024+0 records out 48 4194304 bytes (4.2 MB) copied, 4.0001 47 4194304 bytes (4.2 MB) copied, 4.0001 s, 1.0 MB/s 49 48 50 Limits for writes can be put using blkio.throt !! 49 Limits for writes can be put using blkio.throttle.write_bps_device file. 51 50 52 Hierarchical Cgroups 51 Hierarchical Cgroups 53 ==================== 52 ==================== 54 53 55 Throttling implements hierarchy support; howev 54 Throttling implements hierarchy support; however, 56 throttling's hierarchy support is enabled iff 55 throttling's hierarchy support is enabled iff "sane_behavior" is 57 enabled from cgroup side, which currently is a 56 enabled from cgroup side, which currently is a development option and 58 not publicly available. 57 not publicly available. 59 58 60 If somebody created a hierarchy like as follow 59 If somebody created a hierarchy like as follows:: 61 60 62 root 61 root 63 / \ 62 / \ 64 test1 test2 63 test1 test2 65 | 64 | 66 test3 65 test3 67 66 68 Throttling with "sane_behavior" will handle th 67 Throttling with "sane_behavior" will handle the 69 hierarchy correctly. For throttling, all limit 68 hierarchy correctly. For throttling, all limits apply 70 to the whole subtree while all statistics are 69 to the whole subtree while all statistics are local to the IOs 71 directly generated by tasks in that cgroup. 70 directly generated by tasks in that cgroup. 72 71 73 Throttling without "sane_behavior" enabled fro 72 Throttling without "sane_behavior" enabled from cgroup side will 74 practically treat all groups at same level as 73 practically treat all groups at same level as if it looks like the 75 following:: 74 following:: 76 75 77 pivot 76 pivot 78 / / \ \ 77 / / \ \ 79 root test1 test2 tes 78 root test1 test2 test3 80 79 81 Various user visible config options 80 Various user visible config options 82 =================================== 81 =================================== >> 82 CONFIG_BLK_CGROUP >> 83 - Block IO controller. 83 84 84 CONFIG_BLK_CGROUP !! 85 CONFIG_BFQ_CGROUP_DEBUG 85 Block IO controller. !! 86 - Debug help. Right now some additional stats file show up in cgroup 86 << 87 CONFIG_BFQ_CGROUP_DEBUG << 88 Debug help. Right now some additiona << 89 if this option is enabled. 87 if this option is enabled. 90 88 91 CONFIG_BLK_DEV_THROTTLING !! 89 CONFIG_BLK_DEV_THROTTLING 92 Enable block device throttling suppo !! 90 - Enable block device throttling support in block layer. 93 91 94 Details of cgroup files 92 Details of cgroup files 95 ======================= 93 ======================= 96 << 97 Proportional weight policy files 94 Proportional weight policy files 98 -------------------------------- 95 -------------------------------- 99 !! 96 - blkio.weight 100 blkio.bfq.weight !! 97 - Specifies per cgroup weight. This is default weight of the group 101 Specifies per cgroup weight. This is !! 98 on all the devices until and unless overridden by per device rule. 102 on all the devices until and unless !! 99 (See blkio.weight_device). 103 (see `blkio.bfq.weight_device` below !! 100 Currently allowed range of weights is from 10 to 1000. 104 !! 101 105 Currently allowed range of weights i !! 102 - blkio.weight_device 106 see Documentation/block/bfq-iosched. !! 103 - One can specify per cgroup per device rules using this interface. 107 !! 104 These rules override the default value of group weight as specified 108 blkio.bfq.weight_device !! 105 by blkio.weight. 109 Specifies per cgroup per device weig << 110 weight. For more details, see Docume << 111 106 112 Following is the format:: 107 Following is the format:: 113 108 114 # echo dev_maj:dev_minor weight > !! 109 # echo dev_maj:dev_minor weight > blkio.weight_device 115 110 116 Configure weight=300 on /dev/sdb (8: 111 Configure weight=300 on /dev/sdb (8:16) in this cgroup:: 117 112 118 # echo 8:16 300 > blkio.bfq.weight !! 113 # echo 8:16 300 > blkio.weight_device 119 # cat blkio.bfq.weight_device !! 114 # cat blkio.weight_device 120 dev weight 115 dev weight 121 8:16 300 116 8:16 300 122 117 123 Configure weight=500 on /dev/sda (8: 118 Configure weight=500 on /dev/sda (8:0) in this cgroup:: 124 119 125 # echo 8:0 500 > blkio.bfq.weight_ !! 120 # echo 8:0 500 > blkio.weight_device 126 # cat blkio.bfq.weight_device !! 121 # cat blkio.weight_device 127 dev weight 122 dev weight 128 8:0 500 123 8:0 500 129 8:16 300 124 8:16 300 130 125 131 Remove specific weight for /dev/sda 126 Remove specific weight for /dev/sda in this cgroup:: 132 127 133 # echo 8:0 0 > blkio.bfq.weight_de !! 128 # echo 8:0 0 > blkio.weight_device 134 # cat blkio.bfq.weight_device !! 129 # cat blkio.weight_device 135 dev weight 130 dev weight 136 8:16 300 131 8:16 300 137 132 138 blkio.time !! 133 - blkio.time 139 Disk time allocated to cgroup per de !! 134 - disk time allocated to cgroup per device in milliseconds. First 140 two fields specify the major and min 135 two fields specify the major and minor number of the device and 141 third field specifies the disk time 136 third field specifies the disk time allocated to group in 142 milliseconds. 137 milliseconds. 143 138 144 blkio.sectors !! 139 - blkio.sectors 145 Number of sectors transferred to/fro !! 140 - number of sectors transferred to/from disk by the group. First 146 two fields specify the major and min 141 two fields specify the major and minor number of the device and 147 third field specifies the number of 142 third field specifies the number of sectors transferred by the 148 group to/from the device. 143 group to/from the device. 149 144 150 blkio.io_service_bytes !! 145 - blkio.io_service_bytes 151 Number of bytes transferred to/from !! 146 - Number of bytes transferred to/from the disk by the group. These 152 are further divided by the type of o 147 are further divided by the type of operation - read or write, sync 153 or async. First two fields specify t 148 or async. First two fields specify the major and minor number of the 154 device, third field specifies the op 149 device, third field specifies the operation type and the fourth field 155 specifies the number of bytes. 150 specifies the number of bytes. 156 151 157 blkio.io_serviced !! 152 - blkio.io_serviced 158 Number of IOs (bio) issued to the di !! 153 - Number of IOs (bio) issued to the disk by the group. These 159 are further divided by the type of o 154 are further divided by the type of operation - read or write, sync 160 or async. First two fields specify t 155 or async. First two fields specify the major and minor number of the 161 device, third field specifies the op 156 device, third field specifies the operation type and the fourth field 162 specifies the number of IOs. 157 specifies the number of IOs. 163 158 164 blkio.io_service_time !! 159 - blkio.io_service_time 165 Total amount of time between request !! 160 - Total amount of time between request dispatch and request completion 166 for the IOs done by this cgroup. Thi 161 for the IOs done by this cgroup. This is in nanoseconds to make it 167 meaningful for flash devices too. Fo 162 meaningful for flash devices too. For devices with queue depth of 1, 168 this time represents the actual serv 163 this time represents the actual service time. When queue_depth > 1, 169 that is no longer true as requests m 164 that is no longer true as requests may be served out of order. This 170 may cause the service time for a giv 165 may cause the service time for a given IO to include the service time 171 of multiple IOs when served out of o 166 of multiple IOs when served out of order which may result in total 172 io_service_time > actual time elapse 167 io_service_time > actual time elapsed. This time is further divided by 173 the type of operation - read or writ 168 the type of operation - read or write, sync or async. First two fields 174 specify the major and minor number o 169 specify the major and minor number of the device, third field 175 specifies the operation type and the 170 specifies the operation type and the fourth field specifies the 176 io_service_time in ns. 171 io_service_time in ns. 177 172 178 blkio.io_wait_time !! 173 - blkio.io_wait_time 179 Total amount of time the IOs for thi !! 174 - Total amount of time the IOs for this cgroup spent waiting in the 180 scheduler queues for service. This c 175 scheduler queues for service. This can be greater than the total time 181 elapsed since it is cumulative io_wa 176 elapsed since it is cumulative io_wait_time for all IOs. It is not a 182 measure of total time the cgroup spe 177 measure of total time the cgroup spent waiting but rather a measure of 183 the wait_time for its individual IOs 178 the wait_time for its individual IOs. For devices with queue_depth > 1 184 this metric does not include the tim 179 this metric does not include the time spent waiting for service once 185 the IO is dispatched to the device b 180 the IO is dispatched to the device but till it actually gets serviced 186 (there might be a time lag here due 181 (there might be a time lag here due to re-ordering of requests by the 187 device). This is in nanoseconds to m 182 device). This is in nanoseconds to make it meaningful for flash 188 devices too. This time is further di 183 devices too. This time is further divided by the type of operation - 189 read or write, sync or async. First 184 read or write, sync or async. First two fields specify the major and 190 minor number of the device, third fi 185 minor number of the device, third field specifies the operation type 191 and the fourth field specifies the i 186 and the fourth field specifies the io_wait_time in ns. 192 187 193 blkio.io_merged !! 188 - blkio.io_merged 194 Total number of bios/requests merged !! 189 - Total number of bios/requests merged into requests belonging to this 195 cgroup. This is further divided by t 190 cgroup. This is further divided by the type of operation - read or 196 write, sync or async. 191 write, sync or async. 197 192 198 blkio.io_queued !! 193 - blkio.io_queued 199 Total number of requests queued up a !! 194 - Total number of requests queued up at any given instant for this 200 cgroup. This is further divided by t 195 cgroup. This is further divided by the type of operation - read or 201 write, sync or async. 196 write, sync or async. 202 197 203 blkio.avg_queue_size !! 198 - blkio.avg_queue_size 204 Debugging aid only enabled if CONFIG !! 199 - Debugging aid only enabled if CONFIG_BFQ_CGROUP_DEBUG=y. 205 The average queue size for this cgro 200 The average queue size for this cgroup over the entire time of this 206 cgroup's existence. Queue size sampl 201 cgroup's existence. Queue size samples are taken each time one of the 207 queues of this cgroup gets a timesli 202 queues of this cgroup gets a timeslice. 208 203 209 blkio.group_wait_time !! 204 - blkio.group_wait_time 210 Debugging aid only enabled if CONFIG !! 205 - Debugging aid only enabled if CONFIG_BFQ_CGROUP_DEBUG=y. 211 This is the amount of time the cgrou 206 This is the amount of time the cgroup had to wait since it became busy 212 (i.e., went from 0 to 1 request queu 207 (i.e., went from 0 to 1 request queued) to get a timeslice for one of 213 its queues. This is different from t 208 its queues. This is different from the io_wait_time which is the 214 cumulative total of the amount of ti 209 cumulative total of the amount of time spent by each IO in that cgroup 215 waiting in the scheduler queue. This 210 waiting in the scheduler queue. This is in nanoseconds. If this is 216 read when the cgroup is in a waiting 211 read when the cgroup is in a waiting (for timeslice) state, the stat 217 will only report the group_wait_time 212 will only report the group_wait_time accumulated till the last time it 218 got a timeslice and will not include 213 got a timeslice and will not include the current delta. 219 214 220 blkio.empty_time !! 215 - blkio.empty_time 221 Debugging aid only enabled if CONFIG !! 216 - Debugging aid only enabled if CONFIG_BFQ_CGROUP_DEBUG=y. 222 This is the amount of time a cgroup 217 This is the amount of time a cgroup spends without any pending 223 requests when not being served, i.e. 218 requests when not being served, i.e., it does not include any time 224 spent idling for one of the queues o 219 spent idling for one of the queues of the cgroup. This is in 225 nanoseconds. If this is read when th 220 nanoseconds. If this is read when the cgroup is in an empty state, 226 the stat will only report the empty_ 221 the stat will only report the empty_time accumulated till the last 227 time it had a pending request and wi 222 time it had a pending request and will not include the current delta. 228 223 229 blkio.idle_time !! 224 - blkio.idle_time 230 Debugging aid only enabled if CONFIG !! 225 - Debugging aid only enabled if CONFIG_BFQ_CGROUP_DEBUG=y. 231 This is the amount of time spent by 226 This is the amount of time spent by the IO scheduler idling for a 232 given cgroup in anticipation of a be 227 given cgroup in anticipation of a better request than the existing ones 233 from other queues/cgroups. This is i 228 from other queues/cgroups. This is in nanoseconds. If this is read 234 when the cgroup is in an idling stat 229 when the cgroup is in an idling state, the stat will only report the 235 idle_time accumulated till the last 230 idle_time accumulated till the last idle period and will not include 236 the current delta. 231 the current delta. 237 232 238 blkio.dequeue !! 233 - blkio.dequeue 239 Debugging aid only enabled if CONFIG !! 234 - Debugging aid only enabled if CONFIG_BFQ_CGROUP_DEBUG=y. This 240 gives the statistics about how many 235 gives the statistics about how many a times a group was dequeued 241 from service tree of the device. Fir 236 from service tree of the device. First two fields specify the major 242 and minor number of the device and t 237 and minor number of the device and third field specifies the number 243 of times a group was dequeued from a 238 of times a group was dequeued from a particular device. 244 239 245 blkio.*_recursive !! 240 - blkio.*_recursive 246 Recursive version of various stats. !! 241 - Recursive version of various stats. These files show the 247 same information as their non-recurs 242 same information as their non-recursive counterparts but 248 include stats from all the descendan 243 include stats from all the descendant cgroups. 249 244 250 Throttling/Upper limit policy files 245 Throttling/Upper limit policy files 251 ----------------------------------- 246 ----------------------------------- 252 blkio.throttle.read_bps_device !! 247 - blkio.throttle.read_bps_device 253 Specifies upper limit on READ rate f !! 248 - Specifies upper limit on READ rate from the device. IO rate is 254 specified in bytes per second. Rules 249 specified in bytes per second. Rules are per device. Following is 255 the format:: 250 the format:: 256 251 257 echo "<major>:<minor> <rate_bytes 252 echo "<major>:<minor> <rate_bytes_per_second>" > /cgrp/blkio.throttle.read_bps_device 258 253 259 blkio.throttle.write_bps_device !! 254 - blkio.throttle.write_bps_device 260 Specifies upper limit on WRITE rate !! 255 - Specifies upper limit on WRITE rate to the device. IO rate is 261 specified in bytes per second. Rules 256 specified in bytes per second. Rules are per device. Following is 262 the format:: 257 the format:: 263 258 264 echo "<major>:<minor> <rate_bytes 259 echo "<major>:<minor> <rate_bytes_per_second>" > /cgrp/blkio.throttle.write_bps_device 265 260 266 blkio.throttle.read_iops_device !! 261 - blkio.throttle.read_iops_device 267 Specifies upper limit on READ rate f !! 262 - Specifies upper limit on READ rate from the device. IO rate is 268 specified in IO per second. Rules ar 263 specified in IO per second. Rules are per device. Following is 269 the format:: 264 the format:: 270 265 271 echo "<major>:<minor> <rate_io_per 266 echo "<major>:<minor> <rate_io_per_second>" > /cgrp/blkio.throttle.read_iops_device 272 267 273 blkio.throttle.write_iops_device !! 268 - blkio.throttle.write_iops_device 274 Specifies upper limit on WRITE rate !! 269 - Specifies upper limit on WRITE rate to the device. IO rate is 275 specified in io per second. Rules ar 270 specified in io per second. Rules are per device. Following is 276 the format:: 271 the format:: 277 272 278 echo "<major>:<minor> <rate_io_pe 273 echo "<major>:<minor> <rate_io_per_second>" > /cgrp/blkio.throttle.write_iops_device 279 274 280 Note: If both BW and IOPS rules are !! 275 Note: If both BW and IOPS rules are specified for a device, then IO is 281 subjected to both the constraints. !! 276 subjected to both the constraints. 282 277 283 blkio.throttle.io_serviced !! 278 - blkio.throttle.io_serviced 284 Number of IOs (bio) issued to the di !! 279 - Number of IOs (bio) issued to the disk by the group. These 285 are further divided by the type of o 280 are further divided by the type of operation - read or write, sync 286 or async. First two fields specify t 281 or async. First two fields specify the major and minor number of the 287 device, third field specifies the op 282 device, third field specifies the operation type and the fourth field 288 specifies the number of IOs. 283 specifies the number of IOs. 289 284 290 blkio.throttle.io_service_bytes !! 285 - blkio.throttle.io_service_bytes 291 Number of bytes transferred to/from !! 286 - Number of bytes transferred to/from the disk by the group. These 292 are further divided by the type of o 287 are further divided by the type of operation - read or write, sync 293 or async. First two fields specify t 288 or async. First two fields specify the major and minor number of the 294 device, third field specifies the op 289 device, third field specifies the operation type and the fourth field 295 specifies the number of bytes. 290 specifies the number of bytes. 296 291 297 Common files among various policies 292 Common files among various policies 298 ----------------------------------- 293 ----------------------------------- 299 blkio.reset_stats !! 294 - blkio.reset_stats 300 Writing an int to this file will res !! 295 - Writing an int to this file will result in resetting all the stats 301 for that cgroup. 296 for that cgroup.
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.