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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值