CGroup原理篇V1十一Memory子系统(Memcg)实现备忘录

Posted 高桐@BILL

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CGroup原理篇V1十一Memory子系统(Memcg)实现备忘录相关的知识,希望对你有一定的参考价值。

写在前面

因为VM非常复杂(memcg就是其中一个原因)。memcg的行为也很复杂。这个文档描述了memcg的内部行为。该文档基于Linux 2.6.33-rc7-mm,所以其实现细节随着版本的发展可能会有改变。

一、如何记录使用情况?

常常使用下面的两个对象:

  • page_cgroup:每个页的对象

在启动或者内存热插拔时分配。在内存热卸载时释放。

  • swap_cgroup:每个swp_entry条目

swapon()分配,swapoff()释放。

page_cgroup具有 USED 位,并且对page_cgroup进行双重计数,但从未发生过。当管理的页面被换出时,swap_cgroup才被使用。

二、Charge(记录?)

一个page或swp_entry可能通过mem_cgroup_try_charge() (usage += PAGE_SIZE)被记录。

三、Uncharge(解除?)

一个page或swp_entry通过下面的函数被解除(usage -= PAGE_SIZE)

  • mem_cgroup_uncharge()

当页的引用计数为0时调用。

  • mem_cgroup_uncharge_swap()

当swp_entry的引用计数为0时调用。

四、charge-commit-cancel

memcg页通过下面两种方法记录:

  • mem_cgroup_try_charge()

try_charge()即usag

以上是关于CGroup原理篇V1十一Memory子系统(Memcg)实现备忘录的主要内容,如果未能解决你的问题,请参考以下文章

CGroup原理篇V1七CPUSET子系统

CGroup原理篇V1十HugeTLB子系统

CGroup原理篇V1五BLKIO子系统

CGroup原理篇V1十四NET_PRIO子系统

cgroup 原理分析

CGroup原理篇V11.2 CGroup的用法