| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> 【CGroup系列】四、BLKIO子系统 -> 正文阅读 |
|
[系统运维]【CGroup系列】四、BLKIO子系统 |
写在前面????????blkio,Block IO Controller,指block io控制器或块IO子系统。 ????????IO控制策略就是用于控制特定设备的IO速率的一个节流策略。这种策略可以应用在内核通用块层(Generic Block Layer),也可以应用在页节点上和高级别逻辑设备,如设备映射器。 一、如何使能blkio节流或上限 限制策略1.1 内核配置使能Block IO Controller
1.2 使能应用在内核通用块层CONFIG_BLK_DEV_THROTTLING=y 1.3 挂载blkio控制子系统
1.4 指定IO速率带宽????????策略格式:<major>:<minor> <bytes_per_second>
????????如上命令,设置blkio层级根节点下任务访问major/minor号为“8:16”的设备读取速率上限为1MB/每秒。 ????????上面命令可通过下面方法进行测试:
二、BLKIO CGroup分层管控????????blkio支持分层管控,使能分层管控的前提需要使能“sane_behavior”。这部分目前处于开发内测阶段,还未公开支持。 ? ? ? ? 以下面层次为例: ????????管控策略的限制对root节点下的所有子树节点均有效。 三、可用配置项介绍
使能Block IO子系统; CONFIG_BFQ_CGROUP_DEBUG 使能debug选项; CONFIG_BLK_DEV_THROTTLING 使能通用块设备层的管控; 四、BLKIO CGroup策略文件介绍4.1 比例/权重型策略文件4.1.1 blkio.bfq.weight?? ? ? ? 指定设备每个控制组的权重,取值范围1~1000,权重越大优先级越高。这里实际上是一个默认值,因为如果接下来如果单个设备上(blkio.bfq.weight_device)设置了权重,则单个设备上(blkio.bfq.weight_device)的权重值会覆盖这里设置的默认权重。注意:bfq全称Budget Fair Queueing.
4.1.2 blkio.bfq.weight_device? ? ? ? 指定每个控制组每个设备的权重。该配置会覆盖前面设备的默认权重值。 写入配置到策略文件的格式如下:
例如,我们要配置权重为weight=300,到设备 /dev/sdb (8:16)上,如下:
例如,我们要配置权重为weight=500到设备/dev/sda (8:0),如下:
那么从为设备/dev/sda移除权重,如下:
4.1.3 blkio.time报告控制组的设备磁盘访问时间,单位为毫秒。格式形如"[dev_maj[:[dev_minor] [milliseconds]"。 4.1.4 blkio.sectors报告控制组传输的扇区数(控制组转换到具体设备或者由具体设备转换出的扇区数)。格式形如"[dev_maj[:[dev_minor] [number of sectors]"。 4.1.5 blkio.io_service_bytes报告控制组的磁盘传输速率(控制组根据 CFQ 调度程序转换到具体设备或者由具体设备中转出的字节)。这部分会接下来根据操作类型(读写、同步或异步)进一步划分。格式形如"[dev_maj[:[dev_minor] [read/write/sync/async] [number of bytes]"。 4.1.6 blkio.io_serviced报告当前控制组的IOs(IO操作数,指bio数)数(控制组根据 CFQ 调度程序在具体设备中执行的 I/O 操作数。),这部分会接下来根据操作类型(读写、同步或异步)进一步划分。格式形如"[dev_maj[:[dev_minor] [number of IOs]"。(注意,查资料,了解到BIO以流的方式处理数据,而 NIO 以块的方式处理数据,块 I/O 的效率比流 I/O 高很多。BIO 是阻塞的,而 NIO 是非阻塞的。BIO 基于字节流和字符流进行操作,而 NIO 基于 Channel(通道)和 Buffer(缓冲区)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。) 4.1.7 blkio.io_service_time报告当前控制组根据CFQ调度程序在具体设备中执行 I/O 操作时,发送请求到完成请求的时间总和(纳秒)。如果设备队列深度等于1,这个时间就是实际的服务时间。如果设备队列深度大于1,这个服务时间就不再准确,因为请求可能会是无序的。而这种情况下这个时间可能包括多个IOs请求时间而大于实际的值。格式形如"[dev_maj[:[dev_minor] [read/write/sync/async] [io_service_time]"。 4.1.8 blkio.io_wait_time报告当前控制组IOs请求在调度程序队列中等待服务的总时间(纳秒)。这个时间也要比实际的等待时间大一些,因为报告的时间是该 cgroup 所有 I/O 操作的总和,而不是该 cgroup 本身等待 I/O 操作的时间。要查找该群组作为整体的等待时间,请使用? 4.1.9?blkio.io_merged报告合并到属于这个控制组的bios/requests请求的总数,按操作类型进一步划分,读或写,同步或异步。 4.1.10 blkio.io_queued报告控制组排队的请求总数。按操作类型进一步划分,读或写,同步或异步。 4.1.11 blkio.avg_queue_size用于调试目。仅在CONFIG_BFQ_CGROUP_DEBUG=y配置项打开的情况下才会生效。Debugging aid only enabled if CONFIG_BFQ_CGROUP_DEBUG=y.用于报告控制组整个过程cgroup I/O 操作的平均队列大小。每当此控制组队列获得一个时间片时,该队列大小都将被采样。 4.1.12 blkio.group_wait_time用于调试目。仅在CONFIG_BFQ_CGROUP_DEBUG=y配置项打开的情况下才会生效。用于报告控制组中每一个队列等待的总时间(单位为纳秒:ns)。每当控制组队列获得一个时间片时,此报告就会被更新,因此如果在控制组等待时间片时读取该参数文件,该报告将不会包含当前队列等待操作的时间。 4.1.13 blkio.empty_time用于调试目。仅在CONFIG_BFQ_CGROUP_DEBUG=y配置项打开的情况下才会生效。报告没有任何等待处理的请求时,控制组花费的总时间(纳秒:ns)。每当控制组的列队有等待处理的请求时,报告都会被更新,因此如果控制组没有任何等待处理的请求时读取此参数文件,该报告将不会包含消耗在当前空状态中的时间。 4.1.14 blkio.idle_time用于调试目。仅在CONFIG_BFQ_CGROUP_DEBUG=y配置项打开的情况下才会生效。报告当一个请求比其它队列或者其它群组的请求更好时,调度程序让控制组闲置所消耗的总时间(纳秒:ns)。每当该群组不处于闲置状态时,该报告就会被更新。因此如果在控制组闲置时读取该参数文件,该报告将不会包含消耗在当前闲置状态的时间。 4.1.15 blkio.dequeue用于调试目。仅在CONFIG_BFQ_CGROUP_DEBUG=y配置项打开的情况下才会生效。报告 cgroup 的 I/O 操作请求被具体设备从队列中移除的次数。格式形如"[dev_maj[:[dev_minor] [number of dequeues]"。 4.1.16 blkio.*_recursive递归统计各种类型的数据。这些文件显示与它们的非递归对应项相同的信息,但是包括所有子cgroup的统计信息。 4.2 节流/上限 限制型策参数文件4.2.1 blkio.throttle.read_bps_device设置设备执行“读”操作字节的上限。“读”的操作率以每秒的字节数来限定。格式形如"[dev_maj[:[dev_minor] [bytes_per_second]"。
4.2.2 blkio.throttle.write_bps_device设置设备执行“写”操作字节的上限。“写”的操作率以每秒的字节数来限定。格式形如"[dev_maj[:[dev_minor] [bytes_per_second]"。
4.2.3 blkio.throttle.read_iops_device设置设备执行“读”操作次数的上限。“读”的操作率以每秒的操作次数来表示。格式形如"[dev_maj[:[dev_minor] [operations_per_second]"。
4.2.4 blkio.throttle.write_iops_device设置设备执行“写”操作次数的上限。“写”的操作率以每秒的操作次数来表示。格式形如"[dev_maj[:[dev_minor] [operations_per_second]"。
4.2.5 blkio.throttle.io_serviced报告控制组根据节流限制在具体设备中执行的 I/O 操作数。格式形如:"[dev_maj[:[dev_minor] [read/write/sync/async] [Number of IOs (bio)]"。 4.2.6 blkio.throttle.io_service_bytes报告 cgroup 传送到具体设备或者由具体设备中传送出的字节数。 4.3 通用型策略文件4.3.1 blkio.reset_stats此策略文件用于重设其它所有包含统计数据的策略文件。写入一个整数到该策略文件,即可重置控制组所有的统计数据。 五、使用案例5.1 挂载子系统
5.2 创建子系统层级下创建两个控制组 --- test1/test2
5.3 分别设置两个控制组不同的blkio权重
5.4 用dd命令创建两个大文件
5.5 分别测试控制组test1,test2使用dd指令读取大文件的时间
注意!为确保测试准确。测试前,先执行?
可以启用“群组隔离”以便 I/O 工作量随机也可以保证公平。如要启用群组隔离,请执行下列指令:
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/15 23:01:31- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |