一、cgroup目录结构深度解析
1.1 默认挂载点
1 | # cgroup v1的典型目录结构(子系统独立) |
1.2 核心目录说明
路径 | 作用描述 |
---|---|
/sys/fs/cgroup/ |
默认挂载根目录 |
cpu,cpuacct/ (v1) |
CPU资源控制与统计子系统 |
memory/ (v1) |
内存限制与统计 |
unified/ (v2) |
v2的统一控制目录,包含所有可用控制器 |
cgroup.procs |
当前cgroup包含的进程ID |
cgroup.controllers (v2) |
显示当前层级可用的控制器列表 |
cgroup.subtree_control (v2) |
控制子目录可用的控制器 |
二、cgroup子系统全解(v1/v2对比)
2.1 CPU控制类
cpu子系统(v1)
1 | /sys/fs/cgroup/cpu/ |
cpuacct子系统(v1)
1 | /sys/fs/cgroup/cpu,cpuacct/ |
v2的CPU控制
1 | /sys/fs/cgroup/unified/ |
2.2 内存控制类
memory子系统(v1)
1 | /sys/fs/cgroup/memory/ |
v2内存控制
1 | /sys/fs/cgroup/unified/ |
2.3 块设备I/O控制
blkio子系统(v1)
1 | /sys/fs/cgroup/blkio/ |
v2的IO控制
1 | /sys/fs/cgroup/unified/ |
2.4 其他关键子系统
devices(v1)
1 | /sys/fs/cgroup/devices/ |
freezer(v1/v2)
1 | /sys/fs/cgroup/freezer/ |
net_cls(v1)
1 | /sys/fs/cgroup/net_cls/ |
三、v1与v2的目录结构对比
3.1 v1的多层级结构
1 | /sys/fs/cgroup/ |
特点:
- 每个子系统独立层级
- 允许不同子系统组合挂载
- 结构复杂,存在资源竞争可能性
3.2 v2的统一层级
1 | /sys/fs/cgroup/ |
特点:
- 单一层级树结构
- 控制器必须统一启用
- 避免资源竞争,增强一致性
四、核心配置文件详解
4.1 v1的关键控制文件
文件路径 | 功能描述 |
---|---|
cpu.shares |
CPU时间片权重(默认1024) |
memory.kmem.limit_in_bytes |
内核内存限制(需要开启CONFIG_MEMCG_KMEM ) |
blkio.weight |
块设备I/O权重(100-1000) |
cpuset.cpus |
允许使用的CPU核心(如0-3,5) |
net_prio.ifpriomap |
设置网络接口优先级(eth0 5) |
4.2 v2新增关键文件
文件路径 | 功能描述 |
---|---|
cgroup.type |
显示cgroup类型(domain, threaded等) |
memory.reclaim |
手动触发内存回收(echo 1G > reclaim 回收1G内存) |
io.pressure |
显示I/O压力指标(avg60, avg300等) |
cpu.pressure |
CPU调度延迟压力信息 |
五、子系统组合使用示例
5.1 创建复合资源限制组(v1)
1 | # 创建同时限制CPU和内存的cgroup |
5.2 v2统一控制示例
1 | # 启用子目录的cpu和memory控制器 |
六、调试技巧:查看cgroup归属
1 | # 查看进程所属cgroup |
七、高级特性解析
7.1 内存压力通知(v2)
1 | # 监控内存压力事件 |
7.2 权重分配策略(v2)
1 | # 设置CPU权重(默认100) |