cgroup--cpu spuset 子系统功能测试

Valarie ·
更新时间:2024-11-13
· 724 次阅读

  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.测试平台: ubuntu 11.10 3.0.0-26-generic-pae 4  Intel(R) Core(TM) i3-2310M CPU @ 2.10GHz   3.测试过程   挂载: mount -t tmpfs cgroup_root /sys/fs/cgroup mkdir /sys/fs/cgroup/cpuset mount -t cgroup -ocpuset cpuset /sys/fs/cgroup/cpuset   创建目录:   root@ubuntu:/sys/fs/cgroup/cpuset# mkdir tailor tinker   挂载 :   root@ubuntu:~# mount -t cgroup -o cpu none /sys/fs/cgroup/cpu   创建目录:   root@ubuntu:/sys/fs/cgroup/cpu# mkdir tailor tinker   启动两个测试程序:   sina@ubuntu:~$ ./a.out &   [2] 3944   sina@ubuntu:~$ ./a.out &   [2] 3945   将测试进程放到 cpu cpuset分支里面:   sina@ubuntu:/sys/fs/cgroup/cpuset/tinker$ echo 3944 > tasks   sina@ubuntu:/sys/fs/cgroup/cpuset/tailor$ echo 3945 > tasks   sina@ubuntu:/sys/fs/cgroup/cpu/tailor$ echo 3945 > tasks   sina@ubuntu:/sys/fs/cgroup/cpu/tinker$ echo 3944 > tasks   设置 cpu分支里面的 cpu.shares   [html] view plaincopy   sina@ubuntu:/sys/fs/cgroup/cpu/tailor$ echo 1024 > cpu.shares   sina@ubuntu:/sys/fs/cgroup/cpu/tinker$ echo 512 > cpu.shares   设置两个组的cpu affinity:   sina@ubuntu:/sys/fs/cgroup/cpuset/tailor$ echo 3 > cpuset.cpus   sina@ubuntu:/sys/fs/cgroup/cpuset/tinker$ echo 3 > cpuset.cpus   一段时间之后观察cpu使用率:(因为 内核调度等方面的原因,需要等待很久才能得到如下结果)

  root@ubuntu:~# ps -C a.out -opid,%cpu,psr,args   PID %CPU PSR COMMAND   3944 33.6   3 ./a.out   3945 66.4   3 ./a.out   再启动一个测试程序:   [html] view plaincopy   sina@ubuntu:~$ ./a.out &   [2] 5503   可观察到cpu使用率是 :   root@ubuntu:~# ps -C a.out -opid,%cpu,psr,args   PID %CPU PSR COMMAND   5503 99.6   1 ./a.out   仅将进程 5503 放到 cpu子系统中,一段时间后观察cpu使用率:   root@ubuntu:/sys/fs/cgroup/cpu/tailor# echo 5503 > tasks   可看到几乎没什么变化:(因为这个时候还没有设置 进程的cpu affinity 属性)   root@ubuntu:~# ps -C a.out -opid,%cpu,psr,args   PID %CPU PSR COMMAND   3944 33.6   3 ./a.out   3945 66.4   3 ./a.out   5503 99.6   1 ./a.out   再将进程 5503 放到 cpuset 子系统中,一段时间后观察cpu使用率:   root@ubuntu:/sys/fs/cgroup/cpuset/tailor# echo 5503 > tasks   root@ubuntu:~# ps -C a.out -opid,%cpu,psr,args   PID %CPU PSR COMMAND   3944 33.4   3 ./a.out   3945 33.3   3 ./a.out   5503 33.3  3 ./a.out   结论:从上面的测试结果可以看出,各个 cgroup 之间基本上能够按照 cpu.shares 设定的比例共享CPU资源,对于同一个cgroup中的一组进程则被公平的调度。   测试运用 cpu.rt_period_us 和 cpu.rt_runtime_us 来控制CPU资源的分配   [html] view plaincopy   root@ubuntu:/sys/fs/cgroup/cpu/tailor# echo 200000 > cpu.rt_runtime_us   一段时间之后观察 3 进程的cpu使用率:   root@ubuntu:~# ps -C a.out -opid,%cpu,psr,args   PID %CPU PSR COMMAND   3944 33.4   3 ./a.out   3945 10.0   3 ./a.out   5503 9.9   3 ./a.out   通过上面结果可以看出   设置  cpu.rt_runtime_us   和  cpu.rt_period_us  可以 设置CPU的利用率上限,不会让某个进程或虚拟机占用过多的CPU资源。



系统 功能测试 cgroup 测试

需要 登录 后方可回复, 如果你还没有账号请 注册新账号