Quantcast
Channel: ElmerZhang's Blog » linux
Viewing all articles
Browse latest Browse all 10

Cgroups 学习笔记[6] – blkio 子系统

$
0
0

参数说明

可设置的参数:

  • blkio.weight
    说明:指定 cgroup 默认可用 IO 的比例(加权),值的范围为 100 至 1000。该值可由具体设备的 blkio.weight_device 参数覆盖。
    示例:设置 cgroup lv0 的默认加权为 500: cgset -r blkio.weight=100 lv0
  • blkio.weight_device
    说明:指定 cgroup 中指定设备的可用 IO 比例(加权),范围是 100 至 1000。该值的的格式为 major:minor weight ,其中 majorminor 参考文档 Linux 分配的设备
    示例:设置 cgroup lv0 对 /dev/sda 的加权为 500: cgset -r blkio.weight_device="8:0 500" lv0
  • blkio.throttle.read_bps_device / blkio.throttle.write_bps_device
    说明:指定 cgroup 中某设备每秒钟读/写数据的字节上限。其格式为 major:minor bytes_per_second
    示例:设置 cgroup lv0 在 /dev/sdc 上每秒最多读 10KiB 数据: cgset -r blkio.throttle.read_bps_device="8:32 10240" lv0
  • blkio.throttle.read_iops_device / blkio.throttle.write_iops_device
    说明:指定 cgroup 中某设备每秒钟可以执行的读/写请求数上限。其格式为 major:minor operations_per_second
    示例:设置 cgroup lv0 在 /dev/sdc 上每秒最多执行 1000 次读请求: cgset -r blkio.throttle.read_iops_device="8:32 1000" lv0

报告参数:

  • blkio.time
    报告 cgroup 对具体设备的 I/O 访问时间。条目有三个字段:major, minortimetime 的单位为毫秒(ms)
  • blkio.sectors
    报告 cgroup 对具体设备的扇区读写数。条目有三个字段:major, minorsectors
  • blkio.io_service_bytes
    报告 cgroup 对具体设备的读写字节数。条目有四个字段:major, minor, operationbytes。其中 operation 表示操作类型,包括 read, write, sync 和 async
  • blkio.io_serviced
    报告 cgroup 对具体设备的 I/O 操作数。条目有四个字段:major, minor, operationnumber
  • blkio.io_service_time
    报告 cgroup 对具体设备的 I/O 操作请求发送和请求完成之间的时间。条目有四个字段:major, minor, operationtime,其中 time 的单位为纳秒(ns)
  • blkio.io_wait_time
    报告 cgroup 对具体设备的 I/O 操作在队列中等待的时间。条目有四个字段:major, minor, operationtime,其中 time 的单位为纳秒(ns)
  • blkio.io_merged
    报告 cgroup 将 BIOS 请求合并到 I/O 操作请求的次数。条目有两个字段:numberoperation
  • blkio.io_queued
    报告 cgroup 为 I/O 操作排队的请求次数。条目有两个字段:numberoperation
  • blkio.throttle.io_service_bytes
    报告 cgroup 限流对具体设备的读写字节数。blkio.io_service_bytesblkio.throttle.io_service_bytes 的不同之处在于,CFQ 调度请求队列时,前者不会更新。条目有四个字段:major, minor, operationbytes
  • blkio.throttle.io_serviced
    报告 cgroup 限流对具体设备的读写操作数。条目有四个字段:major, minor, operationnumber
  • blkio.reset_stats
    向该文件中写入一个整数,可以重置该 cgroup 中的报告计数。

blkio子系统使用心得

  1. 查看一个设备的 majorminor 可以使用:ls -l /dev/DEV
    例如,要查看 /dev/dm-0 的 majorminor
    ~]# ls -l /dev/dm-0
    brw-rw---- 1 root disk 253, 0 Dec 3 01:02 /dev/dm-0

    其中 253, 0 即为 /dev/dm-0 的 major, minor

  2. blkio.throttle.* 的限制是针对整个 cgroup 组的,而不是针对组中单个进程的。
    例如,当设置 lv0 blkio.throttle.write_bps_device="253:0 1048576" 时,整个 lv0 组内所有进程向 /dev/dm-0 的写入速率之不能超过 1 MiB/秒。
  3. 经测试,对某个进程的 blkio 限制有可能影响 Cgroup 之外的进程。复现方法:
    /dev/sdb + /dev/sdc 做 flashcache,设置 lv0 blkio.throttle.write_bps_device="8:32 1048576" ,即限制 lv0 内的进程对 /dev/sdc 的写入速率为 1MiB/秒,然后使用 cgexec -g blkio:lv0 dd if=/dev/zero of=/data0/testfile1 bs=10240 count=100000 启动一个在 lv0 限制下的 dd 向 flashcache 写文件。dd 很快便完成,但使用 iostat 观察,发现 /dev/sdc 的写入受 cgroup 限制,只有 1MiB/秒。这时我们再直接执行一个 dd: dd if=/dev/zero of=/data0/testfile1 bs=10240 count=100000,再使用 iostat 查看磁盘 IO 状态,/dev/sdc 写入速率仍然是 1MiB/秒,也就是说后面一个 dd 虽不在 cgroup lv0 限制之内,却也受到了 lv0 限流的影响。
  4. 进程对 pagecache 的读写操作不受 blkio.throttle.* 限制。

Viewing all articles
Browse latest Browse all 10

Latest Images

Trending Articles





Latest Images