前一篇博客介绍了利用 cgroup 来控制进程的 CPU和内存使用情况, 这次补上使用 cgroup 来控制进程的IO优先级的方法.

前提条件

如果想控制进程的IO优先级, 需要内核的支持, 内核编译时需要打开下面2个参数.

CONFIG_BLK_CGROUP=y

CONFIG_CFQ_GROUP_IOSCHED=y

查看是否开启这2个内核编译选项的方法很简单:

root@debian-113:~# grep -i 'blk_cgroup' /boot/config-`uname -r`

root@debian-113:~# grep -i 'cfq_group' /boot/config-`uname -r`

如果这2个内核选项没有打开, 只能重新编译内核后再来实验下面的实例了.

再次通过 /proc/cgroups 来查看 blkio 是否已经启用.

root@debian-113:~# cat /proc/cgroups

#subsys_name hierarchy num_cgroups enabled

cpuset0 1 1cpu0 1 1cpuacct0 1 1memory0 1 1devices0 1 1freezer0 1 1net_cls0 1 1blkio0 1 1

perf_event0 1 1

如果 blkio 没有启用, 可以通过grub设置启动参数来启用它.

类似的可以参考: Linux资源控制-CPU和内存  中 实例4 - cgroup 对使用的内存的控制 中启用memory的方法。

除此之外, 还得查看是否能够将 CFQ 作为IO调度程序来使用.

root@debian-113:~# cat /sys/class/block/sda/queue/scheduler

noop deadline [cfq]

上述结果表示支持cfq调度, []括住cfq 表示当前使用的就是 cfq调度.

如果 cat 的结果中没有 cfq, 需要重新编译内核, 使之能够支持 cfq调度.

如果 cat 的结果中有 cfq, 但是 cfq 不是当前正在使用的调度程序, 即 [] 没有括在 cfq上, 那么

cat cfq /sys/class/block/sda/queue/scheduler

注: 上面的 sda 是我的测试的硬盘, 如果你的是 sdb 或者其它, 请对应修改.

实例 - 控制IO优先级

挂载 cgroup文件系统, 挂载参数 -o blkio

建立2个group, 分别为 A 和 B

默认情况, 2个 group中的dd进程同时进行文件操作

查看默认情况下, 2个dd进程完成的时间

设置 A 的优先级为 100, B 的优先级为 1000

同时在2个group A 和 B 中运行 dd进程

查看group A 和 B 中的 dd进程完成的时间

实验之前, 先制作测试脚本. (简单写了一个如下)

#!/bin/bash

####################################################################

#1. 创造2个测试文件, 大小都是1G

#2. 将当前进程加入到指定 cgroup

#3. 执行 dd操作

#4. 删除 测试文件

#5. 显示log

####################################################################functionusage()

{echo "./blkio-test.sh "exit1}if [ $# != 2 ]; thenusagefigroup1_src=~/group1.src

group2_src=~/group2.src

group1_log=/tmp/group1.log

group2_log=/tmp/group2.log

group1=$1group2=$2

echo "生成测试数据 $group1_src 和 $group2_src (大小都是1G)"

dd if=/dev/zero of=$group1_src count=1024 bs=1Mdd if=/dev/zero of=$group2_src count=1024 bs=1Mecho "同时在 $group1 和 $group2 中开始 dd 测试"

echo 3 > /proc/sys/vm/drop_cachesecho $$ >> $group1/tasks

(date; dd if=$group1_src of=/dev/null; date;) > $group1_log 2>&1 &

echo $$ >> $group2/tasks

(date; dd if=$group2_src of=/dev/null; date;) > $group2_log 2>&1 &

wait

echo "测试完成!"

echo "开始清除测试文件"

rm -rf $group1_src $group2_srcecho "测试文件清除完成"

echo "------------------------------------------"

echo "显示group1 的log"

cat$group1_logecho "------------------------------------------"

echo "显示group2 的log"

cat$group2_logecho "------------------------------------------"

开始实验:

# 挂载 cgroup 文件系统

root@debian-113:~# mount -t cgroup -o blkio cgroup /mnt/cgroup/root@debian-113:~# mkdir /mnt/cgroup/{A,B}

root@debian-113:~# ll /mnt/cgroup/total0drwxr-xr-x 2 root root 0 Sep 5 13:23A

drwxr-xr-x 2 root root 0 Sep 5 13:23B-r--r--r-- 1 root root 0 Sep 5 13:23blkio.io_merged-r--r--r-- 1 root root 0 Sep 5 13:23blkio.io_queued-r--r--r-- 1 root root 0 Sep 5 13:23blkio.io_service_bytes-r--r--r-- 1 root root 0 Sep 5 13:23blkio.io_serviced-r--r--r-- 1 root root 0 Sep 5 13:23blkio.io_service_time-r--r--r-- 1 root root 0 Sep 5 13:23blkio.io_wait_time--w------- 1 root root 0 Sep 5 13:23blkio.reset_stats-r--r--r-- 1 root root 0 Sep 5 13:23blkio.sectors-r--r--r-- 1 root root 0 Sep 5 13:23 blkio.time

-rw-r--r-- 1 root root 0 Sep 5 13:23 blkio.weight

# 默认2个组内的IO优先级都是500

root@debian-113:~# cat /mnt/cgroup/A/blkio.weight500

root@debian-113:~# cat /mnt/cgroup/B/blkio.weight500# 默认情况下的测试结果如下: A和B耗时都是 20秒

root@debian-113:~# ./blkio-test.sh /mnt/cgroup/A /mnt/cgroup/B

生成测试数据/root/group1.src 和 /root/group2.src (大小都是1G)1024+0 records in

1024+0records out1073741824 bytes (1.1 GB) copied, 6.01188 s, 179 MB/s1024+0 records in

1024+0records out1073741824 bytes (1.1 GB) copied, 9.4272 s, 114 MB/s

同时在/mnt/cgroup/A 和 /mnt/cgroup/B 中开始 dd测试

测试完成!开始清除测试文件

测试文件清除完成------------------------------------------显示group1 的log

Fri Sep5 13:26:31 CST 2014

2097152+0 records in

2097152+0records out1073741824 bytes (1.1 GB) copied, 20.0504 s, 53.6 MB/s

Fri Sep5 13:26:51 CST 2014

------------------------------------------显示group2 的log

Fri Sep5 13:26:31 CST 2014

2097152+0 records in

2097152+0records out1073741824 bytes (1.1 GB) copied, 18.8583 s, 56.9 MB/s

Fri Sep5 13:26:51 CST 2014

------------------------------------------# 修改A的优先级为100, B的优先级为1000

root@debian-113:~# echo 100 > /mnt/cgroup/A/blkio.weight

root@debian-113:~# echo 1000 > /mnt/cgroup/B/blkio.weight

root@debian-113:~# cat /mnt/cgroup/A/blkio.weight100root@debian-113:~# cat /mnt/cgroup/B/blkio.weight1000# 不同优先级下的测试结果如下: A耗时 19秒; B耗时 11秒

root@debian-113:~# ./blkio-test.sh /mnt/cgroup/A /mnt/cgroup/B

生成测试数据/root/group1.src 和 /root/group2.src (大小都是1G)1024+0 records in

1024+0records out1073741824 bytes (1.1 GB) copied, 6.52967 s, 164 MB/s1024+0 records in

1024+0records out1073741824 bytes (1.1 GB) copied, 8.01311 s, 134 MB/s

同时在/mnt/cgroup/A 和 /mnt/cgroup/B 中开始 dd测试

测试完成!开始清除测试文件

测试文件清除完成------------------------------------------显示group1 的log

Fri Sep5 13:30:06 CST 2014

2097152+0 records in

2097152+0records out1073741824 bytes (1.1 GB) copied, 18.5598 s, 57.9 MB/s

Fri Sep5 13:30:25 CST 2014

------------------------------------------显示group2 的log

Fri Sep5 13:30:06 CST 2014

2097152+0 records in

2097152+0records out1073741824 bytes (1.1 GB) copied, 10.6127 s, 101 MB/s

Fri Sep5 13:30:17 CST 2014

------------------------------------------

可以看出, IO优先级调整之后, 确实优先级高的cgroup中的进程能更快完成IO操作.

总结

其实 cgroup 除了能够IO优先级之外, 还可以控制进程的其它IO属性, 具体参见挂载在 cgroup 的IO相关设置文件.

各个文件的具体含义, 请参考更详细的 cgroup 相关文档.

linux 内核级资源查看,Linux资源管理相关推荐

  1. 在win10查看本机linux的文件,Windows 10变身开发者利器:内置Linux内核,轻松查看Linux子系统文件...

    原标题:Windows 10变身开发者利器:内置Linux内核,轻松查看Linux子系统文件 来源:创事记 终于!在Windows里可以访问Linux文件了. 这表明,微软插入开源界的触角,越来越深入 ...

  2. 【Linux 内核 内存管理】Linux 内核内存布局 ① ( 查看 Linux 操作系统位数 | 查看 Linux 操作系统软硬件信息 )

    文章目录 一.查看 Linux 操作系统位数 二.查看 Linux 操作系统软硬件信息 一.查看 Linux 操作系统位数 在 646464 位的 Linux 中 , 使用 484848 位 表示 & ...

  3. 大连Linux内核开发,如何查看linux内核版本

    如何得知自己正在使用的linux是什么版本 1. 查看内核版本命令: 1) [root@q1test01 ~]# cat /proc/version Linux version 2.6.9-22.EL ...

  4. 输出linux内核版本信息,查看linux内核和版本信息

    一.查看Linux内核版本命令(2种方法): 1.cat /proc/version Linux version 3.10.0_1-0-0-8 (root@xxx) (gcc version 4.8. ...

  5. 如何知道linux内核版本,如何查看linux内核版本

    如何得知自己正在使用的linux是什么版本 1. 查看内核版本命令: 1) [root@q1test01 ~]# cat /proc/version Linux version 2.6.9-22.EL ...

  6. linux 查看内核属性,怎么查看linux操作系统

    在windows下我们查看系统信息直接右击电脑属性就可以查看了.那么在Linux系统中如何查看呢.下面跟着学习啦小编来一起了解下怎么查看linux操作系统吧. 查看linux操作系统方法 如其它信息一 ...

  7. linux内核级调用时间delay函数,及常用文件头

    最近做一个嵌入式内核级rookit 的编写/ 需要设计一个每3秒亮一次灯的内核级rookit 在设计rookit中使用了delay时间,需要包含<linux/delay.h>头文件. #i ...

  8. 查看linux内核的编译时间,linux内核编译步骤

    linux内核编译步骤 对于linux新手来说,编译内核相对有一些难度,甚至不知道如何入手,我通过在网上收集这方面的资料,最终编译成功.现在我归纳了一下,写出这一篇还算比较详细的步骤,希望能对各位新手 ...

  9. linux内核映像查看,RockPI 4A 查看Linux内核映像编译信息

    在Linux内核调试时,经常会遇到下面的情况: 1.明明已经修改过代码,为什么功能没生效? 2.明明自己验证的功能没有问题,别人验证就出问题了呢? 遇到事情,不要慌,也不用先拿手机拍个照. 我们先看下 ...

最新文章

  1. hibernate笔记(三) Hibernate标识符属性(主键)生成策略全析
  2. html Qestionnaire表单
  3. spring aop代码的增强
  4. RSS - 简单方便的follow资讯
  5. 【2017-03-09】SQL Server 数据库基础、四种约束
  6. httpHandlers和httpModules接口介绍 (5)
  7. SQL Server 2000数据库移植到SQL Server 2008R2数据库服务器中碰到的”3145错误”及解决办法...
  8. Java毕业设计--健康推广管理系统项目实战【Springboot+mybatis+layui等实现】
  9. bzoj 1710: [Usaco2007 Open]Cheappal 廉价回文【区间dp】
  10. Mysql数据库的mysql Schema 究竟有哪些东西 手工注入的基础要领
  11. JavaScript的那些书
  12. 腾达路由器设置成中继模式
  13. 什么是生命?演讲原稿
  14. linux下卫士软件,Linux系统卫士
  15. 自定义ListView实现任意View跑马灯效果
  16. PTA.奇数值结点链表(C语言链表应用)
  17. 更改chm文件的字体大小
  18. Coursera | Andrew Ng (02-week-1-1.12)—梯度的数值逼近
  19. 科技云报道:2022Arm服务器现状:云阵营已成
  20. 简单记录下手机root 过程

热门文章

  1. Soloπ:支付宝开源的Android专项测试工具
  2. 车联网上云最佳实践(二)
  3. 深入理解 Docker 网络原理
  4. 大话云存储,这个“对象”可能无处不在
  5. 北美KubeCon新风,正把K8S魔力带向边缘计算
  6. php 怎么解析文本,PHP解析自定义纯文本数据库
  7. java在cmd中什么意思_为什么在cmd中java可以运行,javac不行?
  8. 频谱扩展 matlab,语音信号频谱扩展
  9. jre for mac 删除_在 Mac 的 Docker Desktop 中运行 K8s
  10. When allowCredentials is true, allowedOrigins cannot contain the special value “*“ that cannot be