Re: [PATCH memcg 3/3] memcg: handle memcg oom failures
From: Michal Hocko <mhocko@suse.com>
Date: 2021-10-20 13:02:23
Also in:
linux-mm, lkml
On Wed 20-10-21 15:14:27, Vasily Averin wrote:
mem_cgroup_oom() can fail if current task was marked unkillable and oom killer cannot find any victim. Currently we force memcg charge for such allocations, however it allow memcg-limited userspace task in to overuse assigned limits and potentially trigger the global memory shortage.
You should really go into more details whether that is a practical problem to handle. OOM_FAILED means that the memcg oom killer couldn't find any oom victim so it cannot help with a forward progress. There are not that many situations when that can happen. Naming that would be really useful.
Let's fail the memory charge in such cases. This failure should be somehow recognised in #PF context,
explain why
so let's use current->memcg_in_oom == (struct mem_cgroup *)OOM_FAILED
ToDo: what is the best way to notify pagefault_out_of_memory() about
mem_cgroup_out_of_memory failure ?why don't you simply remove out_of_memory from pagefault_out_of_memory and leave it only with the blocking memcg OOM handling? Wouldn't that be a more generic solution? Your first patch already goes that way partially. This change is more risky than the first one. If somebody returns VM_FAULT_OOM without invoking allocator then it can loop for ever but invoking OOM killer in such a situation is equally wrong as the oom killer cannot really help, right? -- Michal Hocko SUSE Labs