On 9 Jul 2025, at 4:03, Pankaj Raghav wrote: > Hi Zi, > >>> Add a config option STATIC_PMD_ZERO_PAGE that will always allocate the huge_zero_folio via >>> memblock, and it will never be freed. >> >> Do the above users want a PMD sized zero page or a 2MB zero page? Because on systems with non >> 4KB base page size, e.g., ARM64 with 64KB base page, PMD size is different. ARM64 with 64KB base >> page has 512MB PMD sized pages. Having STATIC_PMD_ZERO_PAGE means losing half GB memory. I am >> not sure if it is acceptable. >> > > That is a good point. My intial RFC patches allocated 2M instead of a PMD sized > page. > > But later David wanted to reuse the memory we allocate here with huge_zero_folio. So > if this config is enabled, we simply just use the same pointer for huge_zero_folio. > > Since that happened, I decided to go with PMD sized page. Got it. Thank you for the explanation. This means for your use cases 2MB is big enough. For those arch which have PMD > 2MB, ideally, a 2MB zero mTHP should be used. Thinking about this feature long term, I wonder what we should do to support arch with PMD > 2MB. Make the static huge zero page size a boot time parameter? > > This config is still opt in and I would expect the users with 64k page size systems to not enable > this. > > But to make sure we don't enable this for those architecture, I could do a per-arch opt in with > something like this[1] that I did in my previous patch: > > diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig > index 340e5468980e..c3a9d136ec0a 100644 > --- a/arch/x86/Kconfig > +++ b/arch/x86/Kconfig > @@ -153,6 +153,7 @@ config X86 > select ARCH_WANT_OPTIMIZE_HUGETLB_VMEMMAP if X86_64 > select ARCH_WANT_HUGETLB_VMEMMAP_PREINIT if X86_64 > select ARCH_WANTS_THP_SWAP if X86_64 > + select ARCH_HAS_STATIC_PMD_ZERO_PAGE if X86_64 > select ARCH_HAS_PARANOID_L1D_FLUSH > select ARCH_WANT_IRQS_OFF_ACTIVATE_MM > select BUILDTIME_TABLE_SORT > > > diff --git a/mm/Kconfig b/mm/Kconfig > index 781be3240e21..fd1c51995029 100644 > --- a/mm/Kconfig > +++ b/mm/Kconfig > @@ -826,6 +826,19 @@ config ARCH_WANTS_THP_SWAP > config MM_ID > def_bool n > > +config ARCH_HAS_STATIC_PMD_ZERO_PAGE > + def_bool n > + > +config STATIC_PMD_ZERO_PAGE > + bool "Allocate a PMD page for zeroing" > + depends on ARCH_HAS_STATIC_PMD_ZERO_PAGE > <snip> > > Let me know your thoughts. Sounds good to me, since without STATIC_PMD_ZERO_PAGE, when THP is enabled, the use cases you mentioned are still able to use the THP zero page. Thanks. > > [1] https://lore.kernel.org/linux-mm/20250612105100.59144-4-p.raghav@xxxxxxxxxxx/#Z31mm:Kconfig > -- > Pankaj Best Regards, Yan, Zi