对memcg记账
既然是要限制内存使用,自然需要一个办法来对内存使用记账。也就是将内存的消耗对应到memcg,这样才有可能知道内存是否超过限制并采取行动。
两个入口
经过调研,当前内核5.17一共有两个对外的入口做memcg记账
mem_cgroup_charge
mem_cgroup_swapin_charge_page
前者是在做page fault时,而后者是在swapin时。别看就这两个入口,但在内核里要找全安插这两个入口的点可真是不容易。没有对内核全面的了解,真是做不到。所以在现在内核的框架下,能统一这个入口是不是也是一个改进方向呢?
核心函数 charge_memcg
不论是从哪个入口对memcg做记账,都会调用到函数charge_memcg()。
简单来说就是尝试用page_counter_try_charge()做记账,如果没成功就用try_to_free_mem_cgroup_pages()或者mem_cgroup_oom()回收一些资源然后再尝试。
Last updated