From: Johannes Weiner <hannes@cmpxchg.org>
To: Michal Hocko <mhocko@suse.cz>
Cc: Glauber Costa <glommer@gmail.com>, azurIt <azurit@pobox.sk>,
Andrew Morton <akpm@linux-foundation.org>,
David Rientjes <rientjes@google.com>,
KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>,
KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>,
linux-mm@kvack.org, cgroups@vger.kernel.org, x86@kernel.org,
linux-arch@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [patch 0/7] improve memcg oom killer robustness v2
Date: Thu, 12 Sep 2013 08:59:38 -0400 [thread overview]
Message-ID: <20130912125938.GP856@cmpxchg.org> (raw)
In-Reply-To: <20130909125659.GD22212@dhcp22.suse.cz>
On Mon, Sep 09, 2013 at 02:56:59PM +0200, Michal Hocko wrote:
> [Adding Glauber - the full patch is here https://lkml.org/lkml/2013/9/5/319]
>
> On Mon 09-09-13 14:36:25, Michal Hocko wrote:
> > On Thu 05-09-13 12:18:17, Johannes Weiner wrote:
> > [...]
> > > From: Johannes Weiner <hannes@cmpxchg.org>
> > > Subject: [patch] mm: memcg: do not trap chargers with full callstack on OOM
> > >
> > [...]
> > >
> > > To fix this, never do any OOM handling directly in the charge context.
> > > When an OOM situation is detected, let the task remember the memcg and
> > > then handle the OOM (kill or wait) only after the page fault stack is
> > > unwound and about to return to userspace.
> >
> > OK, this is indeed nicer because the oom setup is trivial and the
> > handling is not split into two parts and everything happens close to
> > out_of_memory where it is expected.
>
> Hmm, wait a second. I have completely forgot about the kmem charging
> path during the review.
>
> So while previously memcg_charge_kmem could have oom killed a
> task if the it couldn't charge to the u-limit after it managed
> to charge k-limit, now it would simply fail because there is no
> mem_cgroup_{enable,disable}_oom around __mem_cgroup_try_charge it relies
> on. The allocation will fail in the end but I am not sure whether the
> missing oom is an issue or not for existing use cases.
Kernel sites should be able to handle -ENOMEM, right? And if this
nests inside a userspace fault, it'll still enter OOM.
> My original objection about oom triggered from kmem paths was that oom
> is not kmem aware so the oom decisions might be totally bogus. But we
> still have that:
Well, k should be a fraction of u+k on any reasonable setup, so there
are always appropriate candidates to take down.
> /*
> * Conditions under which we can wait for the oom_killer. Those are
> * the same conditions tested by the core page allocator
> */
> may_oom = (gfp & __GFP_FS) && !(gfp & __GFP_NORETRY);
>
> _memcg = memcg;
> ret = __mem_cgroup_try_charge(NULL, gfp, size >> PAGE_SHIFT,
> &_memcg, may_oom);
>
> I do not mind having may_oom = false unconditionally in that path but I
> would like to hear fromm Glauber first.
The patch I just sent to azur puts this conditional into try_charge(),
so I'd just change the kmem site to pass `true'.
--
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>
WARNING: multiple messages have this Message-ID (diff)
From: Johannes Weiner <hannes@cmpxchg.org>
To: Michal Hocko <mhocko@suse.cz>
Cc: Glauber Costa <glommer@gmail.com>, azurIt <azurit@pobox.sk>,
Andrew Morton <akpm@linux-foundation.org>,
David Rientjes <rientjes@google.com>,
KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>,
KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>,
linux-mm@kvack.org, cgroups@vger.kernel.org, x86@kernel.org,
linux-arch@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [patch 0/7] improve memcg oom killer robustness v2
Date: Thu, 12 Sep 2013 08:59:38 -0400 [thread overview]
Message-ID: <20130912125938.GP856@cmpxchg.org> (raw)
Message-ID: <20130912125938.qRIFDwhA4XuuHgNW735QQmMBkpsM0V_mgAUoI_PaDrs@z> (raw)
In-Reply-To: <20130909125659.GD22212@dhcp22.suse.cz>
On Mon, Sep 09, 2013 at 02:56:59PM +0200, Michal Hocko wrote:
> [Adding Glauber - the full patch is here https://lkml.org/lkml/2013/9/5/319]
>
> On Mon 09-09-13 14:36:25, Michal Hocko wrote:
> > On Thu 05-09-13 12:18:17, Johannes Weiner wrote:
> > [...]
> > > From: Johannes Weiner <hannes@cmpxchg.org>
> > > Subject: [patch] mm: memcg: do not trap chargers with full callstack on OOM
> > >
> > [...]
> > >
> > > To fix this, never do any OOM handling directly in the charge context.
> > > When an OOM situation is detected, let the task remember the memcg and
> > > then handle the OOM (kill or wait) only after the page fault stack is
> > > unwound and about to return to userspace.
> >
> > OK, this is indeed nicer because the oom setup is trivial and the
> > handling is not split into two parts and everything happens close to
> > out_of_memory where it is expected.
>
> Hmm, wait a second. I have completely forgot about the kmem charging
> path during the review.
>
> So while previously memcg_charge_kmem could have oom killed a
> task if the it couldn't charge to the u-limit after it managed
> to charge k-limit, now it would simply fail because there is no
> mem_cgroup_{enable,disable}_oom around __mem_cgroup_try_charge it relies
> on. The allocation will fail in the end but I am not sure whether the
> missing oom is an issue or not for existing use cases.
Kernel sites should be able to handle -ENOMEM, right? And if this
nests inside a userspace fault, it'll still enter OOM.
> My original objection about oom triggered from kmem paths was that oom
> is not kmem aware so the oom decisions might be totally bogus. But we
> still have that:
Well, k should be a fraction of u+k on any reasonable setup, so there
are always appropriate candidates to take down.
> /*
> * Conditions under which we can wait for the oom_killer. Those are
> * the same conditions tested by the core page allocator
> */
> may_oom = (gfp & __GFP_FS) && !(gfp & __GFP_NORETRY);
>
> _memcg = memcg;
> ret = __mem_cgroup_try_charge(NULL, gfp, size >> PAGE_SHIFT,
> &_memcg, may_oom);
>
> I do not mind having may_oom = false unconditionally in that path but I
> would like to hear fromm Glauber first.
The patch I just sent to azur puts this conditional into try_charge(),
so I'd just change the kmem site to pass `true'.
next prev parent reply other threads:[~2013-09-12 12:59 UTC|newest]
Thread overview: 227+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-08-03 16:59 [patch 0/7] improve memcg oom killer robustness v2 Johannes Weiner
2013-08-03 16:59 ` Johannes Weiner
2013-08-03 16:59 ` [patch 1/7] arch: mm: remove obsolete init OOM protection Johannes Weiner
2013-08-03 16:59 ` Johannes Weiner
2013-08-06 6:34 ` Vineet Gupta
2013-08-06 6:34 ` Vineet Gupta
2013-08-06 6:34 ` Vineet Gupta
2013-08-03 16:59 ` [patch 2/7] arch: mm: do not invoke OOM killer on kernel fault OOM Johannes Weiner
2013-08-03 16:59 ` Johannes Weiner
2013-08-03 16:59 ` [patch 3/7] arch: mm: pass userspace fault flag to generic fault handler Johannes Weiner
2013-08-03 16:59 ` Johannes Weiner
2013-08-05 22:06 ` Andrew Morton
2013-08-05 22:06 ` Andrew Morton
2013-08-05 22:25 ` Johannes Weiner
2013-08-05 22:25 ` Johannes Weiner
2013-08-03 16:59 ` [patch 4/7] x86: finish user fault error path with fatal signal Johannes Weiner
2013-08-03 16:59 ` Johannes Weiner
2013-08-03 16:59 ` [patch 5/7] mm: memcg: enable memcg OOM killer only for user faults Johannes Weiner
2013-08-03 16:59 ` Johannes Weiner
2013-08-05 9:18 ` Michal Hocko
2013-08-05 9:18 ` Michal Hocko
2013-08-03 16:59 ` [patch 6/7] mm: memcg: rework and document OOM waiting and wakeup Johannes Weiner
2013-08-03 16:59 ` Johannes Weiner
2013-08-03 17:00 ` [patch 7/7] mm: memcg: do not trap chargers with full callstack on OOM Johannes Weiner
2013-08-03 17:00 ` Johannes Weiner
[not found] ` <1375549200-19110-8-git-send-email-hannes-druUgvl0LCNAfugRpC6u6w@public.gmane.org>
2013-08-05 9:54 ` Michal Hocko
2013-08-05 9:54 ` Michal Hocko
2013-08-05 9:54 ` Michal Hocko
2013-08-05 20:56 ` Johannes Weiner
2013-08-05 20:56 ` Johannes Weiner
2013-08-03 17:08 ` [patch 0/7] improve memcg oom killer robustness v2 Johannes Weiner
2013-08-03 17:08 ` Johannes Weiner
[not found] ` <20130803170831.GB23319-druUgvl0LCNAfugRpC6u6w@public.gmane.org>
2013-08-09 9:06 ` azurIt
2013-08-09 9:06 ` azurIt
2013-08-09 9:06 ` azurIt
2013-08-30 19:58 ` azurIt
2013-08-30 19:58 ` azurIt
2013-09-02 10:38 ` azurIt
2013-09-02 10:38 ` azurIt
2013-09-03 20:48 ` Johannes Weiner
2013-09-03 20:48 ` Johannes Weiner
2013-09-04 7:53 ` azurIt
2013-09-04 7:53 ` azurIt
2013-09-04 7:53 ` azurIt
2013-09-04 7:53 ` azurIt
2013-09-04 8:18 ` azurIt
2013-09-04 8:18 ` azurIt
2013-09-05 11:54 ` Johannes Weiner
2013-09-05 11:54 ` Johannes Weiner
2013-09-05 12:43 ` Michal Hocko
2013-09-05 12:43 ` Michal Hocko
2013-09-05 16:18 ` Johannes Weiner
2013-09-05 16:18 ` Johannes Weiner
2013-09-09 12:36 ` Michal Hocko
2013-09-09 12:36 ` Michal Hocko
2013-09-09 12:56 ` Michal Hocko
2013-09-09 12:56 ` Michal Hocko
2013-09-12 12:59 ` Johannes Weiner [this message]
2013-09-12 12:59 ` Johannes Weiner
[not found] ` <20130912125938.GP856-druUgvl0LCNAfugRpC6u6w@public.gmane.org>
2013-09-16 14:03 ` Michal Hocko
2013-09-16 14:03 ` Michal Hocko
2013-09-16 14:03 ` Michal Hocko
2013-09-05 13:24 ` Michal Hocko
2013-09-05 13:24 ` Michal Hocko
2013-09-09 13:10 ` azurIt
2013-09-09 13:10 ` azurIt
2013-09-09 17:28 ` Johannes Weiner
2013-09-09 17:28 ` Johannes Weiner
2013-09-09 19:59 ` azurIt
2013-09-09 19:59 ` azurIt
2013-09-09 20:12 ` Johannes Weiner
2013-09-09 20:12 ` Johannes Weiner
2013-09-09 20:18 ` azurIt
2013-09-09 20:18 ` azurIt
2013-09-09 21:08 ` azurIt
2013-09-09 21:08 ` azurIt
2013-09-10 18:13 ` azurIt
2013-09-10 18:13 ` azurIt
2013-09-10 18:37 ` Johannes Weiner
2013-09-10 18:37 ` Johannes Weiner
2013-09-10 19:32 ` azurIt
2013-09-10 19:32 ` azurIt
2013-09-10 20:12 ` Johannes Weiner
2013-09-10 20:12 ` Johannes Weiner
[not found] ` <20130910201222.GA25972-druUgvl0LCNAfugRpC6u6w@public.gmane.org>
2013-09-10 21:08 ` azurIt
2013-09-10 21:08 ` azurIt
2013-09-10 21:08 ` azurIt
2013-09-10 21:18 ` Johannes Weiner
2013-09-10 21:18 ` Johannes Weiner
2013-09-10 21:32 ` azurIt
2013-09-10 21:32 ` azurIt
2013-09-10 22:03 ` Johannes Weiner
2013-09-10 22:03 ` Johannes Weiner
2013-09-11 12:33 ` azurIt
2013-09-11 12:33 ` azurIt
[not found] ` <20130911143305.FFEAD399-Rm0zKEqwvD4@public.gmane.org>
2013-09-11 18:03 ` Johannes Weiner
2013-09-11 18:03 ` Johannes Weiner
2013-09-11 18:03 ` Johannes Weiner
2013-09-11 18:54 ` azurIt
2013-09-11 18:54 ` azurIt
2013-09-11 19:11 ` Johannes Weiner
2013-09-11 19:11 ` Johannes Weiner
2013-09-11 19:41 ` azurIt
2013-09-11 19:41 ` azurIt
2013-09-11 20:04 ` Johannes Weiner
2013-09-11 20:04 ` Johannes Weiner
2013-09-14 10:48 ` azurIt
2013-09-14 10:48 ` azurIt
2013-09-16 13:40 ` Michal Hocko
2013-09-16 13:40 ` Michal Hocko
2013-09-16 14:01 ` azurIt
2013-09-16 14:01 ` azurIt
2013-09-16 14:06 ` Michal Hocko
2013-09-16 14:06 ` Michal Hocko
[not found] ` <20130916140607.GC3674-2MMpYkNvuYDjFM9bn6wA6Q@public.gmane.org>
2013-09-16 14:13 ` azurIt
2013-09-16 14:13 ` azurIt
2013-09-16 14:13 ` azurIt
2013-09-16 14:57 ` Michal Hocko
2013-09-16 14:57 ` Michal Hocko
2013-09-16 15:05 ` azurIt
2013-09-16 15:05 ` azurIt
[not found] ` <20130916170543.77F1ECB4-Rm0zKEqwvD4@public.gmane.org>
2013-09-16 15:17 ` Johannes Weiner
2013-09-16 15:17 ` Johannes Weiner
2013-09-16 15:17 ` Johannes Weiner
2013-09-16 15:24 ` azurIt
2013-09-16 15:24 ` azurIt
2013-09-16 15:25 ` Michal Hocko
2013-09-16 15:25 ` Michal Hocko
2013-09-16 15:40 ` azurIt
2013-09-16 15:40 ` azurIt
2013-09-16 20:52 ` azurIt
2013-09-16 20:52 ` azurIt
2013-09-17 0:02 ` Johannes Weiner
2013-09-17 0:02 ` Johannes Weiner
2013-09-17 11:15 ` azurIt
2013-09-17 11:15 ` azurIt
2013-09-17 11:15 ` azurIt
2013-09-17 14:10 ` Michal Hocko
2013-09-17 14:10 ` Michal Hocko
[not found] ` <20130917141013.GA30838-2MMpYkNvuYDjFM9bn6wA6Q@public.gmane.org>
2013-09-18 14:03 ` azurIt
2013-09-18 14:03 ` azurIt
2013-09-18 14:03 ` azurIt
2013-09-18 14:24 ` Michal Hocko
2013-09-18 14:24 ` Michal Hocko
2013-09-18 14:33 ` azurIt
2013-09-18 14:33 ` azurIt
[not found] ` <20130918163306.3620C973-Rm0zKEqwvD4@public.gmane.org>
2013-09-18 14:42 ` Michal Hocko
2013-09-18 14:42 ` Michal Hocko
2013-09-18 14:42 ` Michal Hocko
2013-09-18 18:02 ` azurIt
2013-09-18 18:02 ` azurIt
[not found] ` <20130918200239.DDA96791-Rm0zKEqwvD4@public.gmane.org>
2013-09-18 18:36 ` Michal Hocko
2013-09-18 18:36 ` Michal Hocko
2013-09-18 18:36 ` Michal Hocko
[not found] ` <20130918160304.6EDF2729-Rm0zKEqwvD4@public.gmane.org>
2013-09-18 18:04 ` Johannes Weiner
2013-09-18 18:04 ` Johannes Weiner
[not found] ` <20130918180455.GD856-druUgvl0LCNAfugRpC6u6w@public.gmane.org>
2013-09-18 18:19 ` Johannes Weiner
2013-09-18 18:19 ` Johannes Weiner
[not found] ` <20130918181946.GE856-druUgvl0LCNAfugRpC6u6w@public.gmane.org>
2013-09-18 19:55 ` Johannes Weiner
2013-09-18 19:55 ` Johannes Weiner
2013-09-18 19:55 ` Johannes Weiner
[not found] ` <20130918195504.GF856-druUgvl0LCNAfugRpC6u6w@public.gmane.org>
2013-09-18 20:52 ` azurIt
2013-09-18 20:52 ` azurIt
2013-09-18 20:52 ` azurIt
2013-09-25 7:26 ` azurIt
2013-09-25 7:26 ` azurIt
2013-09-25 7:26 ` azurIt
2013-09-26 16:54 ` azurIt
2013-09-26 16:54 ` azurIt
2013-09-26 16:54 ` azurIt
2013-09-26 19:27 ` Johannes Weiner
2013-09-26 19:27 ` Johannes Weiner
[not found] ` <20130926192743.GP856-druUgvl0LCNAfugRpC6u6w@public.gmane.org>
2013-09-27 2:04 ` azurIt
2013-09-27 2:04 ` azurIt
2013-09-27 2:04 ` azurIt
2013-09-27 2:04 ` azurIt
2013-10-07 11:01 ` azurIt
2013-10-07 11:01 ` azurIt
2013-10-07 11:01 ` azurIt
2013-10-07 11:01 ` azurIt
[not found] ` <20131007130149.5F5482D8-Rm0zKEqwvD4@public.gmane.org>
2013-10-07 19:23 ` Johannes Weiner
2013-10-07 19:23 ` Johannes Weiner
[not found] ` <20131007192336.GU856-druUgvl0LCNAfugRpC6u6w@public.gmane.org>
2013-10-09 18:44 ` azurIt
2013-10-09 18:44 ` azurIt
2013-10-09 18:44 ` azurIt
[not found] ` <20131009204450.6AB97915-Rm0zKEqwvD4@public.gmane.org>
2013-10-10 0:14 ` Johannes Weiner
2013-10-10 0:14 ` Johannes Weiner
2013-10-10 0:14 ` Johannes Weiner
[not found] ` <20131010001422.GB856-druUgvl0LCNAfugRpC6u6w@public.gmane.org>
2013-10-10 22:59 ` azurIt
2013-10-10 22:59 ` azurIt
2013-10-10 22:59 ` azurIt
2013-09-17 11:20 ` azurIt
2013-09-17 11:20 ` azurIt
2013-09-16 10:22 ` azurIt
2013-09-16 10:22 ` azurIt
2013-09-04 9:45 ` azurIt
2013-09-04 9:45 ` azurIt
2013-09-04 11:57 ` Michal Hocko
2013-09-04 11:57 ` Michal Hocko
[not found] ` <20130904115741.GA28285-2MMpYkNvuYDjFM9bn6wA6Q@public.gmane.org>
2013-09-04 12:10 ` azurIt
2013-09-04 12:10 ` azurIt
2013-09-04 12:10 ` azurIt
[not found] ` <20130904141000.0F910EFA-Rm0zKEqwvD4@public.gmane.org>
2013-09-04 12:26 ` Michal Hocko
2013-09-04 12:26 ` Michal Hocko
2013-09-04 12:26 ` Michal Hocko
2013-09-04 12:39 ` azurIt
2013-09-04 12:39 ` azurIt
2013-09-05 9:14 ` azurIt
2013-09-05 9:14 ` azurIt
2013-09-05 9:53 ` Michal Hocko
2013-09-05 9:53 ` Michal Hocko
2013-09-05 10:17 ` azurIt
2013-09-05 10:17 ` azurIt
[not found] ` <20130905121700.546B5881-Rm0zKEqwvD4@public.gmane.org>
2013-09-05 11:17 ` Michal Hocko
2013-09-05 11:17 ` Michal Hocko
2013-09-05 11:17 ` Michal Hocko
2013-09-05 11:47 ` azurIt
2013-09-05 11:47 ` azurIt
2013-09-05 12:03 ` Michal Hocko
2013-09-05 12:03 ` Michal Hocko
[not found] ` <20130905120347.GA13666-2MMpYkNvuYDjFM9bn6wA6Q@public.gmane.org>
2013-09-05 12:33 ` azurIt
2013-09-05 12:33 ` azurIt
2013-09-05 12:33 ` azurIt
2013-09-05 12:45 ` Michal Hocko
2013-09-05 12:45 ` Michal Hocko
2013-09-05 13:00 ` azurIt
2013-09-05 13:00 ` azurIt
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=20130912125938.GP856@cmpxchg.org \
--to=hannes@cmpxchg.org \
--cc=akpm@linux-foundation.org \
--cc=azurit@pobox.sk \
--cc=cgroups@vger.kernel.org \
--cc=glommer@gmail.com \
--cc=kamezawa.hiroyu@jp.fujitsu.com \
--cc=kosaki.motohiro@jp.fujitsu.com \
--cc=linux-arch@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mhocko@suse.cz \
--cc=rientjes@google.com \
--cc=x86@kernel.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.