如前文所述,memcg的整体框架如下:
对于memcg,作为一个cgroup的subsystem,它遵循hierarchy的所有规则,另外,对于hierarchy中cgroup的层级对memcg管理规则的影响,主要分两方面:
1、 如果不启用hierarchy,即mem_cgroup->use_hierarchy =false,则所有的memcg之间都是互相独立,互不影响的,即使是父子cgroup之间,也跟两个单独创建的cgroup一样。
2、 如果启用hierarchy,即mem_cgroup->use_hierarchy =true,则memcg的统计需要考虑hierarchy中的层级关系,其影响因素主要有:
a. Charge/uncharge如果子cgroup中charge/uncharge了一个page,则其父cgroup和所有祖先cgroup都要charge/uncharge该page。
b. Reclaim因为父cgroup的统计中包含了所有子cgroup中charge的page,所以在回收父cgroup中使用的内存时,也可以回收子cgroup中进程使用的内存。
c. Oom因为父cgroup的统计中包含了所有子cgroup中charge的page,所以如果父cgroup需要出发oom,则oom可以考虑杀死子cgroup中的进程,达到释放内存的效果。
前面已经讲过初始化cgroup的基本流程,下面将初始化过程中文件目录以及节点的