use cgroup blkio resource control limit throttle

简介:
本文将测试一下使用cgroup的blkio组来控制IO吞吐量 : 
测试环境CentOS 7.x x64
创建一个继承组
[root@150 rg1]# cd /sys/fs/cgroup/blkio/
[root@150 blkio]# mkdir rg1

继承组自动创建对应的限制文件
[root@150 blkio]# cd rg1
[root@150 rg1]# ll
total 0
-r--r--r-- 1 root root 0 Dec  4 00:26 blkio.io_merged
-r--r--r-- 1 root root 0 Dec  4 00:26 blkio.io_merged_recursive
-r--r--r-- 1 root root 0 Dec  4 00:26 blkio.io_queued
-r--r--r-- 1 root root 0 Dec  4 00:26 blkio.io_queued_recursive
-r--r--r-- 1 root root 0 Dec  4 00:26 blkio.io_service_bytes
-r--r--r-- 1 root root 0 Dec  4 00:26 blkio.io_service_bytes_recursive
-r--r--r-- 1 root root 0 Dec  4 00:26 blkio.io_serviced
-r--r--r-- 1 root root 0 Dec  4 00:26 blkio.io_serviced_recursive
-r--r--r-- 1 root root 0 Dec  4 00:26 blkio.io_service_time
-r--r--r-- 1 root root 0 Dec  4 00:26 blkio.io_service_time_recursive
-r--r--r-- 1 root root 0 Dec  4 00:26 blkio.io_wait_time
-r--r--r-- 1 root root 0 Dec  4 00:26 blkio.io_wait_time_recursive
-rw-r--r-- 1 root root 0 Dec  4 00:26 blkio.leaf_weight
-rw-r--r-- 1 root root 0 Dec  4 00:26 blkio.leaf_weight_device
--w------- 1 root root 0 Dec  4 00:26 blkio.reset_stats
-r--r--r-- 1 root root 0 Dec  4 00:26 blkio.sectors
-r--r--r-- 1 root root 0 Dec  4 00:26 blkio.sectors_recursive
-r--r--r-- 1 root root 0 Dec  4 00:26 blkio.throttle.io_service_bytes
-r--r--r-- 1 root root 0 Dec  4 00:26 blkio.throttle.io_serviced
-rw-r--r-- 1 root root 0 Dec  4 00:29 blkio.throttle.read_bps_device
-rw-r--r-- 1 root root 0 Dec  4 00:26 blkio.throttle.read_iops_device
-rw-r--r-- 1 root root 0 Dec  4 00:26 blkio.throttle.write_bps_device
-rw-r--r-- 1 root root 0 Dec  4 00:26 blkio.throttle.write_iops_device
-r--r--r-- 1 root root 0 Dec  4 00:26 blkio.time
-r--r--r-- 1 root root 0 Dec  4 00:26 blkio.time_recursive
-rw-r--r-- 1 root root 0 Dec  4 00:26 blkio.weight
-rw-r--r-- 1 root root 0 Dec  4 00:26 blkio.weight_device
-rw-r--r-- 1 root root 0 Dec  4 00:26 cgroup.clone_children
--w--w--w- 1 root root 0 Dec  4 00:26 cgroup.event_control
-rw-r--r-- 1 root root 0 Dec  4 00:26 cgroup.procs
-rw-r--r-- 1 root root 0 Dec  4 00:26 notify_on_release
-rw-r--r-- 1 root root 0 Dec  4 00:27 tasks

继承组的tasks为空.

找一个块设备作为测试目标, 注意现在只能控制块设备, 不能控制单个分区.

[root@150 ~]# df -h
Filesystem                 Size  Used Avail Use% Mounted on
/dev/sda1                   40G  2.0G   38G   6% /
devtmpfs                    48G     0   48G   0% /dev
tmpfs                       48G     0   48G   0% /dev/shm
tmpfs                       48G   25M   48G   1% /run
tmpfs                       48G     0   48G   0% /sys/fs/cgroup
/dev/sda3                   95G  2.8G   87G   4% /opt

例如我这里要控制/dev/sda这个块设备 : 
[root@150 opt]# ll /dev/sda
brw-rw---- 1 root disk 8, 0 Nov 27 19:03 /dev/sda

将文件写入/dev/sda的一个文件系统中.
[root@150 rg1]# cd /opt
[root@150 opt]# dd if=/dev/zero of=./test.img bs=1k count=102400 
102400+0 records in
102400+0 records out
104857600 bytes (105 MB) copied, 0.350907 s, 299 MB/s

直接从块设备读取到/dev/null, 不限制的话, 速度是14MB/S
[root@150 opt]# dd if=./test.img of=/dev/null bs=1k count=102400 iflag=direct
102400+0 records in
102400+0 records out
104857600 bytes (105 MB) copied, 7.43936 s, 14.1 MB/s

限制读吞吐量是1MB/s : 
- Specify a bandwidth rate on particular device for root group. The format
  for policy is "<major>:<minor>  <bytes_per_second>".
[root@150 opt]# echo "8:0  1048576" > /sys/fs/cgroup/blkio/rg1/blkio.throttle.read_bps_device
将当前shell PID放到该组中
[root@150 opt]# echo $$ > /sys/fs/cgroup/blkio/rg1/tasks

再次读取, 速度被限制到1MB/S
[root@150 opt]# dd if=./test.img of=/dev/null bs=1k count=102400 iflag=direct
102400+0 records in
102400+0 records out
104857600 bytes (105 MB) copied, 100.001 s, 1.0 MB/s

清除限制
[root@150 opt]# echo "8:0  0" > /sys/fs/cgroup/blkio/rg1/blkio.throttle.read_bps_device

清除后速度恢复
[root@150 opt]# dd if=./test.img of=/dev/null bs=1k count=102400 iflag=direct
102400+0 records in
102400+0 records out
104857600 bytes (105 MB) copied, 7.32235 s, 14.3 MB/s

[参考]
目录
相关文章
|
存储 C语言
向函数传递结构体: C语言中的结构体参数传递详解
向函数传递结构体: C语言中的结构体参数传递详解
1620 0
|
存储 自然语言处理 固态存储
ublk:来自Linux社区的新热点,基于io_uring的全新高性能用户态块设备
如果您想快速了解ublk的意义、作用及性能,请直接看第二节Q&A部分。一、简介用户态块设备,就是提供/dev/ublkbX这样的标准块设备给业务,业务读写这个块的实际IO处理由您编写的用户态的代码决定。这就好比您使用FUSE,所有对挂载于FUSE的目录的读写都是您编写的IO handler来处理一样。使用用户态块设备,您可以方便地向上层业务以块设备/dev/ublkbX的形式提供您的自定义
采用zookeeper的EPHEMERAL节点机制实现服务集群的陷阱
在集群管理中使用Zookeeper的EPHEMERAL节点机制存在很多的陷阱,毛估估,第一次使用zk来实现集群管理的人应该有80%以上会掉坑,有些坑比较隐蔽,在网络问题或者异常的场景时才会出现,可能很长一段时间才会暴露出来。
15152 1
|
人工智能 Java 开发工具
《Java 人工智能开发:Eclipse 与 IntelliJ IDEA 双雄助力》
在Java与人工智能深度融合的开发浪潮中,选择合适的IDE至关重要。Eclipse和IntelliJ IDEA作为Java开发领域的两大翘楚,均表现出色。Eclipse以其开源、稳定的代码编辑环境和丰富的插件生态系统著称,特别适合需要集成数据库和机器学习库的项目。而IntelliJ IDEA则凭借智能代码分析、强大的重构功能和对深度学习框架(如TensorFlow)的优秀支持,成为追求高效开发体验的首选。开发者可以根据个人习惯、项目需求及团队技术栈选择最适合的工具,确保高效的开发和协作。这两款IDE都为Java人工智能项目的代码编写、项目管理和库集成提供了强有力的支持。
792 25
|
Kubernetes 负载均衡 Cloud Native
从零开始入门 K8s | 理解 CNI 和 CNI 插件
网络架构是 K8s 中较为复杂的方面之一。K8s 网络模型本身对某些特定的网络功能有着一定的要求,因此,业界已经有了不少的网络方案来满足特定的环境和要求。CNI 意为容器网络的 API 接口,为了让用户在容器创建或销毁时都能够更容易地配置容器网络。在本文中,作者将带领大家理解典型网络插件地工作原理、掌握 CNI 插件的使用。
从零开始入门 K8s | 理解 CNI 和 CNI 插件
|
存储 调度
Block IO 控制器 【ChatGPT】
Block IO 控制器 【ChatGPT】
|
缓存 算法 网络性能优化
Block Throttle
block throttle 是 block QoS 的重要组成部分,也是最早的一个 QoS,其功能是限制每个 cgroup 的 IOPS/BPS 上限。 ### Group Hiererchy 每个 blkdev 会为每个 block group 创建一个对应的 throttle group ![](https://ata2-img.oss-cn-zhangjiakou.aliyuncs.
2779 2
Block Throttle
|
SQL 存储 关系型数据库
PolarDB-X 热点优化系列 (一):如何支持淘宝库存热点更新
本文主要介绍PolarDB-X中支持热点行的优化思路和基本使用。
1020 1
PolarDB-X 热点优化系列 (一):如何支持淘宝库存热点更新
|
JSON 缓存 前端开发
🎉🎉 开源啦!一款基于Vue3 + Vite + TS的简历制作神器~~
目前市面上有不少在线制作简历的网站,不得不说,有些做得很好,提供的简历模板非常的漂亮!但是,相信有很多小伙伴不会去使用它们,毕竟贫穷会限制我们! 当然,有些小伙伴可能会去下载各种各样的简历模板,比如一些word格式的模板,但是这些模板还是存在一个问题,就是样式太难调了,扩展性不高。 因为,我作为众多小伙伴中的一员,就想充分发挥自己程序员的能力,于是便有了这款免费的开源简历制作神器!
599 0
🎉🎉 开源啦!一款基于Vue3 + Vite + TS的简历制作神器~~