首页 > 其他分享 >Block IO 控制器 【ChatGPT】

Block IO 控制器 【ChatGPT】

时间:2023-12-09 21:45:08浏览次数:22  
标签:IO 启用 blkio 限流 cgroup ChatGPT CONFIG Block

Block IO 控制器

概述

cgroup 子系统 "blkio" 实现了块 IO 控制器。在存储层次结构中,似乎需要各种类型的 IO 控制策略(如比例带宽、最大带宽),无论是在叶节点还是在中间节点都需要。计划是使用相同的基于 cgroup 的管理接口来管理 blkio 控制器,并根据用户选项在后台切换 IO 策略。

一个 IO 控制策略是限流策略,可以用来指定设备的上限 IO 速率。这个策略是在通用块层中实现的,可以用于叶节点以及更高级别的逻辑设备,比如设备映射器。

如何操作

限流/上限策略

  1. 启用 Block IO 控制器:

    CONFIG_BLK_CGROUP=y
    
  2. 在块层启用限流:

    CONFIG_BLK_DEV_THROTTLING=y
    
  3. 挂载 blkio 控制器(参见控制组,为什么需要 cgroups?):

    mount -t cgroup -o blkio none /sys/fs/cgroup/blkio
    
  4. 为根组的特定设备指定带宽速率。策略的格式为 "<major>:<minor> <bytes_per_second>":

    echo "8:16  1048576" > /sys/fs/cgroup/blkio/blkio.throttle.read_bps_device
    

    这将限制主/次编号为 8:16 的设备在根组上进行读取时的速率为 1MB/秒。

  5. 运行 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 文件进行设置。

分层控制组

限流实现了层次支持;但是,只有当从 cgroup 方面启用了 "sane_behavior" 时,限流的层次支持才会启用,而目前这是一个开发选项,不对外公开。

如果有人创建了如下所示的层次结构:

   root
   /  \
test1 test2
   |
test3

使用 "sane_behavior" 的限流将正确处理这种层次结构。对于限流来说,所有限制都适用于整个子树,而所有统计信息都是针对该 cgroup 中任务直接生成的 IO 本地的。

如果从 cgroup 方面未启用 "sane_behavior" 的限流,实际上会将所有同级别的组都视为如下所示:

        pivot
     /  /   \  \
root  test1 test2  test3

各种用户可见的配置选项

  • CONFIG_BLK_CGROUP:块 IO 控制器。
  • CONFIG_BFQ_CGROUP_DEBUG:调试帮助。如果启用了此选项,一些额外的统计文件将显示在 cgroup 中。
  • CONFIG_BLK_DEV_THROTTLING:在块层中启用块设备限流支持。

cgroup 文件的详细信息

比例权重策略文件

  • blkio.bfq.weight:指定每个 cgroup 的权重。这是该组在所有设备上的默认权重,除非被每个设备规则(参见下面的 blkio.bfq.weight_device)覆盖。
  • blkio.bfq.weight_device:指定每个 cgroup 每个设备的权重,覆盖默认组权重。
  • blkio.time:分配给每个设备的 cgroup 的磁盘时间(以毫秒为单位)。
  • blkio.sectors:由该组传输到/从磁盘的扇区数。
  • blkio.io_service_bytes:由该组传输到/从磁盘的字节数。
  • blkio.io_serviced:由该组发出到磁盘的 IO 数(bio)。
  • blkio.io_service_time:由该 cgroup 执行的 IO 的请求分派和请求完成之间的总时间。
  • blkio.io_wait_time:该 cgroup 的 IO 在调度队列中等待服务的总时间。
  • blkio.io_merged:合并到属于该 cgroup 的请求中的总 bios/requests 数。
  • blkio.io_queued:在任何给定时刻排队等待服务的请求总数。
  • blkio.avg_queue_size:仅在启用了 CONFIG_BFQ_CGROUP_DEBUG=y 时才启用的调试辅助。该 cgroup 存在期间的平均队列大小。
  • blkio.group_wait_time:仅在启用了 CONFIG_BFQ_CGROUP_DEBUG=y 时才启用的调试辅助。自该 cgroup 变得繁忙(即从 0 到 1 个请求排队)以来等待获取其队列之一的时间量。
  • blkio.empty_time:仅在启用了 CONFIG_BFQ_CGROUP_DEBUG=y 时才启用的调试辅助。该 cgroup 在未被服务时花费的时间量。
  • blkio.idle_time:仅在启用了 CONFIG_BFQ_CGROUP_DEBUG=y 时才启用的调试辅助。IO 调度程序在预期比现有队列/组中的现有请求更好的请求之前空闲给定 cgroup 的时间量。
  • blkio.dequeue:仅在启用了 CONFIG_BFQ_CGROUP_DEBUG=y 时才启用的调试辅助。给出了一个组从设备的服务树中出列的次数的统计信息。
  • blkio.*_recursive:各种统计信息的递归版本。这些文件显示与它们的非递归对应文件相同的信息,但包括所有后代 cgroups 的统计信息。

限流/上限策略文件

  • blkio.throttle.read_bps_device:指定从设备读取的速率上限。
  • blkio.throttle.write_bps_device:指定向设备写入的速率上限。
  • blkio.throttle.read_iops_device:指定从设备读取的 IOPS 上限。
  • blkio.throttle.write_iops_device:指定向设备写入的 IOPS 上限。
  • blkio.throttle.io_serviced:由该组发出到磁盘的 IO 数(bio)。
  • blkio.throttle.io_service_bytes:由该组传输到/从磁盘的字节数。

各种策略共有的文件

  • blkio.reset_stats:将整个 cgroup 的所有统计信息重置为零。

标签:IO,启用,blkio,限流,cgroup,ChatGPT,CONFIG,Block
From: https://www.cnblogs.com/pengdonglin137/p/17891538.html

相关文章

  • CPU核算控制器 【ChatGPT】
    原文:https://www.kernel.org/doc/html/v6.6/admin-guide/cgroup-v1/cpuacct.htmlCPU核算控制器CPU核算控制器用于使用cgroups对任务进行分组,并核算这些任务组的CPU使用情况。CPU核算控制器支持多层级分组。一个核算组累积其所有子组和直接存在于其组中的任务的CPU使用情况。可......
  • RCU补丁审查清单 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/RCU/checklist.htmlRCU补丁审查清单本文档包含了一个用于生成和审查使用RCU的补丁的清单。违反以下列出的任何规则都会导致与省略锁原语相同类型的问题。这份清单基于审查这类补丁的经验,经历了相当长的一段时间,但总是欢迎改进!RCU是否......
  • Linux通用中断处理 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/core-api/genericirq.htmlLinux通用中断处理版权©2005-2010:ThomasGleixner©2005-2006:IngoMolnar简介通用中断处理层旨在为设备驱动程序提供完整的中断处理抽象。它能够处理所有不同类型的中断控制器硬件。设备驱动程序使用......
  • 循环缓冲区 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/core-api/circular-buffers.html循环缓冲区作者[email protected]@linux.ibm.comLinux提供了许多功能,可用于实现循环缓冲区。有两组这样的功能:用于确定2的幂大小缓冲区信息的便利函数。......
  • Linux中的红黑树(rbtree)【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/core-api/rbtree.html红黑树(rbtree)在Linux中日期2007年1月18日作者[email protected]红黑树是什么,它们有什么作用?红黑树是一种自平衡的二叉搜索树,用于存储可排序的键/值数据对。这与基数树(用于高效存储稀疏数组,因......
  • 本地原子操作的语义和行为 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/core-api/local_ops.html这篇文档介绍了本地原子操作的语义和行为,以及如何在任何给定的架构中实现它们,并展示了它们如何被正确地使用。它还强调了在读取这些本地变量时必须采取的预防措施,特别是当内存写入的顺序很重要时。注意请注意,......
  • 为内核对象添加引用计数器(krefs)【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/core-api/kref.html为内核对象添加引用计数器(krefs)作者[email protected]作者[email protected]其中很多内容都是从GregKroah-Hartman的2004年OLS论文和关于krefs的演示中借鉴而来的,可以在......
  • Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communicatio
    1、错误原因项目测试Swagger的时候,接口请求一直在那转,出不来数据,其他的配置都正常呀,我就很纳闷,今天记录一下。com.mysql.cj.jdbc.exceptions.CommunicationsException:CommunicationslinkfailureThelastpacketsentsuccessfullytotheserverwas0millisecondsago.The......
  • java.Text.ParseException:Unparseable date:“undefined 00:00:00“
    request.getParameter()获取的日期要toString一下再parse,否则就会报这个异常。if(page.getParams().get("startTime")!=null){Datestart=DateParser.parse(page.getParams().get("startTime").toString(),true);page.getParams(......
  • ApplicationContext is unlikely to start due to a @ComponentScan of the default p
    springboot警告:ApplicationContextisunlikelytostartduetoa@ComponentScanofthedefaultpackage解决办法:1、一般发出这个警告的原因是你把启动类直接放在的src目录下面。2、你需要在src目录下面再建一个包,然后把启动类放到下面。3、或者你错将启动类放到java文件中了......