为什么实际内存使用量已经超过了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

posted @ 2017-11-15 09:01  honpey  阅读(2135)  评论(0编辑  收藏  举报