On Tue 26-11-19 08:02:49, Yafang Shao wrote: > There's one case that the processes in a memcg are all exit (due to OOM > group or some other reasons), but the file page caches are still exist. > These file page caches may be protected by memory.min so can't be > reclaimed. If we can't success to restart the processes in this memcg or > don't want to make this memcg offline, then we want to drop the file page > caches. > The advantage of droping this file caches is it can avoid the reclaimer > (either kswapd or direct) scanning and reclaiming pages from all memcgs > exist in this system, because currently the reclaimer will fairly reclaim > pages from all memcgs if the system is under memory pressure. > The possible method to drop these file page caches is setting the > hard limit of this memcg to 0. Unfortunately this may invoke the OOM killer > and generates lots of misleading outputs, that should not happen. I disagree that the output is misleading. Quite contrary, it provides a useful lead on the unreclaimable memory. > One misleading output is "Out of memory and no killable processes...", > while really there is no tasks rather than no killable tasks. Again, this is nothing misleading. No task is a trivial subset of no killable task. I do not see why we should treat one differently than the other. > Furthermore, > the OOM output is not expected by the admin if he or she only wants to drop > the cahes and knows there're no processes running in this memcg. But this is not what hard limit reduced to 0 really does. No matter whether there is some task or not. It simply reclaims _all_ the memory as explained in other email. > If memcg is not populated, we should not invoke the OOM killer. I have already explained why I believe this is not correct in other email and this description doesn't provide any real justification. It is merely your intepretation of what should happen and I believe you haven't thought through it really. > Fixes: b6e6edcf ("mm: memcontrol: reclaim and OOM kill when shrinking memory.max below usage") > Signed-off-by: Yafang Shao <laoar.shao@xxxxxxxxx> > Cc: Johannes Weiner <hannes@xxxxxxxxxxx> > Cc: Michal Hocko <mhocko@xxxxxxxx> > --- > mm/memcontrol.c | 8 ++++++-- > 1 file changed, 6 insertions(+), 2 deletions(-) > > diff --git a/mm/memcontrol.c b/mm/memcontrol.c > index 1c4c08b..4e08905 100644 > --- a/mm/memcontrol.c > +++ b/mm/memcontrol.c > @@ -6139,9 +6139,13 @@ static ssize_t memory_max_write(struct kernfs_open_file *of, > continue; > } > > - memcg_memory_event(memcg, MEMCG_OOM); > - if (!mem_cgroup_out_of_memory(memcg, GFP_KERNEL, 0)) > + if (cgroup_is_populated(memcg->css.cgroup)) { > + memcg_memory_event(memcg, MEMCG_OOM); > + if (!mem_cgroup_out_of_memory(memcg, GFP_KERNEL, 0)) > + break; > + } else { > break; > + } > } > > memcg_wb_domain_size_changed(memcg); > -- > 1.8.3.1 -- Michal Hocko SUSE Labs