linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* [PART4 Patch 0/2] memory-hotplug: allow online/offline memory to result movable node
@ 2012-10-31  8:15 Wen Congyang
  2012-10-31  8:15 ` [PART4 Patch 1/2] numa: add CONFIG_MOVABLE_NODE for movable-dedicated node Wen Congyang
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Wen Congyang @ 2012-10-31  8:15 UTC (permalink / raw)
  To: linux-kernel, linux-mm, linux-doc
  Cc: Rob Landley, Andrew Morton, Yasuaki Ishimatsu, Lai Jiangshan,
	Jiang Liu, KOSAKI Motohiro, Minchan Kim, Mel Gorman,
	David Rientjes, Yinghai Lu, rusty

From: Lai Jiangshan <laijs@cn.fujitsu.com>

This patch is part4 of the following patchset:
    https://lkml.org/lkml/2012/10/29/319

Part1 is here:
    https://lkml.org/lkml/2012/10/31/30

Part2 is here:
    http://marc.info/?l=linux-kernel&m=135166705909544&w=2

Part3 is here:
    http://marc.info/?l=linux-kernel&m=135167050510527&w=2

You must apply part1-3 before applying this patchset.

we need a node which only contains movable memory. This feature is very
important for node hotplug. If a node has normal/highmem, the memory
may be used by the kernel and can't be offlined. If the node only contains
movable memory, we can offline the memory and the node.


Lai Jiangshan (2):
  numa: add CONFIG_MOVABLE_NODE for movable-dedicated node
  memory_hotplug: allow online/offline memory to result movable node

 drivers/base/node.c      |  6 ++++++
 include/linux/nodemask.h |  4 ++++
 mm/Kconfig               |  8 ++++++++
 mm/memory_hotplug.c      | 16 ++++++++++++++++
 mm/page_alloc.c          |  3 +++
 5 files changed, 37 insertions(+)

-- 
1.8.0

--
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] 4+ messages in thread

* [PART4 Patch 1/2] numa: add CONFIG_MOVABLE_NODE for movable-dedicated node
  2012-10-31  8:15 [PART4 Patch 0/2] memory-hotplug: allow online/offline memory to result movable node Wen Congyang
@ 2012-10-31  8:15 ` Wen Congyang
  2012-10-31  8:15 ` [PART4 Patch 2/2] memory_hotplug: allow online/offline memory to result movable node Wen Congyang
  2012-11-15  9:59 ` [PART4 Patch 0/2] memory-hotplug: " Yasuaki Ishimatsu
  2 siblings, 0 replies; 4+ messages in thread
From: Wen Congyang @ 2012-10-31  8:15 UTC (permalink / raw)
  To: linux-kernel, linux-mm, linux-doc
  Cc: Rob Landley, Andrew Morton, Yasuaki Ishimatsu, Lai Jiangshan,
	Jiang Liu, KOSAKI Motohiro, Minchan Kim, Mel Gorman,
	David Rientjes, Yinghai Lu, rusty

From: Lai Jiangshan <laijs@cn.fujitsu.com>

All are prepared, we can actually introduce N_MEMORY.
add CONFIG_MOVABLE_NODE make we can use it for movable-dedicated node

Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com>
---
 drivers/base/node.c      | 6 ++++++
 include/linux/nodemask.h | 4 ++++
 mm/Kconfig               | 8 ++++++++
 mm/page_alloc.c          | 3 +++
 4 files changed, 21 insertions(+)

diff --git a/drivers/base/node.c b/drivers/base/node.c
index 4c3aa7c..9cdd66f 100644
--- a/drivers/base/node.c
+++ b/drivers/base/node.c
@@ -620,6 +620,9 @@ static struct node_attr node_state_attr[] = {
 #ifdef CONFIG_HIGHMEM
 	[N_HIGH_MEMORY] = _NODE_ATTR(has_high_memory, N_HIGH_MEMORY),
 #endif
+#ifdef CONFIG_MOVABLE_NODE
+	[N_MEMORY] = _NODE_ATTR(has_memory, N_MEMORY),
+#endif
 	[N_CPU] = _NODE_ATTR(has_cpu, N_CPU),
 };
 
@@ -630,6 +633,9 @@ static struct attribute *node_state_attrs[] = {
 #ifdef CONFIG_HIGHMEM
 	&node_state_attr[N_HIGH_MEMORY].attr.attr,
 #endif
+#ifdef CONFIG_MOVABLE_NODE
+	&node_state_attr[N_MEMORY].attr.attr,
+#endif
 	&node_state_attr[N_CPU].attr.attr,
 	NULL
 };
diff --git a/include/linux/nodemask.h b/include/linux/nodemask.h
index c6ebdc9..4e2cbfa 100644
--- a/include/linux/nodemask.h
+++ b/include/linux/nodemask.h
@@ -380,7 +380,11 @@ enum node_states {
 #else
 	N_HIGH_MEMORY = N_NORMAL_MEMORY,
 #endif
+#ifdef CONFIG_MOVABLE_NODE
+	N_MEMORY,		/* The node has memory(regular, high, movable) */
+#else
 	N_MEMORY = N_HIGH_MEMORY,
+#endif
 	N_CPU,		/* The node has one or more cpus */
 	NR_NODE_STATES
 };
diff --git a/mm/Kconfig b/mm/Kconfig
index a3f8ddd..957ebd5 100644
--- a/mm/Kconfig
+++ b/mm/Kconfig
@@ -143,6 +143,14 @@ config NO_BOOTMEM
 config MEMORY_ISOLATION
 	boolean
 
+config MOVABLE_NODE
+	boolean "Enable to assign a node has only movable memory"
+	depends on HAVE_MEMBLOCK
+	depends on NO_BOOTMEM
+	depends on X86_64
+	depends on NUMA
+	default y
+
 # eventually, we can have this option just 'select SPARSEMEM'
 config MEMORY_HOTPLUG
 	bool "Allow for memory hot-add"
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index f1f44d5..3641761 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -90,6 +90,9 @@ nodemask_t node_states[NR_NODE_STATES] __read_mostly = {
 #ifdef CONFIG_HIGHMEM
 	[N_HIGH_MEMORY] = { { [0] = 1UL } },
 #endif
+#ifdef CONFIG_MOVABLE_NODE
+	[N_MEMORY] = { { [0] = 1UL } },
+#endif
 	[N_CPU] = { { [0] = 1UL } },
 #endif	/* NUMA */
 };
-- 
1.8.0

--
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] 4+ messages in thread

* [PART4 Patch 2/2] memory_hotplug: allow online/offline memory to result movable node
  2012-10-31  8:15 [PART4 Patch 0/2] memory-hotplug: allow online/offline memory to result movable node Wen Congyang
  2012-10-31  8:15 ` [PART4 Patch 1/2] numa: add CONFIG_MOVABLE_NODE for movable-dedicated node Wen Congyang
@ 2012-10-31  8:15 ` Wen Congyang
  2012-11-15  9:59 ` [PART4 Patch 0/2] memory-hotplug: " Yasuaki Ishimatsu
  2 siblings, 0 replies; 4+ messages in thread
From: Wen Congyang @ 2012-10-31  8:15 UTC (permalink / raw)
  To: linux-kernel, linux-mm, linux-doc
  Cc: Rob Landley, Andrew Morton, Yasuaki Ishimatsu, Lai Jiangshan,
	Jiang Liu, KOSAKI Motohiro, Minchan Kim, Mel Gorman,
	David Rientjes, Yinghai Lu, rusty

From: Lai Jiangshan <laijs@cn.fujitsu.com>

Now, memory management can handle movable node or nodes which don't have
any normal memory, so we can dynamic configure and add movable node by:
	online a ZONE_MOVABLE memory from a previous offline node
	offline the last normal memory which result a non-normal-memory-node

movable-node is very important for power-saving,
hardware partitioning and high-available-system(hardware fault management).

Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com>
---
 mm/memory_hotplug.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c
index d07c66f..4aceb03 100644
--- a/mm/memory_hotplug.c
+++ b/mm/memory_hotplug.c
@@ -589,11 +589,19 @@ static int online_pages_range(unsigned long start_pfn, unsigned long nr_pages,
 	return 0;
 }
 
+#ifdef CONFIG_MOVABLE_NODE
+/* when CONFIG_MOVABLE_NODE, we allow online node don't have normal memory */
+static bool can_online_high_movable(struct zone *zone)
+{
+	return true;
+}
+#else /* #ifdef CONFIG_MOVABLE_NODE */
 /* ensure every online node has NORMAL memory */
 static bool can_online_high_movable(struct zone *zone)
 {
 	return node_state(zone_to_nid(zone), N_NORMAL_MEMORY);
 }
+#endif /* #ifdef CONFIG_MOVABLE_NODE */
 
 /* check which state of node_states will be changed when online memory */
 static void node_states_check_changes_online(unsigned long nr_pages,
@@ -1097,6 +1105,13 @@ check_pages_isolated(unsigned long start_pfn, unsigned long end_pfn)
 	return offlined;
 }
 
+#ifdef CONFIG_MOVABLE_NODE
+/* when CONFIG_MOVABLE_NODE, we allow online node don't have normal memory */
+static bool can_offline_normal(struct zone *zone, unsigned long nr_pages)
+{
+	return true;
+}
+#else /* #ifdef CONFIG_MOVABLE_NODE */
 /* ensure the node has NORMAL memory if it is still online */
 static bool can_offline_normal(struct zone *zone, unsigned long nr_pages)
 {
@@ -1120,6 +1135,7 @@ static bool can_offline_normal(struct zone *zone, unsigned long nr_pages)
 	 */
 	return present_pages == 0;
 }
+#endif /* #ifdef CONFIG_MOVABLE_NODE */
 
 /* check which state of node_states will be changed when offline memory */
 static void node_states_check_changes_offline(unsigned long nr_pages,
-- 
1.8.0

--
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] 4+ messages in thread

* Re: [PART4 Patch 0/2] memory-hotplug: allow online/offline memory to result movable node
  2012-10-31  8:15 [PART4 Patch 0/2] memory-hotplug: allow online/offline memory to result movable node Wen Congyang
  2012-10-31  8:15 ` [PART4 Patch 1/2] numa: add CONFIG_MOVABLE_NODE for movable-dedicated node Wen Congyang
  2012-10-31  8:15 ` [PART4 Patch 2/2] memory_hotplug: allow online/offline memory to result movable node Wen Congyang
@ 2012-11-15  9:59 ` Yasuaki Ishimatsu
  2 siblings, 0 replies; 4+ messages in thread
From: Yasuaki Ishimatsu @ 2012-11-15  9:59 UTC (permalink / raw)
  To: Wen Congyang
  Cc: linux-kernel, linux-mm, linux-doc, Rob Landley, Andrew Morton,
	Lai Jiangshan, Jiang Liu, KOSAKI Motohiro, Minchan Kim,
	Mel Gorman, David Rientjes, Yinghai Lu, rusty

2012/10/31 17:15, Wen Congyang wrote:
> From: Lai Jiangshan <laijs@cn.fujitsu.com>
> 
> This patch is part4 of the following patchset:
>      https://lkml.org/lkml/2012/10/29/319
> 
> Part1 is here:
>      https://lkml.org/lkml/2012/10/31/30
> 
> Part2 is here:
>      http://marc.info/?l=linux-kernel&m=135166705909544&w=2
> 
> Part3 is here:
>      http://marc.info/?l=linux-kernel&m=135167050510527&w=2
> 
> You must apply part1-3 before applying this patchset.
> 
> we need a node which only contains movable memory. This feature is very
> important for node hotplug. If a node has normal/highmem, the memory
> may be used by the kernel and can't be offlined. If the node only contains
> movable memory, we can offline the memory and the node.
> 
> 
> Lai Jiangshan (2):
>    numa: add CONFIG_MOVABLE_NODE for movable-dedicated node
>    memory_hotplug: allow online/offline memory to result movable node
> 
>   drivers/base/node.c      |  6 ++++++
>   include/linux/nodemask.h |  4 ++++
>   mm/Kconfig               |  8 ++++++++
>   mm/memory_hotplug.c      | 16 ++++++++++++++++
>   mm/page_alloc.c          |  3 +++
>   5 files changed, 37 insertions(+)
> 

Tested-by: Yasuaki Ishimatsu <isimatu.yasuaki@jp.fujitsu.com>

Thanks,
Yasuaki Ishimatsu

--
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] 4+ messages in thread

end of thread, other threads:[~2012-11-15  9:59 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-10-31  8:15 [PART4 Patch 0/2] memory-hotplug: allow online/offline memory to result movable node Wen Congyang
2012-10-31  8:15 ` [PART4 Patch 1/2] numa: add CONFIG_MOVABLE_NODE for movable-dedicated node Wen Congyang
2012-10-31  8:15 ` [PART4 Patch 2/2] memory_hotplug: allow online/offline memory to result movable node Wen Congyang
2012-11-15  9:59 ` [PART4 Patch 0/2] memory-hotplug: " Yasuaki Ishimatsu

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox