cgroup实践

1. 安装cgroup

使用yum安装:yum install libcgroup 

CentOS7系统需要安装libcgroup-tools包,才有cgroup配置命令 yum install -y libcgroup-tools.x86_64 

2. 创建group

cgcreate -g cpuset:test_1  //创建名称为test_1的group,在目录/sys/fs/cgroup/cpuset下可看到test_1目录,进入后看到多个文件

3. 修改cpuset.cpus的设定,将属于该策略的所有进程都绑定到cpu的第23个core去执行
root@litrin-de-xubuntu:/sys/fs/cgroup/cpuset# cd /sys/fs/cgroup/cpuset/test_1/
root@litrin-de-xubuntu:/sys/fs/cgroup/cpuset/test_1# echo 23 > cpuset.cpus
root@litrin-de-xubuntu:/sys/fs/cgroup/cpuset/test_1# cat cpuset.cpus
23
4. 使用test_1策略执行进程
root@litrin-de-xubuntu:/sys/fs/cgroup/cpuset/test_1# cgexec -g cpuset:test_1 sleep 1

5. 若提示
cgroup change of group failed

开始我以为我自己打开的方法不对,google了一下发现redhat,suse,arch,debian的社区都有类似的bug汇报。最终找到了Redhat官方的cgroup解释:

Some subsystems have mandatory parameters that must be set before you can move a task into a cgroup which uses any of those subsystems. For example, before you move a task into a cgroup which uses the cpuset subsystem, the cpuset.cpus and cpuset.mems parameters must be defined for that cgroup.

作为CPUset策略生效的必要条件,cpus和Mems必须强制指定。cpus是指进程被绑定的内核,而Mems则表示cpu的NUMA内存节点。

问题找到了,解决就很简单了:

root@litrin-de-xubuntu:/sys/fs/cgroup/cpuset/test_1# echo 0-1 > cpuset.mems
root@litrin-de-xubuntu:/sys/fs/cgroup/cpuset/test_1# cgexec -g cpuset:test_1  xxx

猜你喜欢

转载自www.cnblogs.com/jiaohenghao/p/9063629.html