Messages in this thread | | | Subject | Re: [PATCH] Memory hot added,The memory can not been added to movable zone | From | Changsheng Liu <> | Date | Tue, 25 Aug 2015 18:25:24 +0800 |
| |
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 写道: > Hi > On Thu, 20 Aug 2015 14:15:13 +0800 > Changsheng Liu <liuchangsheng@inspur.com> 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@inspur.com> wrote: >>> >>>> From: Changsheng Liu <liuchangcheng@inspur.com> >>>> >>>> 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; >>> >>> _ >>> >>> . >>> > . >
| |