Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1649572 > unrolled thread
| Started by | Michal Hocko <mhocko@kernel.org> |
|---|---|
| First post | 2017-05-24 14:30 +0200 |
| Last post | 2017-05-25 08:30 +0200 |
| Articles | 5 — 3 participants |
Back to article view | Back to linux.kernel
This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by
below is the oldest one visible, not the original post.
[RFC PATCH 1/2] mm, memory_hotplug: drop artificial restriction on online/offline Michal Hocko <mhocko@kernel.org> - 2017-05-24 14:30 +0200
Re: [RFC PATCH 1/2] mm, memory_hotplug: drop artificial restriction on online/offline Vlastimil Babka <vbabka@suse.cz> - 2017-05-24 14:50 +0200
Re: [RFC PATCH 1/2] mm, memory_hotplug: drop artificial restriction on online/offline Michal Hocko <mhocko@kernel.org> - 2017-05-24 15:00 +0200
Re: [RFC PATCH 1/2] mm, memory_hotplug: drop artificial restriction on online/offline Reza Arbab <arbab@linux.vnet.ibm.com> - 2017-05-25 00:00 +0200
Re: [RFC PATCH 1/2] mm, memory_hotplug: drop artificial restriction on online/offline Michal Hocko <mhocko@kernel.org> - 2017-05-25 08:30 +0200
| From | Michal Hocko <mhocko@kernel.org> |
|---|---|
| Date | 2017-05-24 14:30 +0200 |
| Subject | [RFC PATCH 1/2] mm, memory_hotplug: drop artificial restriction on online/offline |
| Message-ID | <tKDAm-2jq-5@gated-at.bofh.it> |
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
[toc] | [next] | [standalone]
| From | Vlastimil Babka <vbabka@suse.cz> |
|---|---|
| Date | 2017-05-24 14:50 +0200 |
| Subject | Re: [RFC PATCH 1/2] mm, memory_hotplug: drop artificial restriction on online/offline |
| Message-ID | <tKDTI-2pQ-27@gated-at.bofh.it> |
| In reply to | #1649572 |
On 05/24/2017 02:24 PM, Michal Hocko wrote:
> 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")
That's the same commit as above... one of them should be different?
> 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>
-
Some editing issue?
Otherwise makes sense to me.
Acked-by: Vlastimil Babka <vbabka@suse.cz>
> ---
> 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);
>
[toc] | [prev] | [next] | [standalone]
| From | Michal Hocko <mhocko@kernel.org> |
|---|---|
| Date | 2017-05-24 15:00 +0200 |
| Subject | Re: [RFC PATCH 1/2] mm, memory_hotplug: drop artificial restriction on online/offline |
| Message-ID | <tKE3o-2t8-11@gated-at.bofh.it> |
| In reply to | #1649590 |
On Wed 24-05-17 14:44:34, Vlastimil Babka wrote:
> On 05/24/2017 02:24 PM, Michal Hocko wrote:
> > 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")
>
> That's the same commit as above... one of them should be different?
This used to be two different patches which I decided to fold together
and I didn't realize that both online and offline paths were introduced
by the same patch.
[...]
> Some editing issue?
yes result of merging two commits.
> Otherwise makes sense to me.
> Acked-by: Vlastimil Babka <vbabka@suse.cz>
Thanks! Updated version follows
---
From 5196f9e206d780ac473075aa0ad88308409f5acb Mon Sep 17 00:00:00 2001
From: Michal Hocko <mhocko@suse.com>
Date: Tue, 23 May 2017 10:32:04 +0200
Subject: [PATCH] mm, memory_hotplug: drop artificial restriction on
online/offline
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. Likewise_offline_normal checks the
amount of normal memory in !movable zones and it disallows to offline
memory if there is no normal memory left with a justification that
"memory-management acts bad when we have nodes which is online but don't
have any normal memory".
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.
Acked-by: Acked-by: Vlastimil Babka <vbabka@suse.cz>
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
--
Michal Hocko
SUSE Labs
[toc] | [prev] | [next] | [standalone]
| From | Reza Arbab <arbab@linux.vnet.ibm.com> |
|---|---|
| Date | 2017-05-25 00:00 +0200 |
| Subject | Re: [RFC PATCH 1/2] mm, memory_hotplug: drop artificial restriction on online/offline |
| Message-ID | <tKMtX-7Lj-17@gated-at.bofh.it> |
| In reply to | #1649572 |
On Wed, May 24, 2017 at 02:24:10PM +0200, Michal Hocko wrote:
>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.
I'm really liking all this cleanup of the memory hotplug code. Thanks!
Much appreciated.
Acked-by: Reza Arbab <arbab@linux.vnet.ibm.com>
--
Reza Arbab
[toc] | [prev] | [next] | [standalone]
| From | Michal Hocko <mhocko@kernel.org> |
|---|---|
| Date | 2017-05-25 08:30 +0200 |
| Subject | Re: [RFC PATCH 1/2] mm, memory_hotplug: drop artificial restriction on online/offline |
| Message-ID | <tKUrv-4D7-1@gated-at.bofh.it> |
| In reply to | #1649983 |
On Wed 24-05-17 16:50:56, Reza Arbab wrote:
> On Wed, May 24, 2017 at 02:24:10PM +0200, Michal Hocko wrote:
> >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.
>
> I'm really liking all this cleanup of the memory hotplug code. Thanks! Much
> appreciated.
I am glad to hear that and more is to come.
> Acked-by: Reza Arbab <arbab@linux.vnet.ibm.com>
Thanks!
--
Michal Hocko
SUSE Labs
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web