Systems with hotplug may provide an advisement value on what the
memblock size should be. Probe this value when the rest of the
configuration values are considered.
The new heuristic is as follows
1) set_memory_block_size_order value if already set (cmdline param)
2) minimum block size if memory is less than large block limit
3) if no hotplug advice: Max block size if system is bare-metal,
otherwise use end of memory alignment.
4) if hotplug advice: lesser of advice and end of memory alignment.
Suggested-by: David Hildenbrand <david@redhat.com>
Signed-off-by: Gregory Price <gourry@gourry.net>
Acked-by: David Hildenbrand <david@redhat.com>
---
arch/x86/mm/init_64.c | 15 ++++++++++-----
1 file changed, 10 insertions(+), 5 deletions(-)
diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
index ff253648706f..f1a495e998ce 100644
--- a/arch/x86/mm/init_64.c
+++ b/arch/x86/mm/init_64.c
@@ -1452,16 +1452,21 @@ static unsigned long probe_memory_block_size(void)
}
/*
- * Use max block size to minimize overhead on bare metal, where
- * alignment for memory hotplug isn't a concern.
+ * When hotplug alignment is not a concern, maximize blocksize
+ * to minimize overhead. Otherwise, align to the lesser of advice
+ * alignment and end of memory alignment.
*/
- if (!boot_cpu_has(X86_FEATURE_HYPERVISOR)) {
+ bz = memory_block_advised_max_size();
+ if (!bz) {
bz = MAX_BLOCK_SIZE;
- goto done;
+ if (!boot_cpu_has(X86_FEATURE_HYPERVISOR))
+ goto done;
+ } else {
+ bz = max(min(bz, MAX_BLOCK_SIZE), MIN_MEMORY_BLOCK_SIZE);
}
/* Find the largest allowed block size that aligns to memory end */
- for (bz = MAX_BLOCK_SIZE; bz > MIN_MEMORY_BLOCK_SIZE; bz >>= 1) {
+ for (; bz > MIN_MEMORY_BLOCK_SIZE; bz >>= 1) {
if (IS_ALIGNED(boot_mem_end, bz))
break;
}
--
2.43.0
On Fri, Nov 01, 2024 at 09:47:04AM -0400, Gregory Price wrote: > Systems with hotplug may provide an advisement value on what the > memblock size should be. Probe this value when the rest of the > configuration values are considered. > > The new heuristic is as follows > > 1) set_memory_block_size_order value if already set (cmdline param) > 2) minimum block size if memory is less than large block limit > 3) if no hotplug advice: Max block size if system is bare-metal, > otherwise use end of memory alignment. > 4) if hotplug advice: lesser of advice and end of memory alignment. > > Suggested-by: David Hildenbrand <david@redhat.com> > Signed-off-by: Gregory Price <gourry@gourry.net> > Acked-by: David Hildenbrand <david@redhat.com> Acked-by: Mike Rapoport (Microsoft) <rppt@kernel.org> > --- > arch/x86/mm/init_64.c | 15 ++++++++++----- > 1 file changed, 10 insertions(+), 5 deletions(-) > > diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c > index ff253648706f..f1a495e998ce 100644 > --- a/arch/x86/mm/init_64.c > +++ b/arch/x86/mm/init_64.c > @@ -1452,16 +1452,21 @@ static unsigned long probe_memory_block_size(void) > } > > /* > - * Use max block size to minimize overhead on bare metal, where > - * alignment for memory hotplug isn't a concern. > + * When hotplug alignment is not a concern, maximize blocksize > + * to minimize overhead. Otherwise, align to the lesser of advice > + * alignment and end of memory alignment. > */ > - if (!boot_cpu_has(X86_FEATURE_HYPERVISOR)) { > + bz = memory_block_advised_max_size(); > + if (!bz) { > bz = MAX_BLOCK_SIZE; > - goto done; > + if (!boot_cpu_has(X86_FEATURE_HYPERVISOR)) > + goto done; > + } else { > + bz = max(min(bz, MAX_BLOCK_SIZE), MIN_MEMORY_BLOCK_SIZE); > } > > /* Find the largest allowed block size that aligns to memory end */ > - for (bz = MAX_BLOCK_SIZE; bz > MIN_MEMORY_BLOCK_SIZE; bz >>= 1) { > + for (; bz > MIN_MEMORY_BLOCK_SIZE; bz >>= 1) { > if (IS_ALIGNED(boot_mem_end, bz)) > break; > } > -- > 2.43.0 > -- Sincerely yours, Mike.
On Fri, Nov 01, 2024 at 09:47:04AM -0400, Gregory Price wrote: > Systems with hotplug may provide an advisement value on what the > memblock size should be. Probe this value when the rest of the > configuration values are considered. > > The new heuristic is as follows > > 1) set_memory_block_size_order value if already set (cmdline param) > 2) minimum block size if memory is less than large block limit > 3) if no hotplug advice: Max block size if system is bare-metal, > otherwise use end of memory alignment. > 4) if hotplug advice: lesser of advice and end of memory alignment. > > Suggested-by: David Hildenbrand <david@redhat.com> > Signed-off-by: Gregory Price <gourry@gourry.net> > Acked-by: David Hildenbrand <david@redhat.com> > --- > arch/x86/mm/init_64.c | 15 ++++++++++----- > 1 file changed, 10 insertions(+), 5 deletions(-) > > diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c > index ff253648706f..f1a495e998ce 100644 > --- a/arch/x86/mm/init_64.c > +++ b/arch/x86/mm/init_64.c > @@ -1452,16 +1452,21 @@ static unsigned long probe_memory_block_size(void) > } > > /* > - * Use max block size to minimize overhead on bare metal, where > - * alignment for memory hotplug isn't a concern. > + * When hotplug alignment is not a concern, maximize blocksize > + * to minimize overhead. Otherwise, align to the lesser of advice > + * alignment and end of memory alignment. > */ > - if (!boot_cpu_has(X86_FEATURE_HYPERVISOR)) { > + bz = memory_block_advised_max_size(); > + if (!bz) { > bz = MAX_BLOCK_SIZE; > - goto done; > + if (!boot_cpu_has(X86_FEATURE_HYPERVISOR)) s/boot_cpu_has/cpu_feature_enabled/ while at it. -- Regards/Gruss, Boris. https://people.kernel.org/tglx/notes-about-netiquette
On Fri, Nov 01, 2024 at 04:51:47PM +0100, Borislav Petkov wrote: > On Fri, Nov 01, 2024 at 09:47:04AM -0400, Gregory Price wrote: > > Systems with hotplug may provide an advisement value on what the > > memblock size should be. Probe this value when the rest of the > > configuration values are considered. > > > > The new heuristic is as follows > > > > 1) set_memory_block_size_order value if already set (cmdline param) > > 2) minimum block size if memory is less than large block limit > > 3) if no hotplug advice: Max block size if system is bare-metal, > > otherwise use end of memory alignment. > > 4) if hotplug advice: lesser of advice and end of memory alignment. > > > > Suggested-by: David Hildenbrand <david@redhat.com> > > Signed-off-by: Gregory Price <gourry@gourry.net> > > Acked-by: David Hildenbrand <david@redhat.com> > > --- > > arch/x86/mm/init_64.c | 15 ++++++++++----- > > 1 file changed, 10 insertions(+), 5 deletions(-) > > > > diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c > > index ff253648706f..f1a495e998ce 100644 > > --- a/arch/x86/mm/init_64.c > > +++ b/arch/x86/mm/init_64.c > > @@ -1452,16 +1452,21 @@ static unsigned long probe_memory_block_size(void) > > } > > > > /* > > - * Use max block size to minimize overhead on bare metal, where > > - * alignment for memory hotplug isn't a concern. > > + * When hotplug alignment is not a concern, maximize blocksize > > + * to minimize overhead. Otherwise, align to the lesser of advice > > + * alignment and end of memory alignment. > > */ > > - if (!boot_cpu_has(X86_FEATURE_HYPERVISOR)) { > > + bz = memory_block_advised_max_size(); > > + if (!bz) { > > bz = MAX_BLOCK_SIZE; > > - goto done; > > + if (!boot_cpu_has(X86_FEATURE_HYPERVISOR)) > > s/boot_cpu_has/cpu_feature_enabled/ > > while at it. > I don't personally understand the implications of this switch off hand, probably warrants a separate patch submission if you think it's important given the original logic is boot_cpu_has and I don't want to increase scope change here. ~Gregory > -- > Regards/Gruss, > Boris. > > https://people.kernel.org/tglx/notes-about-netiquette
On Fri, Nov 01, 2024 at 12:19:08PM -0400, Gregory Price wrote: > I don't personally understand the implications of this switch off hand, > probably warrants a separate patch submission if you think it's important > given the original logic is boot_cpu_has and I don't want to increase > scope change here. We want to switch the code to cpu_feature_enabled(): https://lore.kernel.org/r/20241031103401.GBZyNdGQ-ZyXKyzC_z@fat_crate.local and it is not increasing the scope at all. You can simply say: "Convert to cpu_feature_enabled() while at it." in the commit message. Thx. -- Regards/Gruss, Boris. https://people.kernel.org/tglx/notes-about-netiquette
On 11/1/24 06:47, Gregory Price wrote: > Systems with hotplug may provide an advisement value on what the > memblock size should be. Probe this value when the rest of the > configuration values are considered. It's too bad this doesn't simplify any of the arch code, but it's also not making it much worse. I assume this is something that will go through the mm tree, so: Acked-by: Dave Hansen <dave.hansen@linux.intel.com>
© 2016 - 2024 Red Hat, Inc.