From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pa0-f42.google.com (mail-pa0-f42.google.com [209.85.220.42]) by kanga.kvack.org (Postfix) with ESMTP id 753C76B0037 for ; Thu, 14 Nov 2013 18:26:57 -0500 (EST) Received: by mail-pa0-f42.google.com with SMTP id kx10so2013914pab.15 for ; Thu, 14 Nov 2013 15:26:57 -0800 (PST) Received: from psmtp.com ([74.125.245.197]) by mx.google.com with SMTP id yk3si94817pac.186.2013.11.14.15.26.55 for ; Thu, 14 Nov 2013 15:26:56 -0800 (PST) Received: by mail-yh0-f52.google.com with SMTP id i57so1434138yha.39 for ; Thu, 14 Nov 2013 15:26:54 -0800 (PST) Date: Thu, 14 Nov 2013 15:26:51 -0800 (PST) From: David Rientjes Subject: [patch 1/2] mm, memcg: avoid oom notification when current needs access to memory reserves In-Reply-To: Message-ID: References: <20131031054942.GA26301@cmpxchg.org> <20131113233419.GJ707@cmpxchg.org> <20131114032508.GL707@cmpxchg.org> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: owner-linux-mm@kvack.org List-ID: To: Andrew Morton Cc: Michal Hocko , Johannes Weiner , KAMEZAWA Hiroyuki , linux-kernel@vger.kernel.org, linux-mm@kvack.org, cgroups@vger.kernel.org When current has a pending SIGKILL or is already in the exit path, it only needs access to memory reserves to fully exit. In that sense, the memcg is not actually oom for current, it simply needs to bypass memory charges to exit and free its memory, which is guarantee itself that memory will be freed. We only want to notify userspace for actionable oom conditions where something needs to be done (and all oom handling can already be deferred to userspace through this method by disabling the memcg oom killer with memory.oom_control), not simply when a memcg has reached its limit, which would actually have to happen before memcg reclaim actually frees memory for charges. Reported-by: Johannes Weiner Signed-off-by: David Rientjes --- mm/memcontrol.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/mm/memcontrol.c b/mm/memcontrol.c --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -1783,16 +1783,6 @@ static void mem_cgroup_out_of_memory(struct mem_cgroup *memcg, gfp_t gfp_mask, unsigned int points = 0; struct task_struct *chosen = NULL; - /* - * If current has a pending SIGKILL or is exiting, then automatically - * select it. The goal is to allow it to allocate so that it may - * quickly exit and free its memory. - */ - if (fatal_signal_pending(current) || current->flags & PF_EXITING) { - set_thread_flag(TIF_MEMDIE); - return; - } - check_panic_on_oom(CONSTRAINT_MEMCG, gfp_mask, order, NULL); totalpages = mem_cgroup_get_limit(memcg) >> PAGE_SHIFT ? : 1; for_each_mem_cgroup_tree(iter, memcg) { @@ -2243,6 +2233,16 @@ bool mem_cgroup_oom_synchronize(bool handle) if (!handle) goto cleanup; + /* + * If current has a pending SIGKILL or is exiting, then automatically + * select it. The goal is to allow it to allocate so that it may + * quickly exit and free its memory. + */ + if (fatal_signal_pending(current) || current->flags & PF_EXITING) { + set_thread_flag(TIF_MEMDIE); + goto cleanup; + } + owait.memcg = memcg; owait.wait.flags = 0; owait.wait.func = memcg_oom_wake_function; -- 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: email@kvack.org