网站开发大学有哪些,wordpress素锦模板,wordpress图片比例拉伸,智慧团建网站首页前一篇博客介绍了利用 cgroup 来控制进程的 CPU和内存使用情况, 这次补上使用 cgroup 来控制进程的IO优先级的方法.前提条件如果想控制进程的IO优先级, 需要内核的支持, 内核编译时需要打开下面2个参数.CONFIG_BLK_CGROUPyCONFIG_CFQ_GROUP_IOSCHEDy查看是否开启这2个内核编译选…前一篇博客介绍了利用 cgroup 来控制进程的 CPU和内存使用情况, 这次补上使用 cgroup 来控制进程的IO优先级的方法.前提条件如果想控制进程的IO优先级, 需要内核的支持, 内核编译时需要打开下面2个参数.CONFIG_BLK_CGROUPyCONFIG_CFQ_GROUP_IOSCHEDy查看是否开启这2个内核编译选项的方法很简单:rootdebian-113:~# grep -i blk_cgroup /boot/config-uname -rrootdebian-113:~# grep -i cfq_group /boot/config-uname -r如果这2个内核选项没有打开, 只能重新编译内核后再来实验下面的实例了.再次通过 /proc/cgroups 来查看 blkio 是否已经启用.rootdebian-113:~# cat /proc/cgroups#subsys_name hierarchy num_cgroups enabledcpuset0 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调度程序来使用.rootdebian-113:~# cat /sys/class/block/sda/queue/schedulernoop 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.srcgroup2_src~/group2.srcgroup1_log/tmp/group1.loggroup2_log/tmp/group2.loggroup1$1group2$2echo 生成测试数据 $group1_src 和 $group2_src (大小都是1G)dd if/dev/zero of$group1_src count1024 bs1Mdd if/dev/zero of$group2_src count1024 bs1Mecho 同时在 $group1 和 $group2 中开始 dd 测试echo 3 /proc/sys/vm/drop_cachesecho $$ $group1/tasks(date; dd if$group1_src of/dev/null; date;) $group1_log 21 echo $$ $group2/tasks(date; dd if$group2_src of/dev/null; date;) $group2_log 21 waitecho 测试完成!echo 开始清除测试文件rm -rf $group1_src $group2_srcecho 测试文件清除完成echo ------------------------------------------echo 显示group1 的logcat$group1_logecho ------------------------------------------echo 显示group2 的logcat$group2_logecho ------------------------------------------开始实验:# 挂载 cgroup 文件系统rootdebian-113:~# mount -t cgroup -o blkio cgroup /mnt/cgroup/rootdebian-113:~# mkdir /mnt/cgroup/{A,B}rootdebian-113:~# ll /mnt/cgroup/total0drwxr-xr-x 2 root root 0 Sep 5 13:23Adrwxr-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优先级都是500rootdebian-113:~# cat /mnt/cgroup/A/blkio.weight500 rootdebian-113:~# cat /mnt/cgroup/B/blkio.weight500# 默认情况下的测试结果如下: A和B耗时都是 20秒rootdebian-113:~# ./blkio-test.sh /mnt/cgroup/A /mnt/cgroup/B生成测试数据/root/group1.src 和 /root/group2.src (大小都是1G)10240 records in10240records out1073741824 bytes (1.1 GB) copied, 6.01188 s, 179 MB/s10240 records in10240records out1073741824 bytes (1.1 GB) copied, 9.4272 s, 114 MB/s同时在/mnt/cgroup/A 和 /mnt/cgroup/B 中开始 dd测试测试完成!开始清除测试文件测试文件清除完成------------------------------------------显示group1 的logFri Sep5 13:26:31 CST 201420971520 records in20971520records out1073741824 bytes (1.1 GB) copied, 20.0504 s, 53.6 MB/sFri Sep5 13:26:51 CST 2014------------------------------------------显示group2 的logFri Sep5 13:26:31 CST 201420971520 records in20971520records out1073741824 bytes (1.1 GB) copied, 18.8583 s, 56.9 MB/sFri Sep5 13:26:51 CST 2014------------------------------------------# 修改A的优先级为100, B的优先级为1000rootdebian-113:~# echo 100 /mnt/cgroup/A/blkio.weightrootdebian-113:~# echo 1000 /mnt/cgroup/B/blkio.weightrootdebian-113:~# cat /mnt/cgroup/A/blkio.weight100rootdebian-113:~# cat /mnt/cgroup/B/blkio.weight1000# 不同优先级下的测试结果如下: A耗时 19秒; B耗时 11秒rootdebian-113:~# ./blkio-test.sh /mnt/cgroup/A /mnt/cgroup/B生成测试数据/root/group1.src 和 /root/group2.src (大小都是1G)10240 records in10240records out1073741824 bytes (1.1 GB) copied, 6.52967 s, 164 MB/s10240 records in10240records out1073741824 bytes (1.1 GB) copied, 8.01311 s, 134 MB/s同时在/mnt/cgroup/A 和 /mnt/cgroup/B 中开始 dd测试测试完成!开始清除测试文件测试文件清除完成------------------------------------------显示group1 的logFri Sep5 13:30:06 CST 201420971520 records in20971520records out1073741824 bytes (1.1 GB) copied, 18.5598 s, 57.9 MB/sFri Sep5 13:30:25 CST 2014------------------------------------------显示group2 的logFri Sep5 13:30:06 CST 201420971520 records in20971520records out1073741824 bytes (1.1 GB) copied, 10.6127 s, 101 MB/sFri Sep5 13:30:17 CST 2014------------------------------------------可以看出, IO优先级调整之后, 确实优先级高的cgroup中的进程能更快完成IO操作.总结其实 cgroup 除了能够IO优先级之外, 还可以控制进程的其它IO属性, 具体参见挂载在 cgroup 的IO相关设置文件.各个文件的具体含义, 请参考更详细的 cgroup 相关文档.