简介
Cgroup 可让您为系统中所运行任务(进程)的用户定义组群分配资源 – 比如 CPU 时间、系统内存、网络带宽或者这些资源的组合。您可以监控您配置的 cgroup,拒绝 cgroup 访问某些资源,甚至在运行的系统中动态配置您的 cgroup。
子系统subsystems
在本机Ubuntu 14.04中有如下子系统
root@wsqvm:/sys/fs/cgroup# ls
blkio devices net_cls,net_prio
cpu freezer net_prio
cpuacct hugetlb perf_event
cpu,cpuacct memory systemd
cpuset net_cls
介绍几个重要的子系统
blkio
– 这个子系统为块设备设定输入/输出限制,比如物理设备(磁盘,固态硬盘,USB 等等)。cpu
– 这个子系统使用调度程序提供对 CPU 的 cgroup 任务访问。cpuacct
– 这个子系统自动生成 cgroup 中任务所使用的 CPU 报告。cpuset
– 这个子系统为 cgroup 中的任务分配独立 CPU(在多核系统)和内存节点。devices
– 这个子系统可允许或者拒绝 cgroup 中的任务访问设备。freezer
– 这个子系统挂起或者恢复 cgroup 中的任务。memory
– 这个子系统设定 cgroup 中任务使用的内存限制,并自动生成由那些任务使用的内存资源报告。net_cls
– 这个子系统使用等级识别符(classid)标记网络数据包,可允许 Linux 流量控制程序(tc)识别从具体 cgroup 中生成的数据包。ns
– 名称空间namespace子系统
层级 hierarchies
Rule 1: 单个层次结构可以具有一个或多个附属的子系统。
如图,/cpu_mem_cg
这个层级对cg1 cg2设置了cpu
和memory
两个子系统.
Rule 2: 如果任何一个子系统(例如cpu)已经附加了一个层次,则不能将它们附加到另一个层次结构中。
如图层级A的cpu_cg
首先管理了cpu
子系统 ,那么层级B的cpu_mem_cg
就无法管理cpu
子系统