前言

本文主要会介绍笔者在学习Linux Cgroups blkio Subsystem时所总结的知识点,其中会涉及到使用方式以及配置方式等方面的相关内容。 笔者也会将自己的理解在文中进行阐述,这也算是在和大家交流心得的一个过程。若文中有错误的理解和概念,请大家及时纠正;吸纳大家的建议,对于我来说也是很重要的学习过程之一。


(目录)


1.磁盘性能指标

对于I/O设备这类存储资源的限制,一般是使用磁盘性能的指标来描述和实现限制规则的。因此了解一些磁盘性能指标会有助于更好的使用Linux Cgroups blkio Subsystem去实现对存储类资源的资源限制。

Tips: 如果有读者会存在“经常记混/记错”以下这些磁盘性能指标的问题,笔者这里分享一个小技巧;即尝试去记忆和理解这些磁盘性能指标的全称。因为这些指标的全称往往都会描述该指标是如何计算出来的。

1.1 IOPS

IOPS 是 Input/Output Operations Per Second 的简称,也就是每秒钟磁盘读写的次数。这个数值越大表示性能越好

1.2 吞吐量

吞吐量(Throughput)是指每秒钟磁盘中数据的读取量,一般以 MB/s 为单位。这个读取量可以叫作吞吐量,有时候也被称为带宽(Bandwidth);有时也会用bps来代表吞吐量,即每秒读写的数据量。

1.3 IOPS与吞吐量的关系

IOPS 和吞吐量之间是有关联的:吞吐量 = 数据块大小 *IOPS

在 IOPS 固定的情况下,如果读写的每一个数据块越大,那么吞吐量也越大。同理,数据块大小固定时,IOPS越大,吞吐量就越大。

1.4 操作类型

对于写入操作和读取操作,每一种性能指标都有相对应的指标进行记录。例如,read IOPS, write IOPS


2.Linux Cgroups blkio Subsystem

Linux Cgroups blkio Subsystem可以来限制进程对磁盘的I/O操作,即限制磁盘资源的使用。

注意:blkio Subsystem仅在Cgroup V1版本中使用。Cgroup V2版本使用IO Subsystem来限制磁盘资源。

2.1 实现方式

Linux Cgroups blkio Subsystem的虚拟文件系统挂载点一般在"/sys/fs/cgroup/blkio/"。

Tips: 实现原理可以阅读笔者另一遍介绍Linux Cgroups原理的文章

在这个"/sys/fs/cgroup/blkio/"目录下创建子目录作为Control Group,再把需要进行 I/O 限制的进程 pid 写到Control Group的 cgroup.procs 参数中就可以了。

2.2 主要参数

Linux Cgroups blkio Subsystem中的主要参数有:

参数名称 参数说明
blkio.throttle.read_iops_device 磁盘读取 IOPS 限制
blkio.throttle.read_bps_device 磁盘读取吞吐量限制
blkio.throttle.write_iops_device 磁盘写入 IOPS 限制
blkio.throttle.write_bps_device 磁盘写入吞吐量限制

2.3 配置方式

要对一个控制组做限制,限制它对某一存储设备(例如磁盘/dev/vdb)的写入吞吐量不超过 10MB/s,那么对blkio.throttle.write_bps_device 参数的配置例如: # echo "252:16 10485760" > $CGROUP_CONTAINER_PATH/blkio.throttle.write_bps_device

其中:"252:16"是 /dev/vdb 的主次设备号;"10485760"就是 10MB 的每秒钟带宽限制 。