blk-iocost权重限速功能是Alibaba Cloud Linux对cgroup I/O子系统(blkcg)基于权重的磁盘限速功能的改进。它是一种I/O控制器,可以根据应用程序或进程的优先级为块设备上的I/O操作分配带宽,并且可以通过设置权重值来限制特定应用程序或进程对块设备的I/O带宽使用,以便帮助您更好地实现对磁盘I/O资源的控制和管理。
cgroup v1和cgroup v2是Linux内核中两个不同版本的资源管理功能。在Alibaba Cloud Linux内核中,blk-iocost功能同时支持cgroup v1和v2接口,但通常在一个系统中仅有一个版本被激活和使用。您可以通过执行stat -fc %T /sys/fs/cgroup
命令查看。
回显为
tmpfs
:表示cgroup v1接口。回显为
cgroup2fs
:表示cgroup v2接口。
操作系统限制
Alibaba Cloud Linux 2(内核
4.19.81-17
及以上版本)。Alibaba Cloud Linux 3。
cost.qos接口使用说明
cost.qos
是一个可读写的接口,用于开启或关闭blk-iocost功能,以及基于延迟权重限制I/O服务质量(QoS)的速率。接口文件仅存在于blkcg
根组中,且在不同的cgroup中的完整名称有所不同。
cgroup v1:接口文件完整名称为
blkio.cost.qos
。cgroup v2:接口文件完整名称为
io.cost.qos
。
配置说明
每行配置以设备的Major号和Minor号开头,格式为MAJ:MIN
(通过lsblk | grep <云盘名称>
命令查询设备号),后边衔接其他配置项,配置项说明如下。
配置项 | 说明 |
enable | 是否开启blk-iocost功能。
|
ctrl | 控制模式。
|
开启blk-iocost功能
本文以设备254:48
开启blk-iocost功能,控制模式为user
为例,并设置读写请求延迟(rlat|wlat
)有95%超过5 ms时,认为磁盘饱和。内核将进行磁盘发送请求速率的调整,调整范围为50%~150%。
cgroup v1接口
sudo sh -c 'echo "254:48 enable=1 ctrl=user rpct=95.00 rlat=5000 wpct=95.00 wlat=5000 min=50.00 max=150.00" > /sys/fs/cgroup/blkio/blkio.cost.qos'
cgroup v2接口
sudo sh -c 'echo "254:48 enable=1 ctrl=user rpct=95.00 rlat=5000 wpct=95.00 wlat=5000 min=50.00 max=150.00" > /sys/fs/cgroup/io.cost.qos'
cost.model接口使用说明
cost.model
是一个可读写接的口,用于设置成本模型(cost model)。该接口文件仅存在于blkcg
根组中,并且在不同的cgroup中,其完整名称有所不同。
cgroup v1:接口文件完整名称为
blkio.cost.model
。cgroup v2:接口文件完整名称为
io.cost.model
。
配置说明
每行配置以设备的Major号和Minor号开头,格式为MAJ:MIN
(通过lsblk | grep <云盘名称>
命令查询设备号),后边衔接其他配置项,配置项说明如下。
配置项 | 说明 |
ctrl | 控制模式。
|
model | 模型参数。目前仅实现了
|
使用cost.model接口设置成本模型
本文以在设备254:48
上使用用户输入的linear
建模参数设置模型为例。
cgroup v1接口
sudo sh -c 'echo "254:48 ctrl=user model=linear rbps=2706339840 rseqiops=89698 rrandiops=110036 wbps=1063126016 wseqiops=135560 wrandiops=130734" > /sys/fs/cgroup/blkio/blkio.cost.model'
cgroup v2接口
sudo sh -c 'echo "254:48 ctrl=user model=linear rbps=2706339840 rseqiops=89698 rrandiops=110036 wbps=1063126016 wseqiops=135560 wrandiops=130734" > /sys/fs/cgroup/io.cost.model'
weight/cost.weight接口使用说明
Alibaba Cloud Linux 3的weight
和Alibaba Cloud Linux 2的cost.weight
是内核中用于控制I/O资源分配的核心接口,均为可读写接口。通过配置权重值[1,10000]
,动态分配磁盘I/O带宽。该接口文件仅存在blkcg
的子组中,并且在不同cgroup中的完整名称存在差异。
Alibaba Cloud Linux 3
cgroup v1:接口文件完整名称为
blkio.cost.weight
。cgroup v2:接口文件完整名称为
io.weight
。
Alibaba Cloud Linux 2
cgroup v1:接口文件完整名称为
blkio.cost.weight
。cgroup v2:接口文件完整名称为
io.cost.weight
。
配置说明
为接口设置权重值
<weight>
:表示修改blkcg
的默认权重。为接口设置端口号和权重值
MAJ:MIN <weight>
:表示修改设备上的blkcg的权重。
使用weight接口修改权重
开启blk-iocost功能后,本文以创建cgroup v1的控制组blkcg1
和cgroup v2的控制组cg1
,通过使用cgroup v1的cost.weight
接口和cgroup v2的weight
接口将控制组的默认权重修改为50,并将控制组在设备254:48
上的权重设置为50为例。
cgroup v1接口
sudo mkdir /sys/fs/cgroup/blkio/blkcg1 # 创建控制组blkcg1 sudo sh -c 'echo "50" > /sys/fs/cgroup/blkio/blkcg1/blkio.cost.weight' # 将默认权重修改为50 sudo sh -c 'echo "254:48 50" > /sys/fs/cgroup/blkio/blkcg1/blkio.cost.weight' #将设备上的权重设置为50
cgroup v2接口
Alibaba Cloud Linux 3
sudo mkdir /sys/fs/cgroup/cg1 # 创建控制组cg1 sudo sh -c 'echo "50" > /sys/fs/cgroup/cg1/io.weight' # 将默认权重修改为50 sudo sh -c 'echo "254:48 50" > /sys/fs/cgroup/cg1/io.weight' #将设备上的权重设置为50
Alibaba Cloud Linux 2
sudo mkdir /sys/fs/cgroup/cg1 # 创建控制组cg1 sudo sh -c 'echo "50" > /sys/fs/cgroup/cg1/io.cost.weight' # 将默认权重修改为50 sudo sh -c 'echo "254:48 50" > /sys/fs/cgroup/cg1/io.cost.weight' #将设备上的权重设置为50
常用监测工具
blk-iocost需要能够监控和评估系统的I/O性能,可以通过以下工具或接口来监测I/O资源的使用情况,以便帮助您更好地理解和调优I/O资源的使用情况。