为什么cgroup blkio不能限制分区

简介: 在使用cgroup blkio子系统限制块设备的IOPS时,有没有遇到过这样的错误? #echo "8:1 10000" >./blkio.throttle.write_iops_device bash: echo: write error: No such device 当

在使用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

目录
相关文章
|
弹性计算 中间件 大数据
什么是容器计算服务 ACS?
全球首款容器计算服务ACS(Alibaba Cloud Container Compute Service)
1114 2
|
存储 缓存 NoSQL
Shiro 解决分布式 Session
在分布式系统中,会话管理是一个重要的问题。Shiro框架提供了一种解决方案,通过其会话管理组件来处理分布式会话。本文演示通过RedisSessionManager解决分布式会话问题。
306 0
|
5月前
|
消息中间件 存储 Java
第15课: Spring Boot中集成ActiveMQ
第15课: Spring Boot中集成ActiveMQ
494 0
|
11月前
|
存储 人工智能 缓存
OSS 100Gbps/租户技术解读
本次分享由阿里云资深技术专家罗庆超解读OSS 100Gbps/租户技术,涵盖五个方面:技术概况、后端性能保障、网络接入优化、最后一公里优化及总结展望。介绍了如何通过高性能存储池、网络优化和客户端工具提升性能,确保用户享受高效稳定的对象存储服务,并展望了未来的技术挑战和发展方向。
211 14
|
存储 供应链 安全
区块链在供应链管理中的创新应用与前景
区块链在供应链管理中的创新应用与前景
296 1
|
JavaScript 前端开发 Java
JavaScript的数学计算库:decimal.js
JavaScript的数学计算库:decimal.js
551 0
|
机器学习/深度学习
【DR_CAN-MPC学习笔记】2.最优化数学建模推导
【DR_CAN-MPC学习笔记】2.最优化数学建模推导
|
Linux API C语言
cgroup V1和V2的原理和区别
cgroup V1和V2的原理和区别
|
数据可视化 TensorFlow 算法框架/工具
JAX 中文文档(三)(2)
JAX 中文文档(三)
361 0
|
机器学习/深度学习 存储 人工智能
【OpenVI-视觉评价系列之MOS评价实战篇】手机存储不够用,清理照片太痛苦?MOS评价帮你挑选“垃圾”照片
MOS(Mean Opinion Score)是一种常用的主观质量评价方法,常用于视频、图像等多媒体领域中的质量评价。MOS视觉评价通常是通过让受试者观看视频/图像,对视频的清晰度、锐度、颜色饱和度、运动模糊、噪声等方面进行评价。然而,MOS视觉评价也存在一些局限,例如需要大量的受试者,评估时间较长等。因此,近年来,研究者们也开始探索使用客观评价方法来替代或补充MOS视觉评价。
1034 2
【OpenVI-视觉评价系列之MOS评价实战篇】手机存储不够用,清理照片太痛苦?MOS评价帮你挑选“垃圾”照片