在 2015/8/25 19:13, Vlastimil Babka 写道:
On
08/25/2015 12:25 PM, Changsheng Liu wrote:
Thanks very much for your review, I can
move the memory from normal zone
to movable zone succesfully.
And thank you for let me understand the memory mechanism better.
在 2015/8/25 3:15, Yasuaki Ishimatsu 写道:
So you agree to drop the patch from -mm?
The patch using movable_node_is_enabled() will provide a more
direct approach to add the hot-added memory to movable zone If we
want to remove the whole node.
Hi
On Thu, 20 Aug 2015 14:15:13 +0800
Changsheng Liu <liuchangsheng@xxxxxxxxxx> wrote:
Hi Andrew Morton:
First, thanks very much for your review, I will update codes
according
to your suggestio
在 2015/8/20 7:50, Andrew Morton 写道:
On Wed, 19 Aug 2015 04:18:26 -0400
Changsheng Liu <liuchangsheng@xxxxxxxxxx> wrote:
From: Changsheng Liu
<liuchangcheng@xxxxxxxxxx>
When memory hot added, the function
should_add_memory_movable
always return 0,because the movable zone is empty,
so the memory that hot added will add to normal zone
even if
we want to remove the memory.
So we change the function should_add_memory_movable,if
the user
config CONFIG_MOVABLE_NODE it will return 1 when
movable zone is empty
I cleaned this up a bit:
: Subject: mm: memory hot-add: memory can not been added
to movable zone
:
: When memory is hot added, should_add_memory_movable()
always returns 0
: because the movable zone is empty, so the memory that
was hot added will
: add to the normal zone even if we want to remove the
memory.
:
: So we change should_add_memory_movable(): if the user
config
: CONFIG_MOVABLE_NODE it will return 1 when the movable
zone is empty.
But I don't understand the "even if we want to remove the
memory".
This is hot-add, not hot-remove. What do you mean here?
After the system startup, we hot added one memory.
After some time
we wanted to hot remove the memroy that was hot added,
but we could not offline some memory blocks
successfully because
the memory was added to normal zone defaultly and the value
of the file
named removable under some memory blocks is 0.
For this, we prepared online_movable. When memory is onlined
by online_movable,
the memory move from ZONE_NORMAL to ZONE_MOVABLE.
Ex.
# echo online_movable >
/sys/devices/system/memory/memoryXXX/state
Thanks,
Yasuaki Ishimatsu
we checked the value of the
file under some memory blocks as follows:
"cat /sys/devices/system/memory/ memory***/removable"
When memory being hot added we let the memory be
added to movable
zone,
so we will be able to hot remove the memory that have
been hot added
--- a/mm/memory_hotplug.c
+++ b/mm/memory_hotplug.c
@@ -1198,9 +1198,13 @@ static int
should_add_memory_movable(int nid, u64 start, u64 size)
pg_data_t *pgdat = NODE_DATA(nid);
struct zone *movable_zone = pgdat->node_zones
+ ZONE_MOVABLE;
- if (zone_is_empty(movable_zone))
+ if (zone_is_empty(movable_zone)) {
+ #ifdef CONFIG_MOVABLE_NODE
+ return 1;
+ #else
return 0;
-
+ #endif
+ }
if (movable_zone->zone_start_pfn <=
start_pfn)
return 1;
Cleaner:
---
a/mm/memory_hotplug.c~memory-hot-addedthe-memory-can-not-been-added-to-movable-zone-fix
+++ a/mm/memory_hotplug.c
@@ -1181,13 +1181,9 @@ static int
should_add_memory_movable(int
pg_data_t *pgdat = NODE_DATA(nid);
struct zone *movable_zone = pgdat->node_zones +
ZONE_MOVABLE;
- if (zone_is_empty(movable_zone)) {
- #ifdef CONFIG_MOVABLE_NODE
- return 1;
- #else
- return 0;
- #endif
- }
+ if (zone_is_empty(movable_zone))
+ return IS_ENABLED(CONFIG_MOVABLE_NODE);
+
if (movable_zone->zone_start_pfn <=
start_pfn)
return 1;
_
.
.
.
|