From: Michal Hocko <mhocko@kernel.org> To: linux-mm@kvack.org Cc: Andrew Morton <akpm@linux-foundation.org>, Mel Gorman <mgorman@suse.de>, Vlastimil Babka <vbabka@suse.cz>, Andrea Arcangeli <aarcange@redhat.com>, Jerome Glisse <jglisse@redhat.com>, Reza Arbab <arbab@linux.vnet.ibm.com>, Yasuaki Ishimatsu <yasu.isimatu@gmail.com>, qiuxishi@huawei.com, Kani Toshimitsu <toshi.kani@hpe.com>, slaoub@gmail.com, Joonsoo Kim <js1304@gmail.com>, Andi Kleen <ak@linux.intel.com>, David Rientjes <rientjes@google.com>, Daniel Kiper <daniel.kiper@oracle.com>, Igor Mammedov <imammedo@redhat.com>, Vitaly Kuznetsov <vkuznets@redhat.com>, LKML <linux-kernel@vger.kernel.org>, Michal Hocko <mhocko@suse.com> Subject: [RFC PATCH 1/2] mm, memory_hotplug: drop artificial restriction on online/offline Date: Wed, 24 May 2017 14:24:10 +0200 [thread overview] Message-ID: <20170524122411.25212-2-mhocko@kernel.org> (raw) In-Reply-To: <20170524122411.25212-1-mhocko@kernel.org> From: Michal Hocko <mhocko@suse.com> 74d42d8fe146 ("memory_hotplug: ensure every online node has NORMAL memory") has added can_offline_normal which checks the amount of memory in !movable zones as long as CONFIG_MOVABLE_NODE is disable. It disallows to offline memory if there is nothing left with a justification that "memory-management acts bad when we have nodes which is online but don't have any normal memory". 74d42d8fe146 ("memory_hotplug: ensure every online node has NORMAL memory") has introduced a restriction that every numa node has to have at least some memory in !movable zones before a first movable memory can be onlined if !CONFIG_MOVABLE_NODE with the same justification While it is true that not having _any_ memory for kernel allocations on a NUMA node is far from great and such a node would be quite subotimal because all kernel allocations will have to fallback to another NUMA node but there is no reason to disallow such a configuration in principle. Besides that there is not really a big difference to have one memblock for ZONE_NORMAL available or none. With 128MB size memblocks the system might trash on the kernel allocations requests anyway. It is really hard to draw a line on how much normal memory is really sufficient so we have to rely on administrator to configure system sanely therefore drop the artificial restriction and remove can_offline_normal and can_online_high_movable altogether. Signed-off-by: Michal Hocko <mhocko@suse.com> mm, memory_hotplug: drop can_online_high_movable because "memory-management acts bad when we have nodes which is online but don't have any normal memory. Signed-off-by: Michal Hocko <mhocko@suse.com> --- mm/memory_hotplug.c | 58 ----------------------------------------------------- 1 file changed, 58 deletions(-) diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c index 599c675ad538..10052c2fd400 100644 --- a/mm/memory_hotplug.c +++ b/mm/memory_hotplug.c @@ -763,23 +763,6 @@ static int online_pages_range(unsigned long start_pfn, unsigned long nr_pages, return 0; } -#ifdef CONFIG_MOVABLE_NODE -/* - * When CONFIG_MOVABLE_NODE, we permit onlining of a node which doesn't have - * normal memory. - */ -static bool can_online_high_movable(int nid) -{ - return true; -} -#else /* CONFIG_MOVABLE_NODE */ -/* ensure every online node has NORMAL memory */ -static bool can_online_high_movable(int nid) -{ - return node_state(nid, N_NORMAL_MEMORY); -} -#endif /* 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, struct zone *zone, struct memory_notify *arg) @@ -979,9 +962,6 @@ int __ref online_pages(unsigned long pfn, unsigned long nr_pages, int online_typ if (!allow_online_pfn_range(nid, pfn, nr_pages, online_type)) return -EINVAL; - if (online_type == MMOP_ONLINE_MOVABLE && !can_online_high_movable(nid)) - return -EINVAL; - /* associate pfn range with the zone */ zone = move_pfn_range(online_type, nid, pfn, nr_pages); @@ -1579,41 +1559,6 @@ check_pages_isolated(unsigned long start_pfn, unsigned long end_pfn) return offlined; } -#ifdef CONFIG_MOVABLE_NODE -/* - * When CONFIG_MOVABLE_NODE, we permit offlining of a node which doesn't have - * normal memory. - */ -static bool can_offline_normal(struct zone *zone, unsigned long nr_pages) -{ - return true; -} -#else /* 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) -{ - struct pglist_data *pgdat = zone->zone_pgdat; - unsigned long present_pages = 0; - enum zone_type zt; - - for (zt = 0; zt <= ZONE_NORMAL; zt++) - present_pages += pgdat->node_zones[zt].present_pages; - - if (present_pages > nr_pages) - return true; - - present_pages = 0; - for (; zt <= ZONE_MOVABLE; zt++) - present_pages += pgdat->node_zones[zt].present_pages; - - /* - * we can't offline the last normal memory until all - * higher memory is offlined. - */ - return present_pages == 0; -} -#endif /* CONFIG_MOVABLE_NODE */ - static int __init cmdline_parse_movable_node(char *p) { #ifdef CONFIG_MOVABLE_NODE @@ -1741,9 +1686,6 @@ static int __ref __offline_pages(unsigned long start_pfn, node = zone_to_nid(zone); nr_pages = end_pfn - start_pfn; - if (zone_idx(zone) <= ZONE_NORMAL && !can_offline_normal(zone, nr_pages)) - return -EINVAL; - /* set above range as isolated */ ret = start_isolate_page_range(start_pfn, end_pfn, MIGRATE_MOVABLE, true); -- 2.11.0
WARNING: multiple messages have this Message-ID (diff)
From: Michal Hocko <mhocko@kernel.org> To: linux-mm@kvack.org Cc: Andrew Morton <akpm@linux-foundation.org>, Mel Gorman <mgorman@suse.de>, Vlastimil Babka <vbabka@suse.cz>, Andrea Arcangeli <aarcange@redhat.com>, Jerome Glisse <jglisse@redhat.com>, Reza Arbab <arbab@linux.vnet.ibm.com>, Yasuaki Ishimatsu <yasu.isimatu@gmail.com>, qiuxishi@huawei.com, Kani Toshimitsu <toshi.kani@hpe.com>, slaoub@gmail.com, Joonsoo Kim <js1304@gmail.com>, Andi Kleen <ak@linux.intel.com>, David Rientjes <rientjes@google.com>, Daniel Kiper <daniel.kiper@oracle.com>, Igor Mammedov <imammedo@redhat.com>, Vitaly Kuznetsov <vkuznets@redhat.com>, LKML <linux-kernel@vger.kernel.org>, Michal Hocko <mhocko@suse.com> Subject: [RFC PATCH 1/2] mm, memory_hotplug: drop artificial restriction on online/offline Date: Wed, 24 May 2017 14:24:10 +0200 [thread overview] Message-ID: <20170524122411.25212-2-mhocko@kernel.org> (raw) In-Reply-To: <20170524122411.25212-1-mhocko@kernel.org> From: Michal Hocko <mhocko@suse.com> 74d42d8fe146 ("memory_hotplug: ensure every online node has NORMAL memory") has added can_offline_normal which checks the amount of memory in !movable zones as long as CONFIG_MOVABLE_NODE is disable. It disallows to offline memory if there is nothing left with a justification that "memory-management acts bad when we have nodes which is online but don't have any normal memory". 74d42d8fe146 ("memory_hotplug: ensure every online node has NORMAL memory") has introduced a restriction that every numa node has to have at least some memory in !movable zones before a first movable memory can be onlined if !CONFIG_MOVABLE_NODE with the same justification While it is true that not having _any_ memory for kernel allocations on a NUMA node is far from great and such a node would be quite subotimal because all kernel allocations will have to fallback to another NUMA node but there is no reason to disallow such a configuration in principle. Besides that there is not really a big difference to have one memblock for ZONE_NORMAL available or none. With 128MB size memblocks the system might trash on the kernel allocations requests anyway. It is really hard to draw a line on how much normal memory is really sufficient so we have to rely on administrator to configure system sanely therefore drop the artificial restriction and remove can_offline_normal and can_online_high_movable altogether. Signed-off-by: Michal Hocko <mhocko@suse.com> mm, memory_hotplug: drop can_online_high_movable because "memory-management acts bad when we have nodes which is online but don't have any normal memory. Signed-off-by: Michal Hocko <mhocko@suse.com> --- mm/memory_hotplug.c | 58 ----------------------------------------------------- 1 file changed, 58 deletions(-) diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c index 599c675ad538..10052c2fd400 100644 --- a/mm/memory_hotplug.c +++ b/mm/memory_hotplug.c @@ -763,23 +763,6 @@ static int online_pages_range(unsigned long start_pfn, unsigned long nr_pages, return 0; } -#ifdef CONFIG_MOVABLE_NODE -/* - * When CONFIG_MOVABLE_NODE, we permit onlining of a node which doesn't have - * normal memory. - */ -static bool can_online_high_movable(int nid) -{ - return true; -} -#else /* CONFIG_MOVABLE_NODE */ -/* ensure every online node has NORMAL memory */ -static bool can_online_high_movable(int nid) -{ - return node_state(nid, N_NORMAL_MEMORY); -} -#endif /* 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, struct zone *zone, struct memory_notify *arg) @@ -979,9 +962,6 @@ int __ref online_pages(unsigned long pfn, unsigned long nr_pages, int online_typ if (!allow_online_pfn_range(nid, pfn, nr_pages, online_type)) return -EINVAL; - if (online_type == MMOP_ONLINE_MOVABLE && !can_online_high_movable(nid)) - return -EINVAL; - /* associate pfn range with the zone */ zone = move_pfn_range(online_type, nid, pfn, nr_pages); @@ -1579,41 +1559,6 @@ check_pages_isolated(unsigned long start_pfn, unsigned long end_pfn) return offlined; } -#ifdef CONFIG_MOVABLE_NODE -/* - * When CONFIG_MOVABLE_NODE, we permit offlining of a node which doesn't have - * normal memory. - */ -static bool can_offline_normal(struct zone *zone, unsigned long nr_pages) -{ - return true; -} -#else /* 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) -{ - struct pglist_data *pgdat = zone->zone_pgdat; - unsigned long present_pages = 0; - enum zone_type zt; - - for (zt = 0; zt <= ZONE_NORMAL; zt++) - present_pages += pgdat->node_zones[zt].present_pages; - - if (present_pages > nr_pages) - return true; - - present_pages = 0; - for (; zt <= ZONE_MOVABLE; zt++) - present_pages += pgdat->node_zones[zt].present_pages; - - /* - * we can't offline the last normal memory until all - * higher memory is offlined. - */ - return present_pages == 0; -} -#endif /* CONFIG_MOVABLE_NODE */ - static int __init cmdline_parse_movable_node(char *p) { #ifdef CONFIG_MOVABLE_NODE @@ -1741,9 +1686,6 @@ static int __ref __offline_pages(unsigned long start_pfn, node = zone_to_nid(zone); nr_pages = end_pfn - start_pfn; - if (zone_idx(zone) <= ZONE_NORMAL && !can_offline_normal(zone, nr_pages)) - return -EINVAL; - /* set above range as isolated */ ret = start_isolate_page_range(start_pfn, end_pfn, MIGRATE_MOVABLE, true); -- 2.11.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>
next prev parent reply other threads:[~2017-05-24 12:24 UTC|newest] Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top 2017-05-24 12:24 [RFC PATCH 0/2] remove CONFIG_MOVABLE_NODE Michal Hocko 2017-05-24 12:24 ` Michal Hocko 2017-05-24 12:24 ` Michal Hocko [this message] 2017-05-24 12:24 ` [RFC PATCH 1/2] mm, memory_hotplug: drop artificial restriction on online/offline Michal Hocko 2017-05-24 12:44 ` Vlastimil Babka 2017-05-24 12:44 ` Vlastimil Babka 2017-05-24 12:55 ` Michal Hocko 2017-05-24 12:55 ` Michal Hocko 2017-05-24 21:50 ` Reza Arbab 2017-05-24 21:50 ` Reza Arbab 2017-05-25 6:28 ` Michal Hocko 2017-05-25 6:28 ` Michal Hocko 2017-05-24 12:24 ` [RFC PATCH 2/2] mm, memory_hotplug: drop CONFIG_MOVABLE_NODE Michal Hocko 2017-05-24 12:24 ` Michal Hocko 2017-05-24 12:53 ` Vlastimil Babka 2017-05-24 12:53 ` Vlastimil Babka 2017-05-24 13:42 ` Michal Hocko 2017-05-24 13:42 ` Michal Hocko 2017-05-24 15:17 ` Vlastimil Babka 2017-05-24 15:17 ` Vlastimil Babka 2017-05-25 6:27 ` Michal Hocko 2017-05-25 6:27 ` Michal Hocko 2017-05-25 8:41 ` Vlastimil Babka 2017-05-25 8:41 ` Vlastimil Babka 2017-05-24 13:30 ` Igor Mammedov 2017-05-24 13:30 ` Igor Mammedov 2017-05-24 13:50 ` Michal Hocko 2017-05-24 13:50 ` Michal Hocko 2017-05-24 21:51 ` Reza Arbab 2017-05-24 21:51 ` Reza Arbab 2017-05-25 12:03 ` [RFC PATCH 0/2] remove CONFIG_MOVABLE_NODE Michal Hocko 2017-05-25 12:03 ` Michal Hocko
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20170524122411.25212-2-mhocko@kernel.org \ --to=mhocko@kernel.org \ --cc=aarcange@redhat.com \ --cc=ak@linux.intel.com \ --cc=akpm@linux-foundation.org \ --cc=arbab@linux.vnet.ibm.com \ --cc=daniel.kiper@oracle.com \ --cc=imammedo@redhat.com \ --cc=jglisse@redhat.com \ --cc=js1304@gmail.com \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-mm@kvack.org \ --cc=mgorman@suse.de \ --cc=mhocko@suse.com \ --cc=qiuxishi@huawei.com \ --cc=rientjes@google.com \ --cc=slaoub@gmail.com \ --cc=toshi.kani@hpe.com \ --cc=vbabka@suse.cz \ --cc=vkuznets@redhat.com \ --cc=yasu.isimatu@gmail.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.