Linux cgroup资源隔离各个击破之 - io隔离

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云原生数据库 PolarDB 分布式版,标准版 2核8GB
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: Linux Cgroup blkio子系统的用法. blkio子系统支持两种IO隔离策略 .1. cfq io调度器,支持按权重分配IO处理的时间片,从而达到IO调度和限制的目的,权重取值范围100-1000。通过以下两个文件进行配置。 blkio.weight

Linux Cgroup blkio子系统的用法.

blkio子系统支持的两种IO隔离策略

.1. (Completely Fair Queuing 完全公平队列)cfq io调度策略,支持按权重分配IO处理的时间片,从而达到IO在各资源组直接的调度和限制的目的,权重取值范围100-1000。
通过以下两个文件进行配置。

blkio.weight                默认值
blkio.weight_device   块设备级的值 (major:minor weight) (优先级高于blkio.weight)

例子

echo 500 > blkio.weight
echo 8:0 500 > blkio.weight_device

cfq 调度器以及其他IO调度器的介绍详见内核文档.
Documentation/block/

.2. 限制IOPS使用上限
例子如下

bytes/s
echo "8:0 10485760" > /cgroup/blkio/test/blkio.throttle.read_bps_device
io/s
echo "8:0 10" > /cgroup/blkio/test/blkio.throttle.read_iops_device
bytes/s
echo "8:0 10485760" > /cgroup/blkio/test/blkio.throttle.write_bps_device
io/s
echo "8:0 10" > /cgroup/blkio/test/blkio.throttle.write_iops_device



这两种资源限制手段各有特色,CFQ的方法比较公平,互相不会干扰,在确保最低使用IO比例的情况下,如果IO设备空闲,还能超限使用。 (一句话就是保证最低的 IOPS)
限制IOPS上限的方法,所有组加起来的IOPS可以超出块设备的最大IOPS指标,实现错峰使用的目的,但是坏处是如果超出最大指标太多,平时可能造成争抢导致SLA无法保证。 (一句话就是限制最高的 IOPS)



注意,当前BLKIO子系统不统计buffered write操作,仅仅统计direct i/o的操作。但是buffered read是统计在内的。

blkio子系统的统计报告

blkio.throttle.io_serviced  报告iops,含当前队列中的。
major, minor, operation(read, write, sync, or async), and numbers.

blkio.throttle.io_service_bytes  报告bps,含当前队列中的。
major, minor, operation(read, write, sync, or async), and bytes.

blkio.time  报告设备I/O使用时间
major, minor, and time. (ms)

blkio.sectors  报告读入或读出的扇区数量
major, minor, and sectors.

blkio.avg_queue_size  报告块设备的平均队列大小(内核CONFIG_DEBUG_BLK_CGROUP=y 必须设置此宏)
blkio.group_wait_time  报告队列等待时间片的总等待时间(ns)  (内核CONFIG_DEBUG_BLK_CGROUP=y 必须设置此宏)
blkio.empty_time  报告块设备空闲时间(没有pending 请求)(ns) (内核CONFIG_DEBUG_BLK_CGROUP=y 必须设置此宏)
blkio.idle_time  报告块设备空闲时间(等待请求合并?)(ns) (内核CONFIG_DEBUG_BLK_CGROUP=y 必须设置此宏)
blkio.dequeue  报告块设备请求出列次数major, minor, and number  (内核CONFIG_DEBUG_BLK_CGROUP=y 必须设置此宏)
blkio.io_serviced  报告IOPS,major, minor, operation(read, write, sync, or async), and numbers. 不含当前队列中的。
blkio.io_service_bytes  报告bps,major, minor, operation(read, write, sync, or async), and bytes. 不含当前队列中的。
blkio.io_service_time   报告从发送IO请求到IO完成的时间。major, minor, operation(read, write, sync, or async), and time(ns).  
blkio.io_wait_time      报告IO等待的时间,可能会超出总的时间线,因为同时可能有多个IO请求在等待。  major, minor, operation(read, write, sync, or async), and time(ns).  
blkio.io_merged         报告IO合并的次数,operation(read, write, sync, or async), and numbers.
blkio.io_queued         报告IO入列的次数,operation(read, write, sync, or async), and numbers.

blkio子系统的使用例子

.1. 通过权重的方法限制IO的使用比例。

挂载blkio子系统
Mount the blkio subsystem:
~]# mount -t cgroup -o blkio blkio /cgroup/blkio/

创建两个资源组
Create two cgroups for the blkio subsystem:
~]# mkdir /cgroup/blkio/test1/
~]# mkdir /cgroup/blkio/test2/

设置每个组的IO权重
Set blkio weights in the previously created cgroups:
~]# echo 1000 > /cgroup/blkio/test1/blkio.weight
~]# echo 500 > /cgroup/blkio/test2/blkio.weight

创建两个一样大的文件
~]# dd if=/dev/zero of=file_1 bs=1M count=4000
~]# dd if=/dev/zero of=file_2 bs=1M count=4000

把文件的page cache刷出去  
~]# sync
~]# echo 3 > /proc/sys/vm/drop_caches

启动两个读文件的进程,分别在两个资源组中。  
~]# cgexec -g blkio:test1 time dd if=file_1 of=/dev/null
~]# cgexec -g blkio:test2 time dd if=file_2 of=/dev/null

查看IOTOP,可以看到权重均匀。  
# iotop
Total DISK READ: 83.16 M/s | Total DISK WRITE: 0.00 B/s
    TIME  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN      IO    COMMAND
15:18:04 15071 be/4 root       27.64 M/s    0.00 B/s  0.00 % 92.30 % dd if=file_2 of=/dev/null
15:18:04 15069 be/4 root       55.52 M/s    0.00 B/s  0.00 % 88.48 % dd if=file_1 of=/dev/null



blkio子系统中需要用到块设备的major, minor号,可以通过以下方法查看

# ll /dev/|grep "^b"
brw-rw----  1 root cdrom    11,   0 Jun 10 15:50 sr0
brw-rw----  1 root disk    253,   0 Jun 10 15:50 vda
brw-rw----  1 root disk    253,   1 Jun 10 15:50 vda1


CFQ调度公平性

对于权重的方法,如果要对离散的I/O操作起到公平的调度,必须打开块设备的group_isolation设置。
Additionally, you can enable group isolation which provides stronger isolation between groups at the expense of throughput.
When group isolation is disabled, fairness can be expected only for a sequential workload.
By default, group isolation is enabled and fairness can be expected for random I/O workloads as well.
To enable group isolation, use the following command:

echo 1 > /sys/block/<disk_device>/queue/iosched/group_isolation


参考

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Resource_Management_Guide/ch-Subsystems_and_Tunable_Parameters.html

相关文章
|
17天前
|
Java Linux
Springboot 解决linux服务器下获取不到项目Resources下资源
Springboot 解决linux服务器下获取不到项目Resources下资源
|
18天前
|
存储 缓存 Linux
Linux IO的奥秘:深入探索数据流动的魔法
Linux I/O(输入/输出)系统是其核心功能之一,负责处理数据在系统内部及与外界之间的流动。为了优化这一流程,Linux进行了一系列努力和抽象化,以提高效率、灵活性和易用性。🚀
Linux IO的奥秘:深入探索数据流动的魔法
|
25天前
|
存储 传感器 运维
linux系统资源统计工具
【4月更文挑战第1天】Linux系统监控工具如dstat、htop、glances、vmstat、top、iostat、mpstat、sar和atop,用于跟踪CPU、内存、磁盘I/O、网络和进程性能。这些工具提供实时、交互式和历史数据分析,助力管理员优化系统性能和故障排查。例如,dstat是vmstat等工具的增强版,htop提供彩色界面的进程管理,而atop则结合了多种功能并记录历史数据。
28 5
linux系统资源统计工具
|
1月前
|
存储 监控 Linux
【Linux IO多路复用 】 Linux下select函数全解析:驾驭I-O复用的高效之道
【Linux IO多路复用 】 Linux下select函数全解析:驾驭I-O复用的高效之道
53 0
|
1月前
|
存储 Shell Linux
【Shell 命令集合 系统设置 】⭐⭐⭐Linux 限制进程资源 ulimit命令 使用指南
【Shell 命令集合 系统设置 】⭐⭐⭐Linux 限制进程资源 ulimit命令 使用指南
40 0
|
5天前
|
机器学习/深度学习 缓存 监控
linux查看CPU、内存、网络、磁盘IO命令
`Linux`系统中,使用`top`命令查看CPU状态,要查看CPU详细信息,可利用`cat /proc/cpuinfo`相关命令。`free`命令用于查看内存使用情况。网络相关命令包括`ifconfig`(查看网卡状态)、`ifdown/ifup`(禁用/启用网卡)、`netstat`(列出网络连接,如`-tuln`组合)以及`nslookup`、`ping`、`telnet`、`traceroute`等。磁盘IO方面,`iostat`(如`-k -p ALL`)显示磁盘IO统计,`iotop`(如`-o -d 1`)则用于查看磁盘IO瓶颈。
|
16天前
|
Linux
Linux操作系统调优相关工具(三)查看IO运行状态相关工具 查看哪个磁盘或分区最繁忙?
Linux操作系统调优相关工具(三)查看IO运行状态相关工具 查看哪个磁盘或分区最繁忙?
21 0
|
1月前
|
分布式计算 关系型数据库 MySQL
Sqoop【部署 01】CentOS Linux release 7.5 安装配置 sqoop-1.4.7 解决警告并验证(附Sqoop1+Sqoop2最新版安装包+MySQL驱动包资源)
【2月更文挑战第8天】Sqoop CentOS Linux release 7.5 安装配置 sqoop-1.4.7 解决警告并验证(附Sqoop1+Sqoop2最新版安装包+MySQL驱动包资源)
100 1
|
18天前
|
存储 缓存 安全
Linux IO:打开数据之窗的魔法
Linux I/O(输入/输出)是操作系统中一个至关重要的组成部分,它涉及到数据在内存🧠、存储设备💾、网络接口🌐等之间的传输过程。在Linux中,I/O操作不仅仅是文件读写那么简单,它包括了一系列复杂的机制和策略,旨在提高数据处理的效率,保证系统的稳定性和性能。📊
Linux IO:打开数据之窗的魔法
|
30天前
|
存储 算法 Linux
【Linux 系统标准 进程资源】Linux 创建一个最基本的进程所需的资源分析,以及线程资源与之的差异
【Linux 系统标准 进程资源】Linux 创建一个最基本的进程所需的资源分析,以及线程资源与之的差异
25 0