13 | 容器磁盘限速:我的容器里磁盘读写为什么不稳定?
李程远
该思维导图由 AI 生成,仅供参考
你好,我是程远。今天我们聊一聊磁盘读写不稳定的问题。
上一讲,我给你讲了如何通过 XFS Quota 来限制容器文件系统的大小,这是静态容量大小的一个限制。
你也许会马上想到,磁盘除了容量的划分,还有一个读写性能的问题。
具体来说,就是如果多个容器同时读写节点上的同一块磁盘,那么它们的磁盘读写相互之间影响吗?如果容器之间读写磁盘相互影响,我们有什么办法解决呢?
接下来,我们就带着问题一起学习今天的内容。
场景再现
有了这个带 fio 的镜像,我们可以用它启动一个容器,在容器中运行 fio,就可以得到只有一个容器读写磁盘时的性能数据。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
Cgroups中的blkio子系统可以通过限制容器的磁盘I/O性能来解决多个容器之间磁盘读写相互影响的问题。本文详细介绍了如何配置blkio Cgroup的参数,包括磁盘读取IOPS限制、磁盘读取吞吐量限制、磁盘写入IOPS限制和磁盘写入吞吐量限制,并通过实例演示了在容器中限制磁盘吞吐量的效果。此外,文章还介绍了Linux的两种文件I/O模式:Direct I/O和Buffered I/O,以及Cgroup v2相比Cgroup v1的变动,说明了Cgroup v2 io+Memory两个子系统一起使用,可以对buffered I/O控制磁盘写入速率。总之,本文深入浅出地介绍了如何利用Cgroups中的blkio子系统来管理容器的磁盘I/O性能,适合读者快速了解并应用于实际工作中。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《容器实战高手课》,新⼈⾸单¥59
《容器实战高手课》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(13)
- 最新
- 精选
- Geek2014cgroup v2在buffered IO模式下能限制,是不是可以理解为:写入的1G数据对应的page cache属于该进程,内核同步该部分page cache时产生的IO会被计算在该进程的IO中
作者回复: @Geek2014, 是这样的。
2020-12-159 - Alery老师,假如一个容器跨多块磁盘是不是需要拿到每块磁盘的主次设备号都设置一遍iops限制?
作者回复: 如果一个容器用到多个磁盘(volume),并且都要做io限制,那么都要设置一遍。
2020-12-2233 - yayiyaya吞吐量 = 数据块大小 *IOPS。 如果限制了IOPS, 是不是也可以做到容器的写入磁盘也不会互相干扰了?
作者回复: iops也是blkio里的限制参数之一。我在例子中用了吞吐量来限制。
2020-12-212 - 小羊centos8 上的podman 不是 默认cgroup v2了吗?我记得有一次报错查下来就是 v2不支持某个特性导致无法使用某个镜像。可能我搞错了?
作者回复: CentOS8上缺省用的还是Cgroup V1
2021-01-031 - lambda现阶段在k8s对磁盘io进行限速可以尝试用device plugin + prestart hook么(仿照nvidia gpu的思路)?只是一个想法,想求证下
作者回复: 你的想法是让容器独享一个磁盘?这样不用device plugin, 用local volume就可以了。
2020-12-1431 - 谢哈哈cgoups V1下,blkio与buffer io是没什么关系的,一个是DIO模式写入磁盘,一个是通过page cache异步写入磁盘,在cgoups V2下,blkio 在非DIO的模式下包括了buffer io
作者回复: @谢哈哈 这个是你的总结吗?
2020-12-18 - Geek_be1c94内容讲的很清楚,但所讲的cgroup blkio更偏向稳定的读写速率,并不能完全解决相互影响的问题吧,比如2个容器的速率限制设置为50,那可能就不一定都能达到50了2023-03-20归属地:浙江
- JianXuCY 老师,今天看了这个才知道为什么我们希望去除大数据部门的专用独占硬件资源的工作模式需要cgroup v2。 那现在cgroup v2 在Kubernetes 上成熟度达到你的预期了吗?2022-09-05归属地:上海
- 有识之士Step 1/2 : FROM centos:8.1.1911 ---> 470671670cac Step 2/2 : RUN yum install -y fio ---> Running in b64c47e09828 CentOS-8 - AppStream 44 B/s | 38 B 00:00 Failed to download metadata for repo 'AppStream' Error: Failed to download metadata for repo 'AppStream' The command '/bin/sh -c yum install -y fio' returned a non-zero code: 1 make: *** [image] Error 1 Centos8于2021年年底停止了服务, 这个测试demo应该是有问题的,可以同步修改下?2022-07-202
- 罗峰发现cpu memory cgroup可以单独设置容器的资源使用量,但是io这个容器是共用一个控制组的配置参数(不知道是否每个容器可以使用不同的io控制组)吗?2021-09-11
收起评论