From: David Rientjes <rientjes@google.com>
To: Tetsuo Handa <penguin-kernel@i-love.sakura.ne.jp>
Cc: Michal Hocko <mhocko@suse.com>,
Andrew Morton <akpm@linux-foundation.org>,
linux-kernel@vger.kernel.org, linux-mm@kvack.org
Subject: Re: [rfc patch] mm, oom: fix unnecessary killing of additional processes
Date: Fri, 25 May 2018 12:44:27 -0700 (PDT) [thread overview]
Message-ID: <alpine.DEB.2.21.1805251237110.158701@chino.kir.corp.google.com> (raw)
In-Reply-To: <201805250019.w4P0J3Dl018566@www262.sakura.ne.jp>
On Fri, 25 May 2018, Tetsuo Handa wrote:
> > The oom reaper ensures forward progress by setting MMF_OOM_SKIP itself if
> > it cannot reap an mm. This can happen for a variety of reasons,
> > including:
> >
> > - the inability to grab mm->mmap_sem in a sufficient amount of time,
> >
> > - when the mm has blockable mmu notifiers that could cause the oom reaper
> > to stall indefinitely,
> >
> > but we can also add a third when the oom reaper can "reap" an mm but doing
> > so is unlikely to free any amount of memory:
> >
> > - when the mm's memory is fully mlocked.
>
> - when the mm's memory is fully mlocked (needs privilege) or
> fully shared (does not need privilege)
>
Good point, that is another way that unnecessary oom killing can occur
because the oom reaper sets MMF_OOM_SKIP far too early. I can make the
change to the commit message.
Also, I noticed in my patch that oom_reap_task() should be doing
list_add_tail() rather than list_add() to enqueue the mm for reaping
again.
> > This is the same issue where the exit path sets MMF_OOM_SKIP before
> > unmapping memory and additional processes can be chosen unnecessarily
> > because the oom killer is racing with exit_mmap().
> >
> > We can't simply defer setting MMF_OOM_SKIP, however, because if there is
> > a true oom livelock in progress, it never gets set and no additional
> > killing is possible.
> >
> > To fix this, this patch introduces a per-mm reaping timeout, initially set
> > at 10s. It requires that the oom reaper's list becomes a properly linked
> > list so that other mm's may be reaped while waiting for an mm's timeout to
> > expire.
>
> I already proposed more simpler one at https://patchwork.kernel.org/patch/9877991/ .
>
It's a similar idea, and I'm glad that we agree that some kind of per-mm
delay is required to avoid this problem. I think yours is simpler, but
consider the other two changes in my patch:
- in the normal exit path, absent any timeout for the mm, we only set
MMF_OOM_SKIP after free_pgtables() when it is known we will not free
any additional memory, which can also cause unnecessary oom killing
because the oom killer races with free_pgtables(), and
- the oom reaper now operates over all concurrent victims instead of
repeatedly trying to take mm->mmap_sem of the first victim, sleeping
many times, retrying, giving up, and moving on the next victim.
Allowing the oom reaper to iterate through all victims can allow
memory freeing such that an allocator may be able to drop mm->mmap_sem.
In fact, with my patch, I don't know of any condition where we kill
additional processes unnecessarily *unless* the victim cannot be oom
reaped or complete memory freeing in the exit path within 10 seconds.
Given how rare oom livelock appears in practice, I think the 10 seconds is
justified because right now it is _trivial_ to oom kill many victims
completely unnecessarily.
next prev parent reply other threads:[~2018-05-25 19:44 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-05-24 21:22 David Rientjes
2018-05-25 0:19 ` Tetsuo Handa
2018-05-25 19:44 ` David Rientjes [this message]
2018-05-25 7:26 ` Michal Hocko
2018-05-25 19:36 ` David Rientjes
2018-05-28 8:13 ` Michal Hocko
2018-05-30 21:06 ` David Rientjes
2018-05-31 6:32 ` Michal Hocko
2018-05-31 21:16 ` David Rientjes
2018-06-01 7:46 ` Michal Hocko
2018-06-05 4:25 ` David Rientjes
2018-06-05 8:57 ` Michal Hocko
2018-06-13 13:20 ` Tetsuo Handa
2018-06-13 13:29 ` Michal Hocko
2018-06-04 5:48 ` [lkp-robot] [mm, oom] 2d251ff6e6: BUG:unable_to_handle_kernel kernel test robot
2018-06-14 20:42 ` [patch] mm, oom: fix unnecessary killing of additional processes David Rientjes
2018-06-15 6:55 ` Michal Hocko
2018-06-15 23:15 ` David Rientjes
2018-06-19 8:33 ` Michal Hocko
2018-06-20 13:03 ` Michal Hocko
2018-06-20 20:34 ` David Rientjes
2018-06-21 7:45 ` Michal Hocko
2018-06-21 7:54 ` Michal Hocko
2018-06-21 20:50 ` David Rientjes
2018-06-22 7:42 ` Michal Hocko
2018-06-22 14:29 ` Michal Hocko
2018-06-22 18:49 ` David Rientjes
2018-06-25 9:04 ` Michal Hocko
2018-06-19 0:27 ` Andrew Morton
2018-06-19 8:47 ` Michal Hocko
2018-06-19 20:34 ` David Rientjes
2018-06-20 21:59 ` [patch v2] " David Rientjes
2018-06-21 10:58 ` kbuild test robot
2018-06-21 10:58 ` [RFC PATCH] mm, oom: oom_free_timeout_ms can be static kbuild test robot
2018-06-24 2:36 ` [patch] mm, oom: fix unnecessary killing of additional processes Tetsuo Handa
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=alpine.DEB.2.21.1805251237110.158701@chino.kir.corp.google.com \
--to=rientjes@google.com \
--cc=akpm@linux-foundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mhocko@suse.com \
--cc=penguin-kernel@i-love.sakura.ne.jp \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox