From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753964AbaFCMym (ORCPT ); Tue, 3 Jun 2014 08:54:42 -0400 Received: from cantor2.suse.de ([195.135.220.15]:40480 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752785AbaFCMyl (ORCPT ); Tue, 3 Jun 2014 08:54:41 -0400 Date: Tue, 3 Jun 2014 14:54:38 +0200 From: Michal Hocko To: Johannes Weiner Cc: Andrew Morton , Hugh Dickins , Tejun Heo , Vladimir Davydov , cgroups@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: Re: [patch 02/10] mm: memcontrol: rearrange charging fast path Message-ID: <20140603125438.GG1321@dhcp22.suse.cz> References: <1401380162-24121-1-git-send-email-hannes@cmpxchg.org> <1401380162-24121-3-git-send-email-hannes@cmpxchg.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1401380162-24121-3-git-send-email-hannes@cmpxchg.org> User-Agent: Mutt/1.5.23 (2014-03-12) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu 29-05-14 12:15:54, Johannes Weiner wrote: > The charging path currently starts out with OOM condition checks when > OOM is the rarest possible case. > > Rearrange this code to run OOM/task dying checks only after trying the > percpu charge and the res_counter charge and bail out before entering > reclaim. Attempting a charge does not hurt an (oom-)killed task as > much as every charge attempt having to check OOM conditions. Also, > only check __GFP_NOFAIL when the charge would actually fail. > > Signed-off-by: Johannes Weiner Acked-by: Michal Hocko > --- > mm/memcontrol.c | 33 +++++++++++++++++---------------- > 1 file changed, 17 insertions(+), 16 deletions(-) > > diff --git a/mm/memcontrol.c b/mm/memcontrol.c > index c3c10ab98355..46b3e37542ad 100644 > --- a/mm/memcontrol.c > +++ b/mm/memcontrol.c > @@ -2576,22 +2576,6 @@ static int mem_cgroup_try_charge(struct mem_cgroup *memcg, > > if (mem_cgroup_is_root(memcg)) > goto done; > - /* > - * Unlike in global OOM situations, memcg is not in a physical > - * memory shortage. Allow dying and OOM-killed tasks to > - * bypass the last charges so that they can exit quickly and > - * free their memory. > - */ > - if (unlikely(test_thread_flag(TIF_MEMDIE) || > - fatal_signal_pending(current) || > - current->flags & PF_EXITING)) > - goto bypass; > - > - if (unlikely(task_in_memcg_oom(current))) > - goto nomem; > - > - if (gfp_mask & __GFP_NOFAIL) > - oom = false; > retry: > if (consume_stock(memcg, nr_pages)) > goto done; > @@ -2613,6 +2597,20 @@ retry: > goto retry; > } > > + /* > + * Unlike in global OOM situations, memcg is not in a physical > + * memory shortage. Allow dying and OOM-killed tasks to > + * bypass the last charges so that they can exit quickly and > + * free their memory. > + */ > + if (unlikely(test_thread_flag(TIF_MEMDIE) || > + fatal_signal_pending(current) || > + current->flags & PF_EXITING)) > + goto bypass; > + > + if (unlikely(task_in_memcg_oom(current))) > + goto nomem; > + > if (!(gfp_mask & __GFP_WAIT)) > goto nomem; > > @@ -2641,6 +2639,9 @@ retry: > if (mem_cgroup_wait_acct_move(mem_over_limit)) > goto retry; > > + if (gfp_mask & __GFP_NOFAIL) > + goto bypass; > + > if (fatal_signal_pending(current)) > goto bypass; > > -- > 1.9.3 > -- Michal Hocko SUSE Labs