Message ID | 20201124095259.58755-8-songmuchun@bytedance.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Free some vmemmap pages of hugetlb page | expand |
On Tue, Nov 24, 2020 at 05:52:50PM +0800, Muchun Song wrote: > If we enable the CONFIG_HUGETLB_PAGE_FREE_VMEMMAP, we can just > disbale PMD page mapping of vmemmap to simplify the code. In this > case, we do not need complex code doing vmemmap page table > manipulation. This is a way to simply the first version of this > patch series. In the future, we can add some code doing page table > manipulation. IIRC, CONFIG_HUGETLB_PAGE_FREE_VMEMMAP was supposed to be enabled by default, right? And we would control whether we __really__ want to this by a boot option, which was disabled by default? If you go for populating the memmap with basepages by checking CONFIG_HUGETLB_PAGE_FREE_VMEMMAP, would not everybody, even the ones that did not enable this by the boot option be affected?
> -----Original Message----- > From: owner-linux-mm@kvack.org [mailto:owner-linux-mm@kvack.org] On > Behalf Of Oscar Salvador > Sent: Tuesday, November 24, 2020 11:25 PM > To: Muchun Song <songmuchun@bytedance.com> > Cc: corbet@lwn.net; mike.kravetz@oracle.com; tglx@linutronix.de; > mingo@redhat.com; bp@alien8.de; x86@kernel.org; hpa@zytor.com; > dave.hansen@linux.intel.com; luto@kernel.org; peterz@infradead.org; > viro@zeniv.linux.org.uk; akpm@linux-foundation.org; paulmck@kernel.org; > mchehab+huawei@kernel.org; pawan.kumar.gupta@linux.intel.com; > rdunlap@infradead.org; oneukum@suse.com; anshuman.khandual@arm.com; > jroedel@suse.de; almasrymina@google.com; rientjes@google.com; > willy@infradead.org; mhocko@suse.com; Song Bao Hua (Barry Song) > <song.bao.hua@hisilicon.com>; duanxiongchun@bytedance.com; > linux-doc@vger.kernel.org; linux-kernel@vger.kernel.org; linux-mm@kvack.org; > linux-fsdevel@vger.kernel.org > Subject: Re: [PATCH v6 07/16] x86/mm/64: Disable PMD page mapping of > vmemmap > > On Tue, Nov 24, 2020 at 05:52:50PM +0800, Muchun Song wrote: > > If we enable the CONFIG_HUGETLB_PAGE_FREE_VMEMMAP, we can just > > disbale PMD page mapping of vmemmap to simplify the code. In this > > case, we do not need complex code doing vmemmap page table > > manipulation. This is a way to simply the first version of this > > patch series. In the future, we can add some code doing page table > > manipulation. > > IIRC, CONFIG_HUGETLB_PAGE_FREE_VMEMMAP was supposed to be enabled > by default, > right? > And we would control whether we __really__ want to this by a boot option, > which was disabled by default? > > If you go for populating the memmap with basepages by checking > CONFIG_HUGETLB_PAGE_FREE_VMEMMAP, would not everybody, even the > ones that > did not enable this by the boot option be affected? > I would believe we could only bypass the pmd mapping of vmemmap while free_vmemmap is explicitly enabled. pmd mapping shouldn't be disabled in default. Would a cmdline of enabling vmemmap_free be used for the first patchset? > -- > Oscar Salvador > SUSE L3 Thanks Barry
On Tue, Nov 24, 2020 at 6:24 PM Oscar Salvador <osalvador@suse.de> wrote: > > On Tue, Nov 24, 2020 at 05:52:50PM +0800, Muchun Song wrote: > > If we enable the CONFIG_HUGETLB_PAGE_FREE_VMEMMAP, we can just > > disbale PMD page mapping of vmemmap to simplify the code. In this > > case, we do not need complex code doing vmemmap page table > > manipulation. This is a way to simply the first version of this > > patch series. In the future, we can add some code doing page table > > manipulation. > > IIRC, CONFIG_HUGETLB_PAGE_FREE_VMEMMAP was supposed to be enabled by default, > right? > And we would control whether we __really__ want to this by a boot option, > which was disabled by default? > > If you go for populating the memmap with basepages by checking > CONFIG_HUGETLB_PAGE_FREE_VMEMMAP, would not everybody, even the ones that > did not enable this by the boot option be affected? Yeah, this should be improved. We should enable the basepage mapping of vmemmap only when this feature is enabled via boot command line. I will apply the suggestions mentioned by Barry. Thanks. > > -- > Oscar Salvador > SUSE L3
diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c index 0435bee2e172..155cb06a6961 100644 --- a/arch/x86/mm/init_64.c +++ b/arch/x86/mm/init_64.c @@ -1557,7 +1557,9 @@ int __meminit vmemmap_populate(unsigned long start, unsigned long end, int node, { int err; - if (end - start < PAGES_PER_SECTION * sizeof(struct page)) + if (IS_ENABLED(CONFIG_HUGETLB_PAGE_FREE_VMEMMAP)) + err = vmemmap_populate_basepages(start, end, node, NULL); + else if (end - start < PAGES_PER_SECTION * sizeof(struct page)) err = vmemmap_populate_basepages(start, end, node, NULL); else if (boot_cpu_has(X86_FEATURE_PSE)) err = vmemmap_populate_hugepages(start, end, node, altmap); @@ -1610,7 +1612,8 @@ void register_page_bootmem_memmap(unsigned long section_nr, } get_page_bootmem(section_nr, pud_page(*pud), MIX_SECTION_INFO); - if (!boot_cpu_has(X86_FEATURE_PSE)) { + if (!boot_cpu_has(X86_FEATURE_PSE) || + IS_ENABLED(CONFIG_HUGETLB_PAGE_FREE_VMEMMAP)) { next = (addr + PAGE_SIZE) & PAGE_MASK; pmd = pmd_offset(pud, addr); if (pmd_none(*pmd))
If we enable the CONFIG_HUGETLB_PAGE_FREE_VMEMMAP, we can just disbale PMD page mapping of vmemmap to simplify the code. In this case, we do not need complex code doing vmemmap page table manipulation. This is a way to simply the first version of this patch series. In the future, we can add some code doing page table manipulation. Signed-off-by: Muchun Song <songmuchun@bytedance.com> --- arch/x86/mm/init_64.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)