Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751349AbdH1KEp (ORCPT ); Mon, 28 Aug 2017 06:04:45 -0400 Received: from mx2.suse.de ([195.135.220.15]:48510 "EHLO mx1.suse.de" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751225AbdH1KEo (ORCPT ); Mon, 28 Aug 2017 06:04:44 -0400 Subject: Re: [PATCH 1/2] mm/slub: wake up kswapd for initial high order allocation To: js1304@gmail.com, Andrew Morton Cc: Christoph Lameter , Pekka Enberg , David Rientjes , Joonsoo Kim , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Mel Gorman References: <1503882675-17910-1-git-send-email-iamjoonsoo.kim@lge.com> From: Vlastimil Babka Message-ID: Date: Mon, 28 Aug 2017 12:04:41 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.2.1 MIME-Version: 1.0 In-Reply-To: <1503882675-17910-1-git-send-email-iamjoonsoo.kim@lge.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2389 Lines: 56 On 08/28/2017 03:11 AM, js1304@gmail.com wrote: > From: Joonsoo Kim > > slub uses higher order allocation than it actually needs. In this case, > we don't want to do direct reclaim to make such a high order page since > it causes a big latency to the user. Instead, we would like to fallback > lower order allocation that it actually needs. > > However, we also want to get this higher order page in the next time > in order to get the best performance and it would be a role of > the background thread like as kswapd and kcompactd. To wake up them, > we should not clear __GFP_KSWAPD_RECLAIM. > > Unlike this intention, current code clears __GFP_KSWAPD_RECLAIM so fix it. > > Note that this patch does some clean up, too. > __GFP_NOFAIL is cleared twice so remove one. > > Signed-off-by: Joonsoo Kim Hm, so this seems to revert Mel's 444eb2a449ef ("mm: thp: set THP defrag by default to madvise and add a stall-free defrag option") wrt the slub allocate_slab() part. AFAICS the intention in Mel's patch was that he removed a special case in __alloc_page_slowpath() where including __GFP_THISNODE and lacking ~__GFP_DIRECT_RECLAIM effectively means also lacking __GFP_KSWAPD_RECLAIM. The commit log claims that slab/slub might change behavior so he moved the removal of __GFP_KSWAPD_RECLAIM to them. But AFAICS, only slab uses __GFP_THISNODE, while slub doesn't. So your patch would indeed revert an unintentional change of Mel's commit. Is it right or do I miss something? > --- > mm/slub.c | 8 ++++++-- > 1 file changed, 6 insertions(+), 2 deletions(-) > > diff --git a/mm/slub.c b/mm/slub.c > index 0dc7397..e1e442c 100644 > --- a/mm/slub.c > +++ b/mm/slub.c > @@ -1578,8 +1578,12 @@ static struct page *allocate_slab(struct kmem_cache *s, gfp_t flags, int node) > * so we fall-back to the minimum order allocation. > */ > alloc_gfp = (flags | __GFP_NOWARN | __GFP_NORETRY) & ~__GFP_NOFAIL; > - if ((alloc_gfp & __GFP_DIRECT_RECLAIM) && oo_order(oo) > oo_order(s->min)) > - alloc_gfp = (alloc_gfp | __GFP_NOMEMALLOC) & ~(__GFP_RECLAIM|__GFP_NOFAIL); > + if (oo_order(oo) > oo_order(s->min)) { > + if (alloc_gfp & __GFP_DIRECT_RECLAIM) { > + alloc_gfp |= __GFP_NOMEMALLOC; > + alloc_gfp &= ~__GFP_DIRECT_RECLAIM; > + } > + } > > page = alloc_slab_page(s, alloc_gfp, node, oo); > if (unlikely(!page)) { >