Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1237466
  • 博文数量: 389
  • 博客积分: 2874
  • 博客等级: 少校
  • 技术积分: 3577
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-24 10:34
文章分类

全部博文(389)

文章存档

2020年(2)

2018年(39)

2017年(27)

2016年(3)

2015年(55)

2014年(92)

2013年(54)

2012年(53)

2011年(64)

分类: LINUX

2017-12-14 11:49:25

1.       测试目的

  目前最新的稳定版Linux内核(3.2.6)中cgroup的功能和特性都已经比较丰富和完善,用户空间的工具也有了。Cgroup中对于CPU资源的控制主要集中cpu和cpuset这两个子系统,其中cpu子系统主要用来控制进程调度,设置进程占用CPU资源的比重;cpuset则主要是控制进程能够使用哪些CPU和内存节点(NUMA)。

测试的目的主要是对  cgroup 中 cpu 和cpuset这两个子系统的功能进行验证,探索cpu.shares、cpu.rt_period_us 、cpu.rt_runtime_us 等参数功能和使用方法。

2    测试平台:

[html] view plain copy
  1. ubuntu 11.10  
  2. 3.0.0-26-generic-pae  
  3. 4  Intel(R) Core(TM) i3-2310M CPU @ 2.10GHz  

3 测试过程

挂载:

[html] view plain copy
  1. mount -t tmpfs cgroup_root /sys/fs/cgroup  
  2. mkdir /sys/fs/cgroup/cpuset  
  3. mount -t cgroup -ocpuset cpuset /sys/fs/cgroup/cpuset  
创建目录:
[html] view plain copy
  1. root@ubuntu:/sys/fs/cgroup/cpuset# mkdir tailor tinker  

挂载 :

root@ubuntu:~# mount -t cgroup -o cpu none /sys/fs/cgroup/cpu

创建目录:

[html] view plain copy
  1. root@ubuntu:/sys/fs/cgroup/cpu# mkdir tailor tinker  

启动两个测试程序:

sina@ubuntu:~$ ./a.out &

[2] 3944

sina@ubuntu:~$ ./a.out &

[2] 3945


将测试进程放到 cpu cpuset分支里面:

[html] view plain copy
  1. sina@ubuntu:/sys/fs/cgroup/cpuset/tinker$ echo 3944 > tasks  
  2. sina@ubuntu:/sys/fs/cgroup/cpuset/tailor$ echo 3945 > tasks  
  3. sina@ubuntu:/sys/fs/cgroup/cpu/tailor$ echo 3945 > tasks  
  4. sina@ubuntu:/sys/fs/cgroup/cpu/tinker$ echo 3944 > tasks  

设置 cpu分支里面的 cpu.shares
[html] view plain copy
  1. sina@ubuntu:/sys/fs/cgroup/cpu/tailor$ echo 1024 > cpu.shares  
  2. sina@ubuntu:/sys/fs/cgroup/cpu/tinker$ echo 512 > cpu.shares  
设置两个组的cpu affinity:
[html] view plain copy
  1. sina@ubuntu:/sys/fs/cgroup/cpuset/tailor$ echo 3 > cpuset.cpus  
  2. sina@ubuntu:/sys/fs/cgroup/cpuset/tinker$ echo 3 > cpuset.cpus  

一段时间之后观察cpu使用率:(因为 内核调度等方面的原因,需要等待很久才能得到如下结果)

[html] view plain copy
  1. root@ubuntu:~# ps -C a.out -opid,%cpu,psr,args  
  2.   PID %CPU PSR COMMAND  
  3.  3944 33.6   3 ./a.out  
  4.  3945 66.4   3 ./a.out  
再启动一个测试程序:
[html] view plain copy
  1. sina@ubuntu:~$ ./a.out &  
  2. [2] 5503  


可观察到cpu使用率是 100%:

[html] view plain copy
  1. root@ubuntu:~# ps -C a.out -opid,%cpu,psr,args  
  2.   PID %CPU PSR COMMAND  
  3.  5503 99.6   1 ./a.out  


仅将进程 5503 放到 cpu子系统中,一段时间后观察cpu使用率:

root@ubuntu:/sys/fs/cgroup/cpu/tailor# echo 5503 > tasks

可看到几乎没什么变化:(因为这个时候还没有设置 进程的cpu affinity 属性)

[html] view plain copy
  1. root@ubuntu:~# ps -C a.out -opid,%cpu,psr,args  
  2.   PID %CPU PSR COMMAND  
  3.  3944 33.6   3 ./a.out  
  4.  3945 66.4   3 ./a.out  
  5.  5503 99.6   1 ./a.out  

再将进程 5503 放到 cpuset 子系统中,一段时间后观察cpu使用率:
[html] view plain copy
  1. root@ubuntu:/sys/fs/cgroup/cpuset/tailor# echo 5503 > tasks  
  2.   
  3. root@ubuntu:~# ps -C a.out -opid,%cpu,psr,args  
  4.   PID %CPU PSR COMMAND  
  5.  3944 33.4   3 ./a.out  
  6.  3945 33.3   3 ./a.out  
  7.  5503 33.3  3 ./a.out  

结论:从上面的测试结果可以看出,各个 cgroup 之间基本上能够按照 cpu.shares 设定的比例共享CPU资源,对于同一个cgroup中的一组进程则被公平的调度。

测试运用 cpu.rt_period_us 和 cpu.rt_runtime_us 来控制CPU资源的分配

[html] view plain copy
  1. root@ubuntu:/sys/fs/cgroup/cpu/tailor# echo 200000 > cpu.rt_runtime_us  

一段时间之后观察 3 进程的cpu使用率:
[html] view plain copy
  1. root@ubuntu:~# ps -C a.out -opid,%cpu,psr,args  
  2.   PID %CPU PSR COMMAND  
  3.  3944 33.4   3 ./a.out  
  4.  3945 10.0   3 ./a.out  
  5.  5503 9.9   3 ./a.out  


通过上面结果可以看出   设置  cpu.rt_runtime_us   和  cpu.rt_period_us  可以 设置CPU的利用率上限,不会让某个进程或虚拟机占用过多的CPU资源。



转自:http://blog.csdn.net/XscKernel/article/details/12197469
阅读(1699) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~