Linux Cgroup v1(中文翻译)(4):Block IO Controller
Block IO Controller
1 概览
cgroup子系统blkio实现了block io控制器。无论是对存储结构上的叶子节点和还是中间节点,它对各种IO控制策略(proportional BW, max BW)都是必须的。设计规划就是使用同样的cgroup,基于blkio控制器的管理接口和后台的用户选项来切换IO策略。
IO控制策略就是节流阀门策略,能用来规定设备上的较上层IO速度限制。这个策略在通用块层实现,能被用在叶子节点和较高层的逻辑设备(像设备映射器device mapper)上。
2 如何控制限制策略
使能Block IO控制器:
CONFIG_BLK_CGROUP=y
在块层使能节流阀门控制:
CONFIG_BLK_DEV_THROTTLING=y
挂载blkio控制器(参考Control Groups,为什么需要cgroups):
mount -t cgroup -o blkio none /sys/fs/cgroup/blkio
为根分组(root group)上的特定设备规定带宽速率,策略格式是“: <bytes_per_second>”:
echo "8:16 1048576" > /sys/fs/cgroup/blkio/blkio.throttle.read_bps_device
这将限制根分组下主次设备号8:16的设备读取速率为1MB/秒。
运行dd命令来读取文件,看看是否速率被控制在1MB/s:
# dd iflag=direct if=/mnt/common/zerofile of=/dev/null bs=4K count=1024
1024+0 records in
1024+0 records out
4194304 bytes (4.2 MB) copied, 4.0001 s, 1.0 MB/s
写入限制使用blkio.throttle.write_bps_device来控制。
3 分层的cgroups
节流阀门实现了分层支持。然而分层结构的支持是由cgroup的sane_behavior来使能的,而它是一个开发选项而不是公共可用选项。
如果创建这样一个分层结构:
root
/ \
test1 test2
|
test3
有"sane_behavior"的节流阀门能正确地处理结构。应用到整个子树(统计本地IO的)的所有的阀门限制直接由该cgroup中的任务生成。
没有“sane_behavior”使能的节流阀门几乎把所有分组当作同级对待,它看起来是这样的:
pivot
/ / \ \
root test1 test2 test3
4 用户可见的配置项
CONFIG_BLK_CGROUP
Block IO controller.
CONFIG_BFQ_CGROUP_DEBUG
调试帮助。使能该选型,有一些额外的统计文件出现在cgroup。
CONFIG_BLK_DEV_THROTTLING
在块层使能块设备节流阀门。
5 cgroup文件详情
5.1 比重策略文件
blkio.bfq.weight
规定每个cgroup权重。所有设备上的分组权重都是默认值,除非被blkio.bfq.weight_device更改。
当前允许的权重范围1~1000。更多详情请参看BFQ(Budget Fair Queueing)。
blkio.bfq.weight_device
规定每个设备上每个cgroup的权重,会覆盖默认的分组权重。格式如下:
# echo dev_maj:dev_minor weight > blkio.bfq.weight_device
在该cgroup内的设备/dev/sdb(8:16)上配置权重300:
# echo 8:16 300 > blkio.bfq.weight_device
# cat blkio.bfq.weight_device
dev weight
8:16 300
在该cgroup内的设备/dev/sda(8:0)上配置权重500:
# echo 8:0 500 > blkio.bfq.weight_device
# cat blkio.bfq.weight_device
dev weight
8:0 500
8:16 300
移除为/dev/sda规定的权重:
# echo 8:0 0 > blkio.bfq.weight_device
# cat blkio.bfq.weight_device
dev weight
8:16 300
blkio.time
每个设备上分配给cgroup的磁盘时间(毫秒)。头两个域定义了主次设备号,第三个域定义了分配给分组的磁盘时间(毫秒)。
blkio.sectors
被分组迁入或者移出磁盘的sector数量。头两个域定义了主次设备号,第三个域定义了迁入或者移出磁盘的sector数量。
blkio.io_service_bytes
被分组迁入或者移出磁盘的字节数量。它按操作类型(读或写,同步或异步)细分。头两个域定义了主次设备号,第三个域定义了操作类型,第四个域定义了字节数量。
blkio.io_serviced
被分组发给磁盘的IO(bio)数量。它按操作类型(读或写,同步或异步)细分。头两个域定义了主次设备号,第三个域定义了操作类型,第四个域定义了IO数量。
blkio.io_service_time
在cgroup内请求发送和请求完成的IO时间总量,以纳秒为时间单位。对队列深度(queue depth)为1的设备,这个时间表示实际服务时间。如果queue_depth>1, 这个请求可能会出现服务故障。这可能使得给定IO的服务时间包含了多个IO的服务时间,导致总的io_service_time大于实际已用时间。这个时间按操作类型(读或写,同步或异步)细分。头两个域定义了主次设备号,第三个域定义了操作类型,第四个域定义了io_service_time纳秒。
blkio.io_wait_time
cgroup里耗费在调度器队列内等待服务的IO时间总量(纳秒)。这个时间可能大于总的已用时间,因为它累加了所有IO的io_wait_time。它不是cgroup等待时间总量的估量,而是单个wait_time的估量。对queue_depth>1的设备,这个度量不包括IO被派发给设备但它实际上还没被服务到的等待服务的时间(可能由于设备对请求的重新排序而有时滞)。这个时间按操作类型(读或写,同步或异步)细分。头两个域定义了主次设备号,第三个域定义了操作类型,第四个域定义了io_wait_time纳秒。
blkio.io_merged
cgroup内的bio请求总量。它按操作类型(读或写,同步或异步)细分。
blkio.io_queued
cgroup内任意给定时刻的排队请求总量。它按操作类型(读或写,同步或异步)细分。
blkio.avg_queue_size
调试目的,由CONFIG_BFQ_CGROUP_DEBUG=y来使能。整个cgroup生存期内的平均队列大小。这个cgroup内其中一个队列每次获取到时间片(timeslice),队列大小采样就进行一次。
blkio.group_wait_time
调试目的,由CONFIG_BFQ_CGROUP_DEBUG=y来使能。cgroup从它变忙(请求队列从0变为1)到其中一个队列获取到时间片而必须等待的时间数量。它不同于io_wait_time,这个是纳秒单位的。cgroup在等待(waiting)状态时读取,这个统计仅报告累计到它最后一次获取到时间片的group_wait_time,不包括当前delta增量。
blkio.empty_time
调试目的,由CONFIG_BFQ_CGROUP_DEBUG=y来使能。cgroup没有被服务也没有等待请求的时间数量(纳秒)。它不包含cgroup内任何一个队的空闲何时间。cgroup在空(empty)状态时读取。这个统计将只报告累计到它最后一次有等待请求的empty_time,不包括当前delta增量。
blkio.idle_time
调试目的,由CONFIG_BFQ_CGROUP_DEBUG=y来使能。IO调度器花在期待更好的请求而不是现存的请求上的空闲时间数量(纳秒)。cgroup在空闲(idling)状态时读取,这个统计将只报告累加到最后一个空闲周期的idle_time,,不包括当前delta增量。
blkio.dequeue
调试目的,由CONFIG_BFQ_CGROUP_DEBUG=y来使能。这个统计cgroup从设备服务树出队(dequeue)多少次。头两个域定义了主次设备号,第三个域定义了从特定设备出队的次数,第四个域定义了io_wait_time纳秒。
blkio.*_recursive
各种统计的递归版本。这个文件跟他们的非递归版本对应部分显示的信息相同,但是多包含了所有派生cgroup的统计数据。
5.2 限制策略文件
blkio.throttle.read_bps_device
规定了设备读取速率的上层限制(字节/秒)。这个规则是针对设备的,格式如下:
echo "<major>:<minor> <rate_bytes_per_second>" > /cgrp/blkio.throttle.read_bps_device
blkio.throttle.write_bps_device
规定了设备写入速率的上层限制(字节/秒)。这个规则是针对设备的,格式如下:
echo "<major>:<minor> <rate_bytes_per_second>" > /cgrp/blkio.throttle.write_bps_device
blkio.throttle.read_iops_device
规定了设备读取速率的上层限制(IO/秒)。这个规则是针对设备的,格式如下:
echo "<major>:<minor> <rate_io_per_second>" > /cgrp/blkio.throttle.read_iops_device
blkio.throttle.write_iops_device
规定了设备写入速率的上层限制(IO/秒)。这个规则是针对设备的,格式如下:
echo "<major>:<minor> <rate_io_per_second>" > /cgrp/blkio.throttle.write_iops_device
注意:如果设备上BW和IOPS规则都被定义了,那么IO受两种规则的限制。
blkio.throttle.io_serviced
派发给分组内磁盘的IO(bio)数量。它又按操作类型(读或写,同步或异步)细分。头两个域定义了主次设备号,第三个域定义了操作类型,第四个域定义了IO数量。
blkio.throttle.io_service_bytes
被分组迁入或者移出磁盘的字节数量。它又按操作类型(读或写,同步或异步)细分。头两个域定义了主次设备号,第三个域定义了操作类型,第四个域定义了字节数量。
5.3 多种策略间的公共文件
blkio.reset_stats
写入整型数会重置cgroup所有统计数据。
英文原文:
https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v1/blkio-controller.html
Linux Cgroup v1(中文翻译)(4):Block IO Controller的更多相关文章
- Linux Cgroup v1(中文翻译)(2):CPUSETS
英文原文:https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v1/cpusets.html Copyright (C) 2004 BU ...
- Linux Cgroup v1(中文翻译)(1):Control Group
英文原文:https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v1/cgroups.html 1 控制组 1.1 什么是控制组? 控制组 ...
- Linux Cgroup v1(中文翻译)(3):CPU Accounting Controller
英文原文: https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v1/cpuacct.html CPU Accounting Contr ...
- 【转载】Linux cgroup资源隔离各个击破之 - io隔离
Linux Cgroup blkio子系统的用法. blkio子系统支持的两种IO隔离策略 .1. (Completely Fair Queuing 完全公平队列)cfq io调度策略,支持按权重 ...
- Linux Container测试之block IO
简介 Linux Container是OS级别的虚拟化方案,它相比于一般的虚拟机没有了硬件模拟以及指令模拟,相比传统虚拟机具有更低的开销,因此可以应用到私有云之中.LXC目前的版本支持对memor ...
- Dapr 官方文档中文翻译 v1.5 版本正式发布
作者:敖小剑 - Dapr Approver 经过 Dapr 中国社区十余位贡献者一个多月的努力,Dapr 官方文档中文翻译 v1.5 版本完成翻译和审校,正式发布并上线 Dapr 官网. 访问方式 ...
- linux运维常见英文报错中文翻译(菜鸟必知)
linux常见英文报错中文翻译(菜鸟必知) 1.command not found 命令没有找到 2.No such file or directory 没有这个文件或目录 3.Permissio ...
- Linux常见英文报错中文翻译(菜鸟必知)
Linux常见英文报错中文翻译(菜鸟必知) 1.command not found 命令没有找到 2.No such file or directory 没有这个文件或目录 3.Permission ...
- Linux常见英文报错中文翻译
Linux常见英文报错中文翻译(菜鸟必知) 1.command not found 命令没有找到 2.No such file or directory 没有这个文件或目录 3.Permission ...
随机推荐
- Java 虚拟机学习记录
参考资料 JVM高级特性与最佳实践-周志明 HotSpot 虚拟机垃圾回收调优指导 JVM 标准(Java SE 8) JSR 133 Java平台内存模型与线程修订版 命令行工具 JDK Vs JR ...
- 如何使用 python 爬取酷我在线音乐
前言 写这篇博客的初衷是加深自己对网络请求发送和响应的理解,仅供学习使用,请勿用于非法用途!文明爬虫,从我做起.下面进入正题. 获取歌曲信息列表 在酷我的搜索框中输入关键词 aiko,回车之后可以看到 ...
- JavaWeb学习day3-Maven&安装
1.官网下载:https://maven.apache.org/ 2.解压下载好的压缩包 3.配置环境变量 添加如下图变量 在path变量下添加下图 4.安装完成检测 cmd输入:mvn -versi ...
- Java语言学习day40--8月15日
###12可变参数的注意事项 *A:可变参数的注意事项 /* * 可变参数的注意事项 * 1. 一个方法中,可变参数只能有一个 * 2. 可变参数,必须写在参数列表的最后一位 */ public st ...
- css的过渡transition和动画animation
过渡 过渡(transition)是CSS3中具有颠覆性的特性之一,我们可以在不使用Flash动画或JavaScript的情况下,当元素从一种样式变换为另一种样式时元素添加效果.过渡动画:是从一个状态 ...
- ucore lab2 物理内存管理 学习笔记
总的来讲把的LAB1代码逻辑理顺后再往后学就轻松了一大截.LAB2过遍课程视频,再多翻翻实验指导书基本上就没遇到啥大坎儿.对这节学得东西做个总结就是一张图: 练习0:填写已有实验 本实验依赖实验1.请 ...
- 超全!华为交换机端口vlan详解~
关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ 华为交换机和其他品牌的交换机在端口的vlan划分上有一些区别,今天就和大家详细说说华为交换机的 ...
- 实现Linux系统的回收站
Linux系统默认没有回收站功能,使用rm命令进行删除操作,文件就会直接从系统中删除,很难恢复. 今天我们利用简单的shell脚本实现Linux系统下的回收站机制. 先提供脚本代码 [root@qll ...
- 一条更新的SQL如何执行
开源Linux 一个执着于技术的公众号 一条SQL的执行流程如图所示 如图所示:MySQL数据库主要分为两个层级:服务层和存储引擎层 •服务层:server层包括连接器.查询缓存.分析器.优化器.执行 ...
- Linux强制用户首次登录修改密码
一个执着于技术的公众号 地方 前言 Linux强制用户首次登陆修改密码,这应该是RHCE认证中用户管理部分, 属于很基础的内容了.可是我忘记了,所以就有了下面的记录~ 实验过程 1.创建用户并设置登录 ...