diff mbox series

[v6,07/16] x86/mm/64: Disable PMD page mapping of vmemmap

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

Commit Message

Muchun Song Nov. 24, 2020, 9:52 a.m. UTC
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(-)

Comments

Oscar Salvador Nov. 24, 2020, 10:24 a.m. UTC | #1
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?
Song Bao Hua (Barry Song) Nov. 24, 2020, 10:31 a.m. UTC | #2
> -----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
Muchun Song Nov. 24, 2020, 11:13 a.m. UTC | #3
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 mbox series

Patch

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))