Cgroups是control groups的缩写,是Linux内核提供的一种可以限制、记录、隔离进程组(process groups)所使用的物理资源(如:,,等等)的机制。最初由google的工程师提出,后来被整合进Linux内核。Cgroups也是为实现虚拟化所使用的资源管理手段.
Cgroups最初的目标是为资源管理提供的一个统一的框架,既整合现有的cpuset等子系统,也为未来开发新的
子系统提供接口。现在的cgroups适用于多种应用场景,从单个进程的资源控制,到实现操作系统层次的虚拟化(OS Level
Virtualization)。Cgroups提供了以下功能:
1.限制进程组可以使用的资源数量(Resource limiting )。比如:memory子系统可以为进程组设定一个memory使用上限,一旦进程组使用的内存达到限额再申请内存,就会出发OOM(out of memory)。
2.进程组的优先级控制(Prioritization )。比如:可以使用cpu子系统为某个进程组分配特定cpu share。
3.记录进程组使用的资源数量(Accounting )。比如:可以使用cpuacct子系统记录某个进程组使用的cpu时间
4.进程组隔离(Isolation)。比如:使用ns子系统可以使不同的进程组使用不同的,以达到隔离的目的,不同的进程组有各自的进程、网络、文件系统挂载空间。
5
.进程组控制(Control)。比如:使用freezer子系统可以将进程组挂起和恢复。
子系统介绍
blkio -- 这个子系统为块设备设定输入/输出限制,比如物理设备(磁盘,固态硬盘,USB 等等)。
cpu -- 这个子系统使用调度程序提供对 CPU 的 cgroup 任务访问。
cpuacct -- 这个子系统自动生成 cgroup 中任务所使用的 CPU 报告。
cpuset -- 这个子系统为 cgroup 中的任务分配独立 CPU(在多核系统)和内存节点。
devices -- 这个子系统可允许或者拒绝 cgroup 中的任务访问设备。
freezer -- 这个子系统挂起或者恢复 cgroup 中的任务。
memory -- 这个子系统设定 cgroup 中任务使用的内存限制,并自动生成由那些任务使用的内存资源报告。
net_cls -- 这个子系统使用等级识别符(classid)标记网络数据包,可允许 Linux 流量控制程序(tc)识别从具体 cgroup 中生成的数据包。
ns -- 名称空间子系统。
Linux release version include package libcgroup.
/bin/cgclassify --
/bin/cgcreatexx --创建一个自定义的cgroup like : cgcreate -g cpu,net_cls:/test-subgroup
/bin/cgdelete -- 删除cgroup Usage is cgdelete [-r] : [...]
/bin/cgexec
/bin/cgget
/bin/cgset
/bin/lscgroup --显示所有的cgroup
/bin/lssubsys
/cgroup
/etc/cgconfig.conf
/etc/cgrules.conf
/etc/rc.d/init.d/cgconfig
/etc/rc.d/init.d/cgred
/etc/sysconfig/cgconfig
/etc/sysconfig/cgred.conf
/lib/libcgroup.so.1
/lib/libcgroup.so.1.0.35
/sbin/cgclear
/sbin/cgconfigparser
/sbin/cgrulesengd
kernel.org :include/linux/cgroup.h
A css_set is a structure holding pointers to a set of cgroup_subsys_state objects. This saves space in the task struct object and speeds up fork()/exit(), since a single inc/dec and a list_add()/del() can bump the reference count on the entire cgroup set for a task.
css_set 结构体
cgroups.txt 文件
控制组提供设置任务聚合和分离的一种机制,所有他们子进程特殊行为进行分配到分级的组中。
一个Cgroup分配额
多种有效的提供聚合过程中 Linux内核,主要用于资源跟踪的目的。
阅读(1136) | 评论(0) | 转发(0) |