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