cgroup v2使用与测试
1. 配置cgroup v2的环境
- 判断内核使用的cgroup版本
$ mount | grep cgroup
cgroup2 on /sys/fs/cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime,nsdelegate)
tmpfs on /usr/local/aegis/cgroup type tmpfs (rw,relatime,size=51200k)
cgroup on /usr/local/aegis/cgroup/cpu type cgroup (rw,relatime,cpu)
如果输出只有cgroup,说明内核还未挂载cgroup v2或者内核不支持cgroup v2
- 判断内核是否支持cgroup v2
$ cat /proc/filesystems | grep cgroup
nodev cgroup
nodev cgroup2
出现了cgroup v2说明内核是支持的,可以继续接下来的操作
- 挂载cgroup v2
对于使用 systemd 引导的系统,可以在引导文件 /etc/default/grub 的GRUB_CMDLINE_LINUX_DEFAULT中添加如下一行,启用 v2 版本
“systemd.unified_cgroup_hierarchy=yes”
$ sudo vim /etc/default/grub
添加:GRUB_CMDLINE_LINUX_DEFAULT="systemd.unified_cgroup_hierarchy=yes"
$ sudo grub-mkconfig -o /boot/grub/grub.cfg
$ reboot
可以使用cgroup_no_v1 = allows防止cgroup v1抢占所有controller,体验纯cgroup v2环境
最后再进行重启,就可以使用cgroup v2了
2. 初探cgroup v2
查看cgroup2的目录树结构
$ ls /sys/fs/cgroup
cgroup.controllers cpuset.mems.effective memory.idle_page_stats.local
cgroup.max.depth cpu.stat memory.numa_stat
cgroup.max.descendants init.scope memory.pressure
cgroup.procs io.cost.model memory.reap_background
cgroup.stat io.cost.qos memory.stat
cgroup.subtree_control io.pressure memory.use_priority_oom
cgroup.threads io.stat memory.use_priority_swap
cpu.pressure memory.fast_copy_mm system.slice
cpuset.cpus.effective memory.idle_page_stats user.slice
相比于cgroup v1,v2的目录则显得直接很多,毕竟如果将cgroup v1比作森林的话,cgroup v2就只是一颗参天大树
查看cgroup2可管理的系统资源类型
$ cat cgroup.controllers
cpuset cpu io memory hugetlb pids rdma
查看cgroup2开启的控制器
$ cat cgroup.subtree_control
cpuset cpu io memory pids
在root cgroup下创建一个cgroup
$ mkdir cgrp2test
$ ls cgrp2test
cgroup.controllers cpu.weight.nice memory.pressure
cgroup.events io.bfq.weight memory.priority
cgroup.freeze io.latency memory.reap_background
cgroup.max.depth io.max memory.stat
cgroup.max.descendants io.pressure memory.swap.current
cgroup.procs io.stat memory.swap.events
cgroup.stat io.weight memory.swap.high
cgroup.subtree_control memory.current memory.swap.max
cgroup.threads memory.events memory.use_priority_oom
cgroup.type memory.events.local memory.use_priority_swap
cpu.max memory.fast_copy_mm memory.wmark_high
cpu.pressure memory.high memory.wmark_low
cpuset.cpus memory.idle_page_stats memory.wmark_ratio
cpuset.cpus.effective memory.idle_page_stats.local memory.wmark_scale_factor
cpuset.cpus.partition memory.low pids.current
cpuset.mems memory.max pids.events
cpuset.mems.effective memory.min pids.max
cpu.stat memory.numa_stat
cpu.weight memory.oom.group
查看cgrp2test可用的控制器
$ cat cgroup.controllers
cpuset cpu io memory pids
每个child cgroup不会继承其父母的控制器,只有在父节点cgroup.subtree_control显式配置开启的控制器才能在child cgroup中使用。目前cgrp2test可以对cpuset, cpu, io, memroy, pids这些资源进行限制
对cgroup添加cpu资源限制<

本文详细介绍cgroupv2的配置方法与测试流程,并通过实例演示如何管理与限制进程资源,包括CPU周期与内存分配等。
最低0.47元/天 解锁文章
1239

被折叠的 条评论
为什么被折叠?



