Thread (12 messages) 12 messages, 4 authors, 2015-08-26

Re: [PATCH] Memory hot added,The memory can not been added to movable zone

From: Changsheng Liu <hidden>
Date: 2015-08-25 11:49:38


a?? 2015/8/25 19:13, Vlastimil Babka a??e??:
On 08/25/2015 12:25 PM, Changsheng Liu wrote:
quoted
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.
a?? 2015/8/25 3:15, Yasuaki Ishimatsu a??e??:
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.
quoted
quoted
Hi
On Thu, 20 Aug 2015 14:15:13 +0800
Changsheng Liu [off-list ref] wrote:
quoted
Hi Andrew Morton:
First, thanks very much for your review, I will update codes according
to  your suggestio

a?? 2015/8/20 7:50, Andrew Morton a??e??:
quoted
On Wed, 19 Aug 2015 04:18:26 -0400 Changsheng Liu 
[off-list ref] wrote:
quoted
From: Changsheng Liu <redacted>

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
quoted
       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
quoted
quoted
--- 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;
_

.
.
.
  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help