memcg初始化
作为cgroup的一个子系统,自然在初始化时需要遵照cgroup的框架。所以我们先来回顾一下cgroup的框架。
其中 ss 是 memory_cgrp_subsys,那么对应调用的函数就是
css_alloc = mem_cgroup_css_alloc
css_online = mem_cgroup_css_online
这两个函数除了mem_cgroup_css_online中有一个周期性刷新状态的“工作”,其余做的工作比较直白。
所以初始化的过程没有什么神秘的,但是我们借此机会看一眼memcg的数据结构。mem_cgroup_css_alloc分配的数据结构是mem_cgroup。
这个结构体很长,我把重要的部分分类出来。
对其中的含义做个大致的解释:
memory/swap/memsw/kmem/tcpmem 保存了用户设置的限额和当前使用额度
thresholds/memsw_thresholds保存了eventfs相关的水线
vmstats/vmstats_percpu保存了页的统计数据
nodeinf主要和页回收相关
说到这里再提一点,page_counter里自己还保存了一个树形结构。这个结构和cgroup形成的树形结构是一致的。这或许是一个遗留问题。
Last updated