為什么實際內存使用量已經超過了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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM