cgroup blkio子系统对容器的读写限速详解

 更新时间:2023年08月20日 11:27:06   作者:a朋  
这篇文章主要为大家介绍了cgroup blkio子系统对容器的读写限速详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

正文

如果多个容器同时read/write节点上的一块磁盘,如何对每个容器的read/write操作限速,以防止其相互干扰、相互竞争。

cgroup v1的blkio子系统,可以限制磁盘的I/O。

一. 磁盘读写的指标

衡量磁盘读写的常见指标:

  • IOPS(Input/Output Operations per Second): 每秒读写磁盘的次数;
  • Throughput(吞吐量): 每秒读写磁盘的数据量,也称为带宽(BandWidth);

Throughput = 数据块大小 * IOPS

在IOPS固定的情况下,读写的数据块越大,吞吐量也越大。

二. cgroup v1的blkio子系统

blkio cgroup的虚拟文件系统挂载点/sys/fs/cgroup/blkio/,包含以下参数:

  • blkio.throttle.read_iops_device:读IOPS限制;
  • blkio.throttle.read_bps_device:读吞吐量限制;
  • blkio.throttle.write_iops.device:写IOPS限制;
  • blkio.throttle.write_bps_device:写吞吐量限制;

比如,限制容器对磁盘/dev/vdb的吞吐量 <= 10MB/s:

## 1.首先拿到/dev/vdb的主次设备号
# 其中 252:16是/dev/vdb的主次设备号
# ls -l /dev/vdb -l
brw-rw---- 1 root disk 252, 16 Nov  2 08:02 /dev/vdb

## 2.然后写cgroup
echo "252:16 10485760" &gt; $CGROUP_CONTAINER_PATH/blkio.throttle.write_bps_device

可以使用fio工具,在容器中进行验证:

docker exec fio_test1 fio -direct=1 -rw=write -ioengine=libaio -bs=4k -size=100MB -numjobs=1 -name=/tmp/fio_test1.log

值得注意的是

Cgroupv1 blkio只能对Direct I/O进行限速,不能对Buffered I/O进行限制。

三. Direct I/O 与 Buffered I/O

Direct I/O和Buffered I/O发生在用户  磁盘文件时。

  • Direct I/O:

    • 通过Linux内核的filesystem --> block layer --> disk driver --> disk hardware;
  • Buffered I/O:

    • 用户进程将数据写入Page cache后就返回了;
    • Linux内核线程把内存中的数据flush到磁盘;

在Linux中,基于性能考虑,绝大多数的应用都使用Buffered I/O模式。

四. 为什么cgroup v1 blkio不能限制Buffered I/O

对下图中的进程 pid_y 的cgroup进行限制,它分别属于memory cgroup 和 blkio cgroup:

在blkio cgroup对 pid_y 做磁盘I/O限制的时候,blkio不会关心:

  • pid_y 用了哪些内存,哪些属于Page cache,何时flush到磁盘;
  • pid_y 中的Page cache被flush到磁盘时,由于是内核线程执行flush,产生的磁盘I/O不被计算到进程 pid_y上;

也就是说:

cgroup v1 blkio独立与memory子系统,它无法统计由Page cache刷入磁盘的I/O;

即 cgroup v1 blkio不能对Buffered I/O进行限速;

五. cgroup v2解决这一问题

cgroup v2解决了不能对Buffered I/O进行限速的问题。

在cgroup v2中:

  • 一个进程属于一个控制组;
  • 每个控制组可以定义多个子系统;

上图中,pid_y 属于控制组group2,而group2同时配置了io和memory子系统;
在此情况下,cgroup对 pid_y 的磁盘读写进行限速的时候,就可以知道 pid_y 写入Page Cache的数据量,这样Buffered I/O的磁盘限速就实现了。

也就是说,在cgroup v2中:

内核将Page cache flush到磁盘产生的I/O也会被计算到进程的I/O中;

对磁盘限速时,可以同时限制Directed I/O和Buffered I/O;

值得注意的是,目前runC、containerd和kubernetes刚开始支持cgroup v2,生产环境上cgroup v1迁移到cgroup v2还需要一个过程。

参考 blkio的文档

https://www.kernel.org/doc/Documentation/cgroup-v1/blkio-controller.txt

以上就是cgroup blkio子系统对容器的读写限速详解的详细内容,更多关于cgroup blkio容器读写限速的资料请关注脚本之家其它相关文章!

相关文章

  • Docker上部署 nps 和 npc 实现内网穿透

    Docker上部署 nps 和 npc 实现内网穿透

    本文介绍了如何使用Docker部署nps和npc实现内网穿透。nps是一款高性能的内网穿透代理服务器,npc是nps的客户端,可以将内网服务映射到公网上。通过Docker的容器化技术,可以方便地部署和管理nps和npc,同时保证了应用的隔离性和安全性。
    2023-04-04
  • docker端口映射及外部无法访问问题

    docker端口映射及外部无法访问问题

    这篇文章主要介绍了docker端口映射及外部无法访问问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • docker私库Harbor的架构与组件说明

    docker私库Harbor的架构与组件说明

    今天小编就为大家分享一篇关于docker私库Harbor的架构与组件说明,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • docker部署SSM项目(含打包)

    docker部署SSM项目(含打包)

    本文主要介绍了docker部署SSM项目,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-05-05
  • Docker 运行多个Springboot的详细教程

    Docker 运行多个Springboot的详细教程

    这篇文章主要介绍了Docker 运行多个Springboot的详细教程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • Docker部署前后端分离项目的实现示例

    Docker部署前后端分离项目的实现示例

    本文主要介绍了Docker部署前后端分离项目的实现示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • docker 安装ElasticSearch 6.x的教程详解

    docker 安装ElasticSearch 6.x的教程详解

    这篇文章主要介绍了docker 安装ElasticSearch 6.x的教程,非常不错,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-04-04
  • 将spring boot应用打入docker中运行的实现方法

    将spring boot应用打入docker中运行的实现方法

    这篇文章主要介绍了将spring boot应用打入docker中运行的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • Docker的镜像制作与整套项目一键打包部署的实现

    Docker的镜像制作与整套项目一键打包部署的实现

    这篇文章主要介绍了Docker的镜像制作与整套项目一键打包部署的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • 在wsl-ubuntu中如何通过 docker 启动 gpu-jupyter

    在wsl-ubuntu中如何通过 docker 启动 gpu-jupyter

    这篇文章主要介绍了在wsl-ubuntu中如何通过 docker 启动 gpu-jupyter,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-01-01

最新评论