From: Mikulas Patocka <mpatocka@redhat.com>
To: Michal Hocko <mhocko@kernel.org>
Cc: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>,
Ondrej Kozina <okozina@redhat.com>,
Jerome Marchand <jmarchan@redhat.com>,
Stanislav Kozina <skozina@redhat.com>,
linux-mm@kvack.org, linux-kernel@vger.kernel.org,
David Rientjes <rientjes@google.com>
Subject: Re: System freezes after OOM
Date: Wed, 13 Jul 2016 10:18:35 -0400 (EDT) [thread overview]
Message-ID: <alpine.LRH.2.02.1607131004340.31769@file01.intranet.prod.int.rdu2.redhat.com> (raw)
In-Reply-To: <20160713133955.GK28723@dhcp22.suse.cz>
On Wed, 13 Jul 2016, Michal Hocko wrote:
> [CC David]
>
> > > It is caused by the commit f9054c70d28bc214b2857cf8db8269f4f45a5e23.
> > > Prior to this commit, mempool allocations set __GFP_NOMEMALLOC, so
> > > they never exhausted reserved memory. With this commit, mempool
> > > allocations drop __GFP_NOMEMALLOC, so they can dig deeper (if the
> > > process has PF_MEMALLOC, they can bypass all limits).
> >
> > I wonder whether commit f9054c70d28bc214 ("mm, mempool: only set
> > __GFP_NOMEMALLOC if there are free elements") is doing correct thing.
> > It says
> >
> > If an oom killed thread calls mempool_alloc(), it is possible that
> > it'll
> > loop forever if there are no elements on the freelist since
> > __GFP_NOMEMALLOC prevents it from accessing needed memory reserves in
> > oom conditions.
>
> I haven't studied the patch very deeply so I might be missing something
> but from a quick look the patch does exactly what the above says.
>
> mempool_alloc used to inhibit ALLOC_NO_WATERMARKS by default. David has
> only changed that to allow ALLOC_NO_WATERMARKS if there are no objects
> in the pool and so we have no fallback for the default __GFP_NORETRY
> request.
The swapper core sets the flag PF_MEMALLOC and calls generic_make_request
to submit the swapping bio to the block driver. The device mapper driver
uses mempools for all its I/O processing.
Prior to the patch f9054c70d28bc214b2857cf8db8269f4f45a5e23, mempool_alloc
never exhausted the reserved memory - it tried to allocace first with
__GFP_NOMEMALLOC (thus preventing the allocator from allocating below the
limits), then it tried to allocate from the mempool reserve and if the
mempool is exhausted, it waits until some structures are returned to the
mempool.
After the patch f9054c70d28bc214b2857cf8db8269f4f45a5e23, __GFP_NOMEMALLOC
is not used if the mempool is exhausted - and so repeated use of
mempool_alloc (tohether with PF_MEMALLOC that is implicitly set) can
exhaust all available memory.
The patch f9054c70d28bc214b2857cf8db8269f4f45a5e23 allows more paralellism
(mempool_alloc waits less and proceeds more often), but the downside is
that it exhausts all the memory. Bisection showed that those dm-crypt
swapping failures were caused by that patch.
I think f9054c70d28bc214b2857cf8db8269f4f45a5e23 should be reverted - but
first, we need to find out why does swapping fail if all the memory is
exhausted - that is a separate bug that should be addressed first.
> > but we can allow mempool_alloc(__GFP_NOMEMALLOC) requests to access
> > memory reserves via below change, can't we?
There are no mempool_alloc(__GFP_NOMEMALLOC) requsts - mempool users don't
use this flag.
Mikulas
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2016-07-13 14:18 UTC|newest]
Thread overview: 60+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <57837CEE.1010609@redhat.com>
[not found] ` <f80dc690-7e71-26b2-59a2-5a1557d26713@redhat.com>
[not found] ` <9be09452-de7f-d8be-fd5d-4a80d1cd1ba3@redhat.com>
2016-07-11 15:43 ` Mikulas Patocka
2016-07-12 6:49 ` Michal Hocko
2016-07-12 23:44 ` Mikulas Patocka
2016-07-13 8:35 ` Jerome Marchand
2016-07-13 11:14 ` Michal Hocko
2016-07-13 14:21 ` Mikulas Patocka
2016-07-13 11:10 ` Michal Hocko
2016-07-13 12:50 ` Michal Hocko
2016-07-13 13:44 ` Milan Broz
2016-07-13 15:21 ` Mikulas Patocka
2016-07-14 9:09 ` Michal Hocko
2016-07-14 9:46 ` Milan Broz
2016-07-13 15:02 ` Mikulas Patocka
2016-07-14 10:51 ` [dm-devel] " Ondrej Kozina
2016-07-14 12:51 ` Michal Hocko
2016-07-14 14:00 ` Mikulas Patocka
2016-07-14 14:59 ` Michal Hocko
2016-07-14 15:25 ` Ondrej Kozina
2016-07-14 17:35 ` Mikulas Patocka
2016-07-15 8:35 ` Michal Hocko
2016-07-15 12:11 ` Mikulas Patocka
2016-07-15 12:22 ` Michal Hocko
2016-07-15 17:02 ` Mikulas Patocka
2016-07-18 7:22 ` Michal Hocko
2016-07-14 14:08 ` Ondrej Kozina
2016-07-14 15:31 ` Michal Hocko
2016-07-14 17:07 ` Ondrej Kozina
2016-07-14 17:36 ` Michal Hocko
2016-07-14 17:39 ` Michal Hocko
2016-07-15 11:42 ` Tetsuo Handa
2016-07-13 13:19 ` Tetsuo Handa
2016-07-13 13:39 ` Michal Hocko
2016-07-13 14:18 ` Mikulas Patocka [this message]
2016-07-13 14:56 ` Michal Hocko
2016-07-13 15:11 ` Mikulas Patocka
2016-07-13 23:53 ` David Rientjes
2016-07-14 11:01 ` Tetsuo Handa
2016-07-14 12:29 ` Mikulas Patocka
2016-07-14 20:26 ` David Rientjes
2016-07-14 21:40 ` Tetsuo Handa
2016-07-14 22:04 ` David Rientjes
2016-07-15 11:25 ` Mikulas Patocka
2016-07-15 21:21 ` David Rientjes
2016-07-14 12:27 ` Mikulas Patocka
2016-07-14 20:22 ` David Rientjes
2016-07-15 11:21 ` Mikulas Patocka
2016-07-15 21:25 ` David Rientjes
2016-07-15 21:39 ` Mikulas Patocka
2016-07-15 21:58 ` David Rientjes
2016-07-15 23:53 ` Mikulas Patocka
2016-07-18 15:14 ` Johannes Weiner
2016-07-14 15:29 ` Michal Hocko
2016-07-14 20:38 ` David Rientjes
2016-07-15 7:22 ` Michal Hocko
2016-07-15 8:23 ` Michal Hocko
2016-07-15 12:00 ` Mikulas Patocka
2016-07-15 21:47 ` David Rientjes
2016-07-18 7:39 ` Michal Hocko
2016-07-18 21:03 ` David Rientjes
2016-07-14 0:01 ` David Rientjes
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.LRH.2.02.1607131004340.31769@file01.intranet.prod.int.rdu2.redhat.com \
--to=mpatocka@redhat.com \
--cc=jmarchan@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mhocko@kernel.org \
--cc=okozina@redhat.com \
--cc=penguin-kernel@I-love.SAKURA.ne.jp \
--cc=rientjes@google.com \
--cc=skozina@redhat.com \
/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