为什么cgroup blkio不能限制分区

在使用cgroup blkio子系统限制块设备的IOPS时,有没有遇到过这样的错误?

#echo "8:1 10000" >./blkio.throttle.write_iops_device 
bash: echo: write error: No such device

当限制的块设备不是设备本身时(而是分区),会报错。

那么是什么原因造成的呢?

例子

系统中有一个sda的盘,这个盘分了5个区。

#ll /dev/sd*
brw-rw---- 1 root disk 8, 0 Aug  6 13:09 /dev/sda
brw-rw---- 1 root disk 8, 1 Aug  6 13:09 /dev/sda1
brw-rw---- 1 root disk 8, 2 Aug  6 13:09 /dev/sda2
brw-rw---- 1 root disk 8, 3 Aug  6 13:09 /dev/sda3
brw-rw---- 1 root disk 8, 4 Aug  6 13:09 /dev/sda4
brw-rw---- 1 root disk 8, 5 Aug  6 13:09 /dev/sda5

对整盘进行IOPS限制,正常

#echo "8:0 10000" >./blkio.throttle.write_iops_device 

对单个分区进行IOPS限制,失败

#echo "8:1 10000" >./blkio.throttle.write_iops_device 
bash: echo: write error: No such device

查看了cgroup的代码,发现了问题在blkio_policy_parse_and_set这里,如果发现不是块设备本身,而是分区,则报错。

kernel-2.6.32 / block / blk-cgroup.c

...
static int blkio_policy_parse_and_set(char *buf,
    struct blkio_policy_node *newpn, enum blkio_policy_id plid, int fileid)
{
...
    dev = MKDEV(major, minor);

    disk = get_gendisk(dev, &part);
    if (!disk || part) {
        ret = -ENODEV;
        goto out;
    }
...

get_gendisk的帮助手册如下

man get_gendisk

Name

get_gendisk — get partitioning information for a given device

Synopsis

struct gendisk * get_gendisk (    dev_t devt,
     int * partno);
 
Arguments

devt
device to get partitioning information for

partno
returned partition index

Description

This function gets the structure containing partitioning information for the given device devt.

知道原因之后就好理解了,还好cgroup blkio子系统支持device map设备,所以如果你要对单个分区进行IOPS的限制,可以用LVM做一层,就可以限制了。

例如

pvcreate /dev/sdb
vgcreate vgdata01 /dev/sdb
lvcreate -n lv01 -l 50%VG vgdata01 
lvcreate -n lv02 -l 40%VG vgdata01 

#dmsetup ls
vgdata01-lv02   (253, 1)
vgdata01-lv01   (253, 0)

#echo "253:1 10000" >./blkio.throttle.write_iops_device 

参考

1. https://www.kernel.org/doc/Documentation/devices.txt

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值