Linux CGroup
catalog
1. 引言 2. Cgroup安装配置 3. Cgroup使用方式 4. CGroup的子系统
1. 引言
我们已经讨论了Linux下命名空间(Namespace)的基本知识,详情请参阅另一篇文章
http://www.cnblogs.com/LittleHann/p/4026781.html //搜索:2. Linux命名空间
但是Namespace解决的问题主要是环境隔离的问题,这只是虚拟化中最最基础的一步,我们还需要解决对计算机资源使用上的隔离,例如
1. 进程使用的CPU 2. 进程使用的内存 3. 进程使用的磁盘空间等 //我们需要对进程进行资源利用上的限制或控制。这就是Linux Cgroup
Linux CGroup全称Linux Control Group, 是Linux内核的一个功能,用来限制,控制与分离一个进程组群的资源(如CPU、内存、磁盘输入输出等)。这个项目最早是由Google的工程师在2006年发起(主要是Paul Menage和Rohit Seth),最早的名称为进程容器(process containers)。在2007年时,因为在Linux内核中,容器(container)这个名词太过广泛,为避免混乱,被重命名为cgroup,并且被合并到2.6.24版的内核中去。然后,其它开始了他的发展
Linux CGroupCgroup 可让您为系统中所运行任务(进程)的用户定义组群分配资源 — 比如 CPU 时间、系统内存、网络带宽或者这些资源的组合。您可以监控您配置的 cgroup,拒绝 cgroup 访问某些资源,甚至在运行的系统中动态配置您的 cgroup,主要提供了如下功能
1. Resource limitation: 限制资源使用,比如内存使用上限以及文件系统的缓存限制 2. Prioritization: 优先级控制,比如:CPU利用和磁盘IO吞吐 3. Accounting: 一些审计或一些统计,主要目的是为了计费 4. Control: 挂起进程,恢复执行进程
使用 cgroup,系统管理员可更具体地控制对系统资源的分配、优先顺序、拒绝、管理和监控。可更好地根据任务和用户分配硬件资源,提高总体效率。
在实践中,系统管理员一般会利用CGroup做下面这些事(有点像为某个虚拟机分配资源似)
1. 隔离一个进程集合(比如:nginx的所有进程),并限制他们所消费的资源,比如绑定CPU的核 2. 为这组进程 分配其足够使用的内存 3. 为这组进程分配相应的网络带宽和磁盘存储限制 4. 限制访问某些设备(通过设置设备的白名单)
2. Cgroup安装配置
0x1: 安装cgroup
apt-get install cgroup-bin
Relevant Link:
3. Cgroup使用方式
0x1: 为cgroup分配限制的资源
Linux把CGroup这个事实现成了一个file system,管理员可以mount。在Ubuntu 14.04下,输入以下命令你就可以看到cgroup已经mount好了 //或者使用lssubsys命令 lssubsys -m cpuset /sys/fs/cgroup/cpuset cpu /sys/fs/cgroup/cpu cpuacct /sys/fs/cgroup/cpuacct memory /sys/fs/cgroup/memory devices /sys/fs/cgroup/devices freezer /sys/fs/cgroup/freezer blkio /sys/fs/cgroup/blkio perf_event /sys/fs/cgroup/perf_event hugetlb /sys/fs/cgroup/hugetlb
我们可以看到,在/sys/fs下有一个cgroup的目录,这个目录下还有很多子目录,比如: cpu,cpuset,memory,blkio……这些,这些都是cgroup的子系统。分别用于干不同的事的
首先明白下,是先挂载子系统,然后才有control group的
1. 如想限制某些进程的资源,那么,先挂载memory子系统 2. 然后在memory子系统中创建一个cgroup节点 3. 在这个节点中,将需要控制的进程id写入,并且将控制的属性写入
0x2: 查看cgroup的配置文件
cat /etc/cgconfig.conf //or lssubsys -m
看到memory子系统是挂载在目录/sys/fs/cgroup/memory
0x3: 使用Cgroup限制进程的CPU份额
deadloop.c
int main(void) { int i = 0; for(;;) i++; return 0; } //gcc deadloop.c -o deadloop
使用cgroup限制CPU使用资源
cd /sys/fs/cgroup/cpu/ mkdir just4fun cat /sys/fs/cgroup/cpu/just4fun/cpu.cfs_quota_us echo 20000 > /sys/fs/cgroup/cpu/just4fun/cpu.cfs_quota_us //把需要限制的进程添加到这个cgroup中 ps -ef | grep deadloop echo 1746 >> /sys/fs/cgroup/cpu/just4fun/tasks
Relevant Link:
http://www.cnblogs.com/yjf512/p/3298582.html http://coolshell.cn/articles/17049.html
4. CGroup的子系统
1. blkio — 这个子系统为块设备设定输入/输出限制,比如物理设备(磁盘,固态硬盘,USB 等等) 2. cpu — 这个子系统使用调度程序提供对 CPU 的 cgroup 任务访问 3. cpuacct — 这个子系统自动生成 cgroup 中任务所使用的 CPU 报告 4. cpuset — 这个子系统为 cgroup 中的任务分配独立 CPU(在多核系统)和内存节点 5. devices — 这个子系统可允许或者拒绝 cgroup 中的任务访问设备 6. freezer — 这个子系统挂起或者恢复 cgroup 中的任务 7. memory — 这个子系统设定 cgroup 中任务使用的内存限制,并自动生成内存资源使用报告 8. net_cls — 这个子系统使用等级识别符(classid)标记网络数据包,可允许 Linux 流量控制程序(tc)识别从具体 cgroup 中生成的数据包 9. net_prio — 这个子系统用来设计网络流量的优先级 10. hugetlb — 这个子系统主要针对于HugeTLB系统进行限制,这是一个大页文件系统
Copyright (c) 2015 LittleHann All rights reserved