【转载】Linux cgroup资源隔离各个击破之 - io隔离

Linux Cgroup blkio子系统的用法.

 

blkio子系统支持的两种IO隔离策略

.1. (Completely Fair Queuing 完全公平队列)cfq io调度策略,支持按权重分配IO处理的时间片,从而达到IO在各资源组直接的调度和限制的目的,权重取值范围100-1000。
通过以下两个文件进行配置。

blkio.weight                默认值
blkio.weight_device   块设备级的值 (major:minor weight) (优先级高于blkio.weight)

例子

echo 500 > blkio.weight
echo 8:0 500 > blkio.weight_device

cfq 调度器以及其他IO调度器的介绍详见内核文档.
Documentation/block/

.2. 限制IOPS使用上限
例子如下

bytes/s
echo "8:0 10485760" > /cgroup/blkio/test/blkio.throttle.read_bps_device
io/s
echo "8:0 10" > /cgroup/blkio/test/blkio.throttle.read_iops_device
bytes/s
echo "8:0 10485760" > /cgroup/blkio/test/blkio.throttle.write_bps_device
io/s
echo "8:0 10" > /cgroup/blkio/test/blkio.throttle.write_iops_device

这两种资源限制手段各有特色,CFQ的方法比较公平,互相不会干扰,在确保最低使用IO比例的情况下,如果IO设备空闲,还能超限使用。 (一句话就是保证最低的 IOPS)
限制IOPS上限的方法,所有组加起来的IOPS可以超出块设备的最大IOPS指标,实现错峰使用的目的,但是坏处是如果超出最大指标太多,平时可能造成争抢导致SLA无法保证。 (一句话就是限制最高的 IOPS)

注意,当前BLKIO子系统不统计buffered write操作,仅仅统计direct i/o的操作。但是buffered read是统计在内的。

blkio子系统的统计报告

blkio.throttle.io_serviced  报告iops,含当前队列中的。
major, minor, operation(read, write, sync, or async), and numbers.

blkio.throttle.io_service_bytes  报告bps,含当前队列中的。
major, minor, operation(read, write, sync, or async), and bytes.

blkio.time  报告设备I/O使用时间
major, minor, and time. (ms)

blkio.sectors  报告读入或读出的扇区数量
major, minor, and sectors.

blkio.avg_queue_size  报告块设备的平均队列大小(内核CONFIG_DEBUG_BLK_CGROUP=y 必须设置此宏)
blkio.group_wait_time  报告队列等待时间片的总等待时间(ns)  (内核CONFIG_DEBUG_BLK_CGROUP=y 必须设置此宏)
blkio.empty_time  报告块设备空闲时间(没有pending 请求)(ns) (内核CONFIG_DEBUG_BLK_CGROUP=y 必须设置此宏)
blkio.idle_time  报告块设备空闲时间(等待请求合并?)(ns) (内核CONFIG_DEBUG_BLK_CGROUP=y 必须设置此宏)
blkio.dequeue  报告块设备请求出列次数major, minor, and number  (内核CONFIG_DEBUG_BLK_CGROUP=y 必须设置此宏)
blkio.io_serviced  报告IOPS,major, minor, operation(read, write, sync, or async), and numbers. 不含当前队列中的。
blkio.io_service_bytes  报告bps,major, minor, operation(read, write, sync, or async), and bytes. 不含当前队列中的。
blkio.io_service_time   报告从发送IO请求到IO完成的时间。major, minor, operation(read, write, sync, or async), and time(ns).
blkio.io_wait_time      报告IO等待的时间,可能会超出总的时间线,因为同时可能有多个IO请求在等待。  major, minor, operation(read, write, sync, or async), and time(ns).
blkio.io_merged         报告IO合并的次数,operation(read, write, sync, or async), and numbers.
blkio.io_queued         报告IO入列的次数,operation(read, write, sync, or async), and numbers.

blkio子系统的使用例子

.1. 通过权重的方法限制IO的使用比例。

挂载blkio子系统
Mount the blkio subsystem:
~]# mount -t cgroup -o blkio blkio /cgroup/blkio/

创建两个资源组
Create two cgroups for the blkio subsystem:
~]# mkdir /cgroup/blkio/test1/
~]# mkdir /cgroup/blkio/test2/

设置每个组的IO权重
Set blkio weights in the previously created cgroups:
~]# echo 1000 > /cgroup/blkio/test1/blkio.weight
~]# echo 500 > /cgroup/blkio/test2/blkio.weight

创建两个一样大的文件
~]# dd if=/dev/zero of=file_1 bs=1M count=4000
~]# dd if=/dev/zero of=file_2 bs=1M count=4000

把文件的page cache刷出去
~]# sync
~]# echo 3 > /proc/sys/vm/drop_caches

启动两个读文件的进程,分别在两个资源组中。
~]# cgexec -g blkio:test1 time dd if=file_1 of=/dev/null
~]# cgexec -g blkio:test2 time dd if=file_2 of=/dev/null

查看IOTOP,可以看到权重均匀。
# iotop
Total DISK READ: 83.16 M/s | Total DISK WRITE: 0.00 B/s
    TIME  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN      IO    COMMAND
15:18:04 15071 be/4 root       27.64 M/s    0.00 B/s  0.00 % 92.30 % dd if=file_2 of=/dev/null
15:18:04 15069 be/4 root       55.52 M/s    0.00 B/s  0.00 % 88.48 % dd if=file_1 of=/dev/null

blkio子系统中需要用到块设备的major, minor号,可以通过以下方法查看

# ll /dev/|grep "^b"
brw-rw----  1 root cdrom    11,   0 Jun 10 15:50 sr0
brw-rw----  1 root disk    253,   0 Jun 10 15:50 vda
brw-rw----  1 root disk    253,   1 Jun 10 15:50 vda1

CFQ调度公平性

对于权重的方法,如果要对离散的I/O操作起到公平的调度,必须打开块设备的group_isolation设置。
Additionally, you can enable group isolation which provides stronger isolation between groups at the expense of throughput. 
When group isolation is disabled, fairness can be expected only for a sequential workload. 
By default, group isolation is enabled and fairness can be expected for random I/O workloads as well. 
To enable group isolation, use the following command:

echo 1 > /sys/block/<disk_device>/queue/iosched/group_isolation
时间: 2024-10-08 15:30:07

【转载】Linux cgroup资源隔离各个击破之 - io隔离的相关文章

【转载】Linux cgroup资源隔离各个击破之 - cpu隔离1

Linux cgroup 有两个子系统支持CPU隔离.一个是cpu子系统,另一个是cpuset子系统. cpu子系统根据进程设置的调度属性,选择对应的CPU资源调度方法 .1. 完全公平调度 Completely Fair Scheduler (CFS)原理详见https://www.kernel.org/doc/Documentation/scheduler/sched-design-CFS.txtCFS用于处理以下几种进程调度策略SCHED_OTHERSCHED_BATCHSCHED_IDL

[转载] linux cgroup技术介绍

原文: http://coolshell.cn/articles/17049.html 大名鼎鼎的左耳朵耗子的文章, 非常浅显的介绍了linux cgroup技术, 看完之后一定让你明白cgroup技术 前面,我们介绍了Linux Namespace,但是Namespace解决的问题主要是环境隔离的问题,这只是虚拟化中最最基础的一步,我们还需要解决对计算机资源使用上的隔离.也就是说,虽然你通过Namespace把我Jail到一个特定的环境中去了,但是我在其中的进程使用用CPU.内存.磁盘等这些计

[转载] linux cgroup

原文: http://coolshell.cn/articles/17049.html 感谢左耳朵耗子的精彩文章. 前面,我们介绍了Linux Namespace,但是Namespace解决的问题主要是环境隔离的问题,这只是虚拟化中最最基础的一步,我们还需要解决对计算机资源使用上的隔离.也就是说,虽然你通过Namespace把我Jail到一个特定的环境中去了,但是我在其中的进程使用用CPU.内存.磁盘等这些计算资源其实还是可以随心所欲的.所以,我们希望对进程进行资源利用上的限制或控制.这就是Li

[转载] 每周推荐阅读 BFQ:实现IO的隔离共享与高吞吐访问

磁盘IO和网络IO隔离与共享是混部应用中基本需求,从早些年的BVC到现在的Matrix,以及Galaxy,或者未来的BS/Mint混部都遇到类似的问题:由于无法有效实现IO级的隔离(包括吞吐隔离.延时隔离.故障/安全隔离,优先预留),磁盘资源只能以盘块为单位进行物理隔离,即使数据集很小的应用也不得不分配整块盘独占,这就导致了大量盘块的存储空间浪费. 精确的IO隔离是很有挑战的,在现实应用中的IO隔离的功能应用主要包括两类:Isolation for Sharing和Isolation for R

jstorm的cgroup资源隔离机制

本文研究一下jstorm使用cgroup做资源隔离的情况,github有文档: https://github.com/alibaba/jstorm/wiki/%E8%B5%84%E6%BA%90%E7%A1%AC%E9%9A%94%E7%A6%BB 这个文档告诉你怎么开启cgroup,但对于不太了解cgroup和jstorm细节的同学可能更有兴趣看一下到底是怎么隔离的. 废话少说,你不是告诉我cgroup做资源隔离吗?你回答我两个问题: 1.什么是cgroup 2.jstorm怎么用cgroup

Docker基础技术:Linux CGroup

前面,我们介绍了Linux Namespace,但是Namespace解决的问题主要是环境隔离的问题,这只是虚拟化中最最基础的一步,我们还需要解决对计算机资源使用上的隔离.也就是说,虽然你通过Namespace把我Jail到一个特定的环境中去了,但是我在其中的进程使用用CPU.内存.磁盘等这些计算资源其实还是可以随心所欲的.所以,我们希望对进程进行资源利用上的限制或控制.这就是Linux CGroup出来了的原因. Linux CGroup全称Linux Control Group, 是Linu

深入理解 Linux Cgroup 系列(一):基本概念

原文链接:深入理解 Linux Cgroup 系列(一):基本概念 Cgroup 是 Linux kernel 的一项功能:它是在一个系统中运行的层级制进程组,你可对其进行资源分配(如 CPU 时间.系统内存.网络带宽或者这些资源的组合).通过使用 cgroup,系统管理员在分配.排序.拒绝.管理和监控系统资源等方面,可以进行精细化控制.硬件资源可以在应用程序和用户间智能分配,从而增加整体效率. cgroup 和 namespace 类似,也是将进程进行分组,但它的目的和 namespace 不

[转帖]linux下CPU、内存、IO、网络的压力测试,硬盘读写速度测试,Linux三个系统资源监控工具

linux下CPU.内存.IO.网络的压力测试,硬盘读写速度测试,Linux三个系统资源监控工具 https://blog.51cto.com/hao360/1587165 linux_python关注0人评论57974人阅读2014-12-06 20:17:16 一.对CPU进行简单测试: 1.通过bc命令计算特别函数 例:计算圆周率 echo "scale=5000; 4*a(1)" | bc -l -q MATH LIBRARY        If bc is invoked w

CentOS6.5菜鸟之旅:纯转载Linux目录结构

来自:http://www.iteye.com/topic/1125162 使用linux也有一年多时间了  最近也是一直在维护网站系统主机  下面是linux目录结构说明 本人使用的是centos系统,很久没有发表博文了 近期会整理自己所用所了解知识点,发表linux相关的文章,记录自己的linux点点滴滴. linux 目录结构 /: 根目录,一般根目录下只存放目录,不要存放文件,/etc./bin./dev./lib./sbin应该和根目录放置在一个分区中/bin:/usr/bin: 可执