限制memcg大小
使用memcg最常用的目的就是限制内存使用。这一节我们就来看看用户如何设置内存使用限制,下一节我们就来看看内核是如何做到对内存记账的。
memory.limit_in_bytes
在使用cgroup控制进程cpu和内存中我们已经看到,用户可以通过写memory.limit_in_bytes来限制memcg的大小。这里我们就来看看这个具体过程。
设置内存大小限制的逻辑还是比较简单的。用一句话来概括就是设置memcg->memory这个page_counter的max值。
如果设置最大值失败,也就是当前使用已经超过我们要设置的值,那么就会调用try_to_free_mem_cgroup_pages尝试直接回收一些内存,然后再试。
这部分确实挺简单的,恭喜你又掌握了一个知识点。
memory.soft_limit_in_bytes
和zone的水线对应,memcg也有一个“水线”的概念。但是相对来说简单许多,也就是只有一根线。当超过这条线内核就会尝试做内存回收。
从代码上看,设置软限制也相对简单的多。
但是这个soft limit的作用点相对较少,而且社区渐渐想要废弃这块的作用。
Last updated