Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1443809

Re: [PATCH] mem-hotplug: use GFP_HIGHUSER_MOVABLE and alloc from next node in alloc_migrate_target()

Path csiph.com!weretis.net!feeder4.news.weretis.net!news.mixmin.net!aioe.org!bofh.it!news.nic.it!robomod
From David Rientjes <rientjes@google.com>
Newsgroups linux.kernel
Subject Re: [PATCH] mem-hotplug: use GFP_HIGHUSER_MOVABLE and alloc from next node in alloc_migrate_target()
Date Fri, 15 Jul 2016 00:20:03 +0200
Message-ID <rUX99-72G-45@gated-at.bofh.it> (permalink)
References <rUEJb-3rU-1@gated-at.bofh.it>
X-Original-To Xishi Qiu <qiuxishi@huawei.com>
Dkim-Signature v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=date:from:to:cc:subject:in-reply-to:message-id:references :user-agent:mime-version; bh=8TJCNlGHZAFIIPMJ7RKrq0Y6gP/MfuaJgKBGXpaJsOY=; b=bb5ffuyGvE6m9ECYYBK0GMU+tWlrc0qNSlDeklmA/tpoesQDyw1s/urx46I4fGkMJS CeYERyI4GpXOSDcr1wyPPxj/76btLSUSh+HLwIhC6dGNJxEnLOCX+j+J9X3EwSQ/vrvE BxixZ3F1S78NwgiG/BcxzyHpE8GWlaFJA65kcdienZ8YyUBDJjrV5fvA+uCNanOHN/Cm S4YYE2bAAipi2LGYzaZdbfShg0XEaJyNXFoYnE1+oEK0lMijdBx5EIQFoffZ1BKZoEgW DR2FSlJBgQrFTOqtIf2yAM1GXbJZQdLWyMLTmBA5yVLM+q9spbTfnThz07giTjBCWf04 NgpA==
X-Google-Dkim-Signature v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:date:from:to:cc:subject:in-reply-to:message-id :references:user-agent:mime-version; bh=8TJCNlGHZAFIIPMJ7RKrq0Y6gP/MfuaJgKBGXpaJsOY=; b=l+tHXsBN7Oc4ORiWtp/tK5DBZ0avH0i8RElkE46GXiyCGlJKvRgCo1yUyvvj2Z7jYs 8SdwwT8Xf1rewkxGkd9xNdGS8sRVsDwtwS0qATYMp3v8AYcO5alzwfE76P1DPl/XS/Zs 2DSw4JzyshdDYI61ZK770j7iNf469amtG1iKK00mTxk3GsdA7gVEOFAZfzsma0V/m4+u ymquOBe8f94TQ/wbJfe9zSr5DYe28S7X6lgXUXpg7XLyI5R5vi3Yt8yWm1DbBhrimCzZ NcTHYhdUYQqeOBQigfaSsxzemp7ToaImDeXpEYTtxUrswebKCUx1eR2vXrfHK55dvGQQ xs1A==
X-Gm-Message-State ALyK8tL7pTIOxWfK4j8dqbdEFK+ARs7zxgDTtkhCrA8zLauK01jjcGuHcAsuTd0Vpx59bmUn
X-Received by 10.98.66.209 with SMTP id h78mr16184307pfd.11.1468534640281; Thu, 14 Jul 2016 15:17:20 -0700 (PDT)
X-X-Sender rientjes@chino.kir.corp.google.com
User-Agent Alpine 2.10 (DEB 1266 2009-07-14)
MIME-Version 1.0
Content-Type TEXT/PLAIN; charset=US-ASCII
Sender robomod@news.nic.it
List-ID <linux-kernel.vger.kernel.org>
X-Mailing-List linux-kernel@vger.kernel.org
Approved robomod@news.nic.it
Lines 62
Organization linux.* mail to news gateway
X-Original-Cc Andrew Morton <akpm@linux-foundation.org>, Vlastimil Babka <vbabka@suse.cz>, Joonsoo Kim <iamjoonsoo.kim@lge.com>, Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>, Linux MM <linux-mm@kvack.org>, LKML <linux-kernel@vger.kernel.org>
X-Original-Date Thu, 14 Jul 2016 15:17:13 -0700 (PDT)
X-Original-Message-ID <alpine.DEB.2.10.1607141513320.72383@chino.kir.corp.google.com>
X-Original-References <5786F81B.1070502@huawei.com>
X-Original-Sender linux-kernel-owner@vger.kernel.org
Xref csiph.com linux.kernel:1443809

Show key headers only | View raw


On Thu, 14 Jul 2016, Xishi Qiu wrote:

> alloc_migrate_target() is called from migrate_pages(), and the page
> is always from user space, so we can add __GFP_HIGHMEM directly.
> 
> Second, when we offline a node, the new page should alloced from other
> nodes instead of the current node, because re-migrate is a waste of
> time.
> 

alloc_migrate_target() is not only used from memory hotplug, it is also 
used for CMA: we won't be isolating PageHuge() pages in 
isolate_migratepages_range(), so this would cause a regression where we'd 
be migrating memory to a remote NUMA node rather than preferring to 
allocate locally.

You may find it useful to use the 'private' field of the migrate_pages() 
callback to specify the node the page should preferably be migrated to.

> Signed-off-by: Xishi Qiu <qiuxishi@huawei.com>
> ---
>  mm/page_isolation.c | 16 ++++++----------
>  1 file changed, 6 insertions(+), 10 deletions(-)
> 
> diff --git a/mm/page_isolation.c b/mm/page_isolation.c
> index 612122b..83848dc 100644
> --- a/mm/page_isolation.c
> +++ b/mm/page_isolation.c
> @@ -282,20 +282,16 @@ int test_pages_isolated(unsigned long start_pfn, unsigned long end_pfn,
>  struct page *alloc_migrate_target(struct page *page, unsigned long private,
>  				  int **resultp)
>  {
> -	gfp_t gfp_mask = GFP_USER | __GFP_MOVABLE;
> -
>  	/*
> -	 * TODO: allocate a destination hugepage from a nearest neighbor node,
> +	 * TODO: allocate a destination page from a nearest neighbor node,
>  	 * accordance with memory policy of the user process if possible. For
>  	 * now as a simple work-around, we use the next node for destination.
>  	 */
> +	int nid = next_node_in(page_to_nid(page), node_online_map);
> +
>  	if (PageHuge(page))
>  		return alloc_huge_page_node(page_hstate(compound_head(page)),
> -					    next_node_in(page_to_nid(page),
> -							 node_online_map));
> -
> -	if (PageHighMem(page))
> -		gfp_mask |= __GFP_HIGHMEM;
> -
> -	return alloc_page(gfp_mask);
> +						 nid);
> +	else
> +		return __alloc_pages_node(nid, GFP_HIGHUSER_MOVABLE, 0);

I don't think this __alloc_pages_node() does what you think it does, it 
only prefers nid here and will readily fallback to other nodes if 
necessary.  That is different than alloc_huge_page_node() which does no 
fallback.  So there's two issues with this change: (1) inconsistency 
between PageHuge() and !PageHuge() behavior, and (2) the use of 
__alloc_pages_node() does not match the commit description which states 
"re-migrate is a waste of time."

Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH] mem-hotplug: use GFP_HIGHUSER_MOVABLE and alloc from next  node in alloc_migrate_target() Xishi Qiu <qiuxishi@huawei.com> - 2016-07-14 04:40 +0200
  Re: [PATCH] mem-hotplug: use GFP_HIGHUSER_MOVABLE and alloc from  next node in alloc_migrate_target() David Rientjes <rientjes@google.com> - 2016-07-15 00:20 +0200
    Re: [PATCH] mem-hotplug: use GFP_HIGHUSER_MOVABLE and alloc from  next node in alloc_migrate_target() Xishi Qiu <qiuxishi@huawei.com> - 2016-07-15 03:30 +0200

csiph-web