linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3] mem-hotplug: alloc new page from a nearest neighbor node when mem-offline
@ 2016-07-25  9:53 Xishi Qiu
  2016-07-25 20:51 ` Andrew Morton
  0 siblings, 1 reply; 3+ messages in thread
From: Xishi Qiu @ 2016-07-25  9:53 UTC (permalink / raw)
  To: Joonsoo Kim, Vlastimil Babka, Andrew Morton, Naoya Horiguchi,
	David Rientjes
  Cc: LKML, Linux MM

If we offline a node, alloc the new page from a nearest neighbor
node instead of the current node or other remote nodes, because
re-migrate is a waste of time and the distance of the remote nodes
is often very large.

Also use GFP_HIGHUSER_MOVABLE to alloc new page if the zone is
movable zone or highmem zone.

Changelog:
V3:
	-alloc new page from a nearest neighbor node for both
	movable zone and non-movable zone
V2:
	-alloc new page from the next node for only movable zone

Signed-off-by: Xishi Qiu <qiuxishi@huawei.com>
---
 mm/memory_hotplug.c | 38 +++++++++++++++++++++++++++++++++-----
 1 file changed, 33 insertions(+), 5 deletions(-)

diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c
index e3cbdca..04dcf0e 100644
--- a/mm/memory_hotplug.c
+++ b/mm/memory_hotplug.c
@@ -1501,6 +1501,37 @@ static unsigned long scan_movable_pages(unsigned long start, unsigned long end)
 	return 0;
 }
 
+static struct page *new_node_page(struct page *page, unsigned long private,
+		int **result)
+{
+	gfp_t gfp_mask = GFP_USER | __GFP_MOVABLE;
+	int nid = page_to_nid(page);
+	nodemask_t nmask = node_online_map;
+	struct page *new_page;
+
+	/*
+	 * TODO: allocate a destination hugepage 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.
+	 */
+	if (PageHuge(page))
+		return alloc_huge_page_node(page_hstate(compound_head(page)),
+					next_node_in(nid, nmask));
+
+	node_clear(nid, nmask);
+	if (PageHighMem(page)
+	    || (zone_idx(page_zone(page)) == ZONE_MOVABLE))
+		gfp_mask |= __GFP_HIGHMEM;
+
+	new_page = __alloc_pages_nodemask(gfp_mask, 0,
+					node_zonelist(nid, gfp_mask), &nmask);
+	if (!new_page)
+		new_page = __alloc_pages(gfp_mask, 0,
+					node_zonelist(nid, gfp_mask));
+
+	return new_page;
+}
+
 #define NR_OFFLINE_AT_ONCE_PAGES	(256)
 static int
 do_migrate_range(unsigned long start_pfn, unsigned long end_pfn)
@@ -1564,11 +1595,8 @@ do_migrate_range(unsigned long start_pfn, unsigned long end_pfn)
 			goto out;
 		}
 
-		/*
-		 * alloc_migrate_target should be improooooved!!
-		 * migrate_pages returns # of failed pages.
-		 */
-		ret = migrate_pages(&source, alloc_migrate_target, NULL, 0,
+		/* Allocate a new page from the nearest neighbor node */
+		ret = migrate_pages(&source, new_node_page, NULL, 0,
 					MIGRATE_SYNC, MR_MEMORY_HOTPLUG);
 		if (ret)
 			putback_movable_pages(&source);
-- 
1.8.3.1


--
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>

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH v3] mem-hotplug: alloc new page from a nearest neighbor node when mem-offline
  2016-07-25  9:53 [PATCH v3] mem-hotplug: alloc new page from a nearest neighbor node when mem-offline Xishi Qiu
@ 2016-07-25 20:51 ` Andrew Morton
  2016-07-26  1:36   ` Xishi Qiu
  0 siblings, 1 reply; 3+ messages in thread
From: Andrew Morton @ 2016-07-25 20:51 UTC (permalink / raw)
  To: Xishi Qiu
  Cc: Joonsoo Kim, Vlastimil Babka, Naoya Horiguchi, David Rientjes,
	LKML, Linux MM

On Mon, 25 Jul 2016 17:53:15 +0800 Xishi Qiu <qiuxishi@huawei.com> wrote:

> Subject: [PATCH v3] mem-hotplug: alloc new page from a nearest neighbor node when mem-offline

argh.

This is "v3" but there is no v1 and no v2.  Please don't change the
name of patches in this manner.  Or if you do, please be clear which
patch is being updated.

I'll drop your
mem-hotplug-use-different-mempolicy-in-alloc_migrate_target.patch.

--
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>

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH v3] mem-hotplug: alloc new page from a nearest neighbor node when mem-offline
  2016-07-25 20:51 ` Andrew Morton
@ 2016-07-26  1:36   ` Xishi Qiu
  0 siblings, 0 replies; 3+ messages in thread
From: Xishi Qiu @ 2016-07-26  1:36 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Joonsoo Kim, Vlastimil Babka, Naoya Horiguchi, David Rientjes,
	LKML, Linux MM

On 2016/7/26 4:51, Andrew Morton wrote:

> On Mon, 25 Jul 2016 17:53:15 +0800 Xishi Qiu <qiuxishi@huawei.com> wrote:
> 
>> Subject: [PATCH v3] mem-hotplug: alloc new page from a nearest neighbor node when mem-offline
> 
> argh.
> 
> This is "v3" but there is no v1 and no v2.  Please don't change the
> name of patches in this manner.  Or if you do, please be clear which
> patch is being updated.
> 
> I'll drop your
> mem-hotplug-use-different-mempolicy-in-alloc_migrate_target.patch.
> 

Hi Andrew,

Sorry for the confusion of title.

The following patches are all the old versions and please drop them all.

[PATCH] mem-hotplug: use GFP_HIGHUSER_MOVABLE and alloc from next node in alloc_migrate_target()
[PATCH 1/2] mem-hotplug: use GFP_HIGHUSER_MOVABLE in, alloc_migrate_target()
[PATCH 2/2] mem-hotplug: use different mempolicy in alloc_migrate_target()
[PATCH v2] mem-hotplug: alloc new page from the next node if zone is MOVABLE_ZONE

Thanks,
Xishi Qiu

> .
> 



--
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>

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2016-07-26  1:55 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-07-25  9:53 [PATCH v3] mem-hotplug: alloc new page from a nearest neighbor node when mem-offline Xishi Qiu
2016-07-25 20:51 ` Andrew Morton
2016-07-26  1:36   ` Xishi Qiu

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).