cgroup 的全称是control group.是linux中用来限制,隔离任务(进程)所使用物理资源的技术。其对进程的限制主要体如今如下方面:css
Resource limiation:限制CPU,内存等资源的使用html
Prioritization:控制优先级node
Accounting:审计和统计linux
Control:挂起,恢复进程等架构
其以file system的方式提供使用,在使用时,须要先mount cgroup 文件系统,并在mount时指定须要挂载的子系统。CentOS 默认启动已经开启cgroup.可使用mount 命令查看当前系统cgroup挂载信息:ui
上图中一样列出了subsystem的种类,linux中子系统分为如下几类,能够查看/proc/cgroups查看支持的子系统。
[root@localhost ~]# cat /proc/cgroupsspa
#subsys_name hierarchy num_cgroups enabled cpuset 2 1 1 cpu 7 1 1 cpuacct 7 1 1 memory 10 1 1 devices 3 1 1 freezer 9 1 1 net_cls 4 1 1 blkio 8 1 1 perf_event 6 1 1 hugetlb 5 1 1
cpu//cpu的调度策略
cpuset//用来限制可以使用的cpu和内存节点
cpuacct// not clear
memory//内存大小限制
blkio//输入输出限制
devices//可访问的设备
net_cls// not clear
freezer// not clearcode
须要打开某项subsystem,mount相应的subsystem 就能够了:htm
mount -t cgroup -o cpu,cpuset cgroup /cgroup/cpu //mount [-t vfstype] [-o options] device dir
这边的device参数能够变更,系统默认的参数是cgroup, 正如上图所示系统各个subsystem都是以cgroup mount.上处的命令也能够写成blog
#mount -t cgroup -o cpu test /cgroup/ #mount | grep cpu #cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset) #test on /cgroup type cgroup (rw,relatime,cpu)
这样,咱们就可使用挂载的子系统了。
cgroup以filesystem的方式提供服务,在挂载的目录下,mkdir可建立新的cgroup,rmdir可删除cgroup(不能直接rm).
先看图:
图片来自:http://www.cnblogs.com/yjf512...
按照资源的划分,系统被划分红了不一样的子系统(subsystem),正如咱们上面列出的cpu, cpuset, blkio...每种资源独立构成一个subsystem.
能够将cgroup的架构抽象的理解为多根的树结构,一个hierarchy表明一棵树,树上绑定一个或多个subsystem.而树的叶子则是cgroup,一个cgroup具体的限制了某种资源。一个或多个cgroup组成一个css_set。简单来说,就是一个资源限制集合(css_set)对一种subsystem(cpu,devices)的限制条件只能有一个,这是显然的吧...最终的task(进程)同css_set关联,从而达到限制资源的目的。具体cgroup和css_set 关联的方式,放在后面讲。
常见的4个
task(任务):cgroups的术语中,task就表示系统的一个进程。
cgroup(控制组):cgroups 中的资源控制都以cgroup为单位实现。cgroup表示按某种资源控制标准划分而成的任务组,包含一个或多个子系统。一个任务能够加入某个cgroup,也能够从某个cgroup迁移到另一个cgroup。
subsystem(子系统):cgroups中的subsystem就是一个资源调度控制器(Resource Controller)。好比CPU子系统能够控制CPU时间分配,内存子系统能够限制cgroup内存使用量。
hierarchy(层级树):hierarchy由一系列cgroup以一个树状结构排列而成,每一个hierarchy经过绑定对应的subsystem进行资源调度。hierarchy中的cgroup节点能够包含零或多个子节点,子节点继承父节点的属性。整个系统能够有多个hierarchy。
另外整理的:
css_set:一组关联cgroup的集合。
cgroupfs_root:表明一个hierarchy
cgroup_subsys:表明一个subsystem
subsystem和hierarchy绑定的限制关系:
限定1. 一个hierarchy上能够绑定一个或者多个subsystem.例如 cpu & memory 绑定到了同一个hierarchy
限定2. 一个subsystem不能从某个hierarchy解绑而后绑定到其余的hierarchy 上。 可是当且仅当这些hirearchy的subsystem相同时能够绑定,能够理解为给hierarchy起了别名。(subsystem不能出如今不一样的hierarchy上,可是你拷贝了一个hierarchy则是能够的)。
限定3. 建立一个hierarchy的时候,系统全部css_set都会和此hierarchy的root cgroup关联。也就至关于全部的task都和root cgroup关联。可是在同一个hierarchy中,一个css_set只能和一个cgroup关联。
限定4. fork子进程的时候父子进程在同一个cgroup.可是后续能够修改。
这里只要对cgroup大概的层次结构了解就能够了,其中subsystem,hierarchy,cgroup的详细组织关系,留在下节说明。