cgroup的机制理解

cgroups(Control Groups)

看了一些cgroup的描述,总觉得写得有些云山雾罩的,今天找了原文看了一遍,用自己的理解总结一遍。

在新的Linux Kernel中,将CPU time, Memory, Network bandwidth, 磁盘I/O等称为子系统(subsystems), 在Linux中执行lscgroup可见当前可用的子系统有哪些(其实是一种资源对应了一颗cgroup树):

cgroup中资源控制器或简称控制器与子系统指的都是同一回事儿; 所谓的任务就是我们熟知的系统进程。

cgroup hierarchy(cgroup层级)----我称为cgroup树

如下图所示,创建了一个控制组,命名为CPU_MEM_cgroup,这个cgroup对子系统CPU和Memory进行管控。为了实现不同资源配比限制,在CPU_MEM_cgroup下,我们创建了两个子cgroup: group1限制CPU利用率不超过20%, 最大可用内存1024M; group2限制CPU使用率不超过30%, 最大可用内存2048M。

cgroup的机制理解

CPU_MEM_cgroup与group1, group2就形成了层级(一颗倒挂的树),我们还可以进一步划分层级,每个子cgroup会继承其父cgroup的一些属性(如挂接的哪些资源-----子系统等)。

与Linux上仅有可一颗进程树(即Linux下所有的进程都是init进程衍生而来,或者说所有进程都能追溯到root进程init)相比, cgroup会有很多颗相互没有关联的树(这个所谓没有关联在下面细说)。

换句话说,子系统、cgroups层级与任务之间存在如下一些规则:

规则1: 一个cgroup树能挂接一个或者多个子系统(资源)

如,CPU这个资源不能同时属于CPU_MEM_cgroup(管理着CPU和Memory分配)和另一个CPU_BLKIO_cgroup(意图管理CPU和块设备)。

规则2:一个子系统(资源,如CPU)已经挂接在某一颗cgroup树时,不能再挂接到另一颗已经挂接了其它不同类型资源的cgroup树上。

注意: CPU这子系统可以同时挂接在两颗cgroup树的前提条件是,仅当这两颗cgroup树只挂接了CPU这一种资源(即两颗树都只关心CPU这一种资源的使用控制)

cgroup的机制理解

规则3:每当一颗cgroup树创建时,系统中所有的任务(进程)默认都是其root cgroup(即树的根节点)成员。你可以将某一个任务划拨到树下的某一个分支节点上。

cgroup的机制理解

一个任务可以被分配到多个cgroup中去,只要这些cgroup从属于不同的cgroup树。一旦,一个任务在一颗cgroup树的一个节点划拨到这颗树的另一个cgroup节点时,它就不再属于这颗树的上一个节点。换句话说,一个桃子只能由一颗树的一个分支孕育,但不排斥另一颗树的某个枝丫横插一脚,只要这两棵树没有血缘关系。

cgroup的机制理解

规则4:任何进程生孩子(fork创建子进程)时,孩子自动的继承父亲的cgroup从属关系(待在同一个窝里),但孩子可以根据需要指定到其它的cgroup节点中去,一旦fork, 父进程和子进程在cgroup看来是两个完全独立的个体。

资源管理上的潜规则:

展开阅读全文

页面更新:2024-05-23

标签:多核   报文   层级   子系统   节点   磁盘   分支   控制器   进程   权限   机制   内存   规则   设备   系统   资源   科技

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top