Re: [PATCH v4 10/27] mm/sparse: allow for alternate vmemmap section init at boot

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Feb 27, 2025 at 9:32 AM Frank van der Linden <fvdl@xxxxxxxxxx> wrote:
>
> On Thu, Feb 27, 2025 at 9:20 AM Johannes Weiner <hannes@xxxxxxxxxxx> wrote:
> >
> > On Thu, Feb 27, 2025 at 08:47:18AM -0800, Frank van der Linden wrote:
> > > On Wed, Feb 26, 2025 at 10:09 AM Johannes Weiner <hannes@xxxxxxxxxxx> wrote:
> > > >
> > > > On Tue, Feb 18, 2025 at 06:16:38PM +0000, Frank van der Linden wrote:
> > > > > @@ -489,6 +489,14 @@ config SPARSEMEM_VMEMMAP
> > > > >         SPARSEMEM_VMEMMAP uses a virtually mapped memmap to optimise
> > > > >         pfn_to_page and page_to_pfn operations.  This is the most
> > > > >         efficient option when sufficient kernel resources are available.
> > > > > +
> > > > > +config ARCH_WANT_SPARSEMEM_VMEMMAP_PREINIT
> > > > > +     bool
> > > > > +
> > > > > +config SPARSEMEM_VMEMMAP_PREINIT
> > > > > +     bool "Early init of sparse memory virtual memmap"
> > > > > +     depends on SPARSEMEM_VMEMMAP && ARCH_WANT_SPARSEMEM_VMEMMAP_PREINIT
> > > > > +     default y
> > > >
> > > > oldconfig just prompted me on this, but it's not clear to me what it
> > > > does. Not even after skimming the changelog of the patch to be honest.
> > > >
> > > > Can you please add a help text that explains the user-visible effects
> > > > of the toggle, as well as guidance as to who might care to change it?
> > >
> > > Hi Johannes,
> > >
> > > Thanks for your comment. How's this:
> >
> > Thanks for the quick reply!
> >
> > > Enables subsystems to pre-initialize memmap in their own way,
> > > allowing for memory savings during boot. The HugeTLB code uses
> > > this to initialize memmap for bootmem allocated gigantic hugepages
> > > in a way that is done by HUGETLB_PAGE_OPTIMIZE_VMEMMAP. This
> > > means saving this memory right away, instead of allocating it
> > > first and then freeing it later. Not allocating these pages
> > > at all during boot allows for specifying a bigger number of
> > > hugepages on the kernel commandline on larger systems.
> >
> > That makes sense.
> >
> > But if it's infra code for a hugetlb feature, it should either be
> > something that HUGETLB_PAGE_OPTIMIZE_VMEMMAP pulls in automatically,
> > or at least be a hugetlb-specific option that pulls it in.
> >
> > Keep in mind that not everybody enables HUGETLBFS. In fact, hugetlb is
> > default N. It's moot to ask users whether they want to enable infra
> > code for a feature they aren't using, and default to Y no less. You're
> > regressing innocent bystanders doing this.
>
> The main reason that I added a separate config was:
>
> 1) I could see other subsystems use this.
> 2) The number of section flags is limited, so I wanted to put the one
> I added inside an option instead of always using it.
>
> If especially 2) is not a concern or can be solved differently, I'll
> be happy to remove the option. I don't particularly like having it,
> but I didn't see a better way.
>
> Let me think of a way to clean this up a little, and suggestions are
> welcome, of course.
>
> - Frank

I'll just do:

diff --git a/fs/Kconfig b/fs/Kconfig
index 64d420e3c475..fb9831927a08 100644
--- a/fs/Kconfig
+++ b/fs/Kconfig
@@ -286,6 +286,7 @@ config HUGETLB_PAGE_OPTIMIZE_VMEMMAP
        def_bool HUGETLB_PAGE
        depends on ARCH_WANT_OPTIMIZE_HUGETLB_VMEMMAP
        depends on SPARSEMEM_VMEMMAP
+       select SPARSEMEM_VMEMMAP_PREINIT

 config HUGETLB_PMD_PAGE_TABLE_SHARING
        def_bool HUGETLB_PAGE
diff --git a/mm/Kconfig b/mm/Kconfig
index f984dd928ce7..44b52f8e5296 100644
--- a/mm/Kconfig
+++ b/mm/Kconfig
@@ -496,7 +496,6 @@ config ARCH_WANT_SPARSEMEM_VMEMMAP_PREINIT
 config SPARSEMEM_VMEMMAP_PREINIT
        bool "Early init of sparse memory virtual memmap"
        depends on SPARSEMEM_VMEMMAP && ARCH_WANT_SPARSEMEM_VMEMMAP_PREINIT
-       default y

Does that seem ok? I'll send an mm-unstable follow-up patch.

- Frank





[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux