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

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
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
再启动一个测试程序:
sina@ubuntu:~$ ./a.out &
[2] 5503


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

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资源的分配

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资源。


<think>好的,我现在需要帮助用户理解Linux中mount命令使用-t cgroup-o cpu参数的作用和用途。首先,我得回忆一下mount命令的基本用法,它通常用于挂载文件系统。而这里的-t选项指定文件系统类型,这里用的是cgroup,所以应该与控制组(cgroups)相关。 接下来是-o选项,这里指定了cpu,可能是指挂载cgroup时启用CPU相关的子系统Cgroups是Linux内核的一个功能,用于资源限制、控制和统计。每个子系统(如cpu、memory)负责不同的资源管理。用户的问题可能涉及到如何通过挂载cgroup来管理CPU资源。 我需要确认cgroup v1和v2的区别。在v1中,每个子系统可以独立挂载,而v2中有一个统一的层级结构。用户提到的选项可能在v1中使用,因为v2可能不需要指定子系统。例如,使用命令mount -t cgroup -o cpu cgroup /sys/fs/cgroup/cpu会将cpu子系统挂载到指定目录,这样就能通过该目录下的文件配置CPU资源限制。 然后,我需要解释这些参数的具体作用。-t cgroup告诉系统挂载的是cgroup文件系统类型,-o cpu指定了要关联的CPU子系统。这样挂载后,用户可以在该目录下创建子cgroup,设置cpu.shares或cpu.cfs_quota_us等参数来限制进程组的CPU使用。 可能还需要举例说明如何使用,比如创建子目录,写入数值到相关文件,以及如何应用。同时要注意权限问题,通常需要root权限才能执行这些操作。 另外,用户可能想知道实际应用场景,比如在容器技术中(如Docker)如何利用cgroups进行资源管理,或者性能测试时如何限制CPU使用率。这时候可以引用相关文档或资料,但根据用户提供的引用,可能没有直接相关的,所以需要依靠自己的知识库。 最后,生成相关问题时要考虑用户可能的进一步疑问,比如如何查看已挂载的cgroup,其他子系统的作用,或者cgroup v2的变化。确保问题覆盖基本使用、配置和实际应用,帮助用户深入理解。</think>### Mount命令中`-t cgroup`和`-o cpu`参数的作用及用途 #### 1. `mount -t cgroup`的作用 `-t cgroup`用于挂载Linux内核的**控制组(cgroups)文件系统**。cgroups是Linux内核提供的资源管理机制,可对进程组进行资源(如CPU、内存、I/O等)的分配、限制和统计[^3]。挂载cgroup文件系统后,可通过目录和文件的形式配置资源控制策略。 #### 2. `-o cpu`的用途 `-o cpu`指定挂载cgroup时关联**CPU子系统**,用于对进程组的CPU资源进行管理。例如: ```bash mount -t cgroup -o cpu cgroup /sys/fs/cgroup/cpu ``` 此命令将CPU子系统挂载到`/sys/fs/cgroup/cpu`目录,允许通过该目录下的文件(如`cpu.shares`、`cpu.cfs_quota_us`)配置CPU分配策略[^3]。 #### 3. 典型应用场景 - **限制进程组的CPU使用量** 在挂载的目录下创建子cgroup目录(如`/sys/fs/cgroup/cpu/myapp`),并向`cpu.cfs_quota_us`写入数值,设置进程组的CPU时间上限。例如: ```bash echo 50000 > /sys/fs/cgroup/cpu/myapp/cpu.cfs_quota_us # 限制为50% CPU ``` - **优先级分配** 通过`cpu.shares`文件设置进程组的CPU权重(默认1024),实现按比例分配CPU时间。 #### 4. 版本差异注意 - **cgroup v1**:每个子系统(如cpu、memory)需单独挂载。 - **cgroup v2**:统一层级结构,不再需要单独指定子系统。若使用`-o cpu`可能触发兼容性警告。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值