使用cgroup限制CPU核数

在性能测试的时候,有的时候需要限制CPU为指定核数,我们很容易想到docker,其实还可以通过cgroup来实现。

关于cgroup

cgroups全称control groups,是Linux内核提供的物理资源隔离机制,通过这种机制,可以实现对Linux进程或者进程组的资源限制、隔离和统计功能。比如可以通过cgroup限制特定进程的资源使用,比如使用特定数目的cpu核数和特定大小的内存,如果资源超限的情况下,会被暂停或者杀掉。

cgroup 和 namespace类似,也是将进程进行分组,但它的目的和namespace不一样,namespace 是为了隔离进程组之间的资源,而cgroup是为了对一组进程进行统一的资源监控和限制。.

限制CPU核数的方法

操作步骤如下:

进入/sys/fs/cgroup/cpuset目录。创建一个新的文件夹,文件夹的名字即为控制组的名字,比如tiger,

[root@mdw tiger]# pwd
/sys/fs/cgroup/cpuset/tiger
[root@mdw tiger]# ls
cgroup.clone_children  cpuset.memory_pressure
cgroup.procs           cpuset.memory_spread_page
cpuset.cpu_exclusive   cpuset.memory_spread_slab
cpuset.cpus            cpuset.mems
cpuset.effective_cpus  cpuset.sched_load_balance
cpuset.effective_mems  cpuset.sched_relax_domain_level
cpuset.mem_exclusive   notify_on_release
cpuset.mem_hardwall    tasks
cpuset.memory_migrate

先修改cpuset.mems,

[root@mdw tiger]# echo 0 > cpuset.mems

不然的话会报write error: No space left on device错误。

然后修改cpuset.cpus具体的CPU核数,比如限制使用32个核,

[root@mdw tiger]# cat cpuset.cpus 
0-31

限制好后,需将将具体限制的进程写入cgroup.procs文件中

比如4462进程,echo 4462 > cgroup.procs即可。

进程fork的子进程会自动加人到cgroup.procs中,进程结束后,会从cgroup.procs中移除。

如果进程还没有结束,怎么移除限制呢?直接删是删不掉的,方法是将这个tiger/cgroup.procs中的进程ID重写到上级sys/fs/cgroup/cpuset/cgroup.procs中既可以从`sys/fs/cgroup/

cpuset/tiger/cgroup.procs`中移除限制。

posted @ 2023-01-16 10:51  起司24  阅读(1863)  评论(0编辑  收藏  举报