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