为什么实际内存使用量已经超过了memory.soft_limit_in_bytes,但是并没有立即触发try_to_free_pages in try_charge
kswapd发起的回收过程汇总会通过cgroup的excessed树进行回收,但是这个kwap都是啥时候被唤醒呢?为啥不是mem_cgroup_soft_limit_reclaim
发现在内核在在:page_counter_try_charge中的page_counter_try_charge中已经把page给接受了,除非memcg->memory->limit设置了,只有这个时候内存才被会直接回收,如果没有设置memory.limit_in_bytes,那么这里就不会设置就不会走到下面的直接回收的过程!不过话说回来,这里的memsw又是啥
1902 if (!do_memsw_account() || 1903 page_counter_try_charge(&memcg->memsw, batch, &counter)) { /* 把batch加入到memcg->memsw是干嘛呀 */ 1904 if (page_counter_try_charge(&memcg->memory, batch, &counter)) /* 会讲其charge到父进程中去?*/ 1905 goto done_restock; 1906 if (do_memsw_account()) 1907 page_counter_uncharge(&memcg->memsw, batch); 1908 mem_over_limit = mem_cgroup_from_counter(counter, memory); 1909 } else { 1910 mem_over_limit = mem_cgroup_from_counter(counter, memsw);
memsw在代码中号称是legacy consumer-oriented counters 【老版本留下的用户导向的计数器】
这里有空再查吧,不是什么大事情,那么soft_limit到底是在哪里控制的呢?超过了soft_limit,会触发啥
page_counter_limit