技术解析
Hi ,我是 Zorro 。这是我的微博地址,我会不定期在这里更新文章,如果你有兴趣,可以来关注我呦。
本文有配套视频演示,一起服用效果更佳。
另外,我的其他联系方式:
Email: [email protected]
QQ: 30007147
今天我们来谈谈:
cgroups ,其名称源自控制组群( control groups )的简写,是 Linux 内核的一个功能,用来限制,控制与分离一个进程组群的资源(如 CPU 、内存、磁盘输入输出等)。
--引自维基百科:cgroup
引用官方说法总是那么冰冷的让人不好理解,所以我还是稍微解释一下:
一个正在运行着服务的计算机系统,跟我们高中上课的情景还是很相似的。如果把系统中的每个进程理解为一个同学的话,那么班主任就是操作系统的核心( kernel ),负责管理班里的同学。而 cgroup ,就是班主任控制学生行为的一种手段,所以,它起名叫 control groups 。
既然是一种控制手段,那么 cgroup 能控制什么呢?当然是资源啦!对于计算机来说,资源大概可以分成以下几个部分:
这就是我们常说的内核四大子系统。当我们学习内核的时候,我们也基本上是围绕这四大子系统进行研究。
我们今天要讨论的,主要是 cgroup 是如何对系统中的 CPU 资源进行隔离和分配的。其他资源的控制,我们以后有空再说喽。
由于进程和线程在 Linux 的 CPU 调度看来没啥区别,所以本文后续都会用进程这个名词来代表内核的调度对象,一般来讲也包括线程
如果要分配资源,我们必须先搞清楚这个资源是如何存在的,或者说是如何组织的。我想 CPU 大家都不陌生,我们都在系统中用过各种工具查看过 CPU 的使用率,比如说以下这个命令和它的输出:
[[email protected] ~]$ mpstat -P ALL 1 1
Linux 4.2.5-1-ARCH (zorrozou-pc0) 2015 年 12 月 22 日 _x86_64_ (4 CPU)mt
16 时 01 分 08 秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
16 时 01 分 09 秒 all 0.25 0.00 0.25 0.00 0.00 0.00 0.00 0.00 0.00 99.50
16 时 01 分 09 秒 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
16 时 01 分 09 秒 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
16 时 01 分 09 秒 2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
16 时 01 分 09 秒 3 0.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 99.00
Average: CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
Average: all 0.25 0.00 0.25 0.00 0.00 0.00 0.00 0.00 0.00 99.50
Average: 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
Average: 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
Average: 2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
Average: 3 0.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 99.00