All of lore.kernel.org
 help / color / mirror / Atom feed
From: Oscar Salvador <osalvador@suse.de>
To: Muchun Song <songmuchun@bytedance.com>
Cc: Jonathan Corbet <corbet@lwn.net>,
	Mike Kravetz <mike.kravetz@oracle.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	mingo@redhat.com, bp@alien8.de, x86@kernel.org, hpa@zytor.com,
	dave.hansen@linux.intel.com, luto@kernel.org,
	Peter Zijlstra <peterz@infradead.org>,
	viro@zeniv.linux.org.uk,
	Andrew Morton <akpm@linux-foundation.org>,
	paulmck@kernel.org, mchehab+huawei@kernel.org,
	pawan.kumar.gupta@linux.intel.com,
	Randy Dunlap <rdunlap@infradead.org>,
	oneukum@suse.com, anshuman.khandual@arm.com, jroedel@suse.de,
	Mina Almasry <almasrymina@google.com>,
	David Rientjes <rientjes@google.com>,
	Matthew Wilcox <willy@infradead.org>,
	Michal Hocko <mhocko@suse.com>,
	"Song Bao Hua (Barry Song)" <song.bao.hua@hisilicon.com>,
	David Hildenbrand <david@redhat.com>,
	Xiongchun duan <duanxiongchun@bytedance.com>,
	linux-doc@vger.kernel.org, LKML <linux-kernel@vger.kernel.org>,
	Linux Memory Management List <linux-mm@kvack.org>,
	linux-fsdevel <linux-fsdevel@vger.kernel.org>
Subject: Re: [External] Re: [PATCH v9 08/11] mm/hugetlb: Add a kernel parameter hugetlb_free_vmemmap
Date: Wed, 16 Dec 2020 23:10:05 +0100	[thread overview]
Message-ID: <20201216221005.GA3207@localhost.localdomain> (raw)
In-Reply-To: <CAMZfGtUj4jng7Ay+c0h=N3b88+sz+A6Awa2r2DT+j9PFrXXBGQ@mail.gmail.com>

On Thu, Dec 17, 2020 at 12:04:11AM +0800, Muchun Song wrote:
> On Wed, Dec 16, 2020 at 10:40 PM Oscar Salvador <osalvador@suse.de> wrote:
> >
> > On Sun, Dec 13, 2020 at 11:45:31PM +0800, Muchun Song wrote:
> > > Add a kernel parameter hugetlb_free_vmemmap to disable the feature of
> > > freeing unused vmemmap pages associated with each hugetlb page on boot.
> > I guess this should read "to enable the feature"?
> > AFAICS, it is disabled by default.

It still would be great to have an answer for that.

Thanks


> > >  Documentation/admin-guide/kernel-parameters.txt |  9 +++++++++
> > >  Documentation/admin-guide/mm/hugetlbpage.rst    |  3 +++
> > >  arch/x86/mm/init_64.c                           |  8 ++++++--
> > >  include/linux/hugetlb.h                         | 19 +++++++++++++++++++
> > >  mm/hugetlb_vmemmap.c                            | 16 ++++++++++++++++
> > >  5 files changed, 53 insertions(+), 2 deletions(-)
> > >
> > > diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
> > > index 3ae25630a223..9e6854f21d55 100644
> > > --- a/Documentation/admin-guide/kernel-parameters.txt
> > > +++ b/Documentation/admin-guide/kernel-parameters.txt
> > > @@ -1551,6 +1551,15 @@
> > >                       Documentation/admin-guide/mm/hugetlbpage.rst.
> > >                       Format: size[KMG]
> > >
> > > +     hugetlb_free_vmemmap=
> > > +                     [KNL] When CONFIG_HUGETLB_PAGE_FREE_VMEMMAP is set,
> > > +                     this controls freeing unused vmemmap pages associated
> > > +                     with each HugeTLB page.
> > > +                     Format: { on | off (default) }
> > > +
> > > +                     on:  enable the feature
> > > +                     off: disable the feature
> > > +
> > >       hung_task_panic=
> > >                       [KNL] Should the hung task detector generate panics.
> > >                       Format: 0 | 1
> > > diff --git a/Documentation/admin-guide/mm/hugetlbpage.rst b/Documentation/admin-guide/mm/hugetlbpage.rst
> > > index f7b1c7462991..3a23c2377acc 100644
> > > --- a/Documentation/admin-guide/mm/hugetlbpage.rst
> > > +++ b/Documentation/admin-guide/mm/hugetlbpage.rst
> > > @@ -145,6 +145,9 @@ default_hugepagesz
> > >
> > >       will all result in 256 2M huge pages being allocated.  Valid default
> > >       huge page size is architecture dependent.
> > > +hugetlb_free_vmemmap
> > > +     When CONFIG_HUGETLB_PAGE_FREE_VMEMMAP is set, this enables freeing
> > > +     unused vmemmap pages associated with each HugeTLB page.
> > >
> > >  When multiple huge page sizes are supported, ``/proc/sys/vm/nr_hugepages``
> > >  indicates the current number of pre-allocated huge pages of the default size.
> > > diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
> > > index 0435bee2e172..1bce5f20e6ca 100644
> > > --- a/arch/x86/mm/init_64.c
> > > +++ b/arch/x86/mm/init_64.c
> > > @@ -34,6 +34,7 @@
> > >  #include <linux/gfp.h>
> > >  #include <linux/kcore.h>
> > >  #include <linux/bootmem_info.h>
> > > +#include <linux/hugetlb.h>
> > >
> > >  #include <asm/processor.h>
> > >  #include <asm/bios_ebda.h>
> > > @@ -1557,7 +1558,8 @@ 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_hugetlb_free_vmemmap_enabled() ||
> > > +         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);
> > > @@ -1585,6 +1587,8 @@ void register_page_bootmem_memmap(unsigned long section_nr,
> > >       pmd_t *pmd;
> > >       unsigned int nr_pmd_pages;
> > >       struct page *page;
> > > +     bool base_mapping = !boot_cpu_has(X86_FEATURE_PSE) ||
> > > +                         is_hugetlb_free_vmemmap_enabled();
> > >
> > >       for (; addr < end; addr = next) {
> > >               pte_t *pte = NULL;
> > > @@ -1610,7 +1614,7 @@ 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 (base_mapping) {
> > >                       next = (addr + PAGE_SIZE) & PAGE_MASK;
> > >                       pmd = pmd_offset(pud, addr);
> > >                       if (pmd_none(*pmd))
> > > diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h
> > > index ebca2ef02212..7f47f0eeca3b 100644
> > > --- a/include/linux/hugetlb.h
> > > +++ b/include/linux/hugetlb.h
> > > @@ -770,6 +770,20 @@ static inline void huge_ptep_modify_prot_commit(struct vm_area_struct *vma,
> > >  }
> > >  #endif
> > >
> > > +#ifdef CONFIG_HUGETLB_PAGE_FREE_VMEMMAP
> > > +extern bool hugetlb_free_vmemmap_enabled;
> > > +
> > > +static inline bool is_hugetlb_free_vmemmap_enabled(void)
> > > +{
> > > +     return hugetlb_free_vmemmap_enabled;
> > > +}
> > > +#else
> > > +static inline bool is_hugetlb_free_vmemmap_enabled(void)
> > > +{
> > > +     return false;
> > > +}
> > > +#endif
> > > +
> > >  #else        /* CONFIG_HUGETLB_PAGE */
> > >  struct hstate {};
> > >
> > > @@ -923,6 +937,11 @@ static inline void set_huge_swap_pte_at(struct mm_struct *mm, unsigned long addr
> > >                                       pte_t *ptep, pte_t pte, unsigned long sz)
> > >  {
> > >  }
> > > +
> > > +static inline bool is_hugetlb_free_vmemmap_enabled(void)
> > > +{
> > > +     return false;
> > > +}
> > >  #endif       /* CONFIG_HUGETLB_PAGE */
> > >
> > >  static inline spinlock_t *huge_pte_lock(struct hstate *h,
> > > diff --git a/mm/hugetlb_vmemmap.c b/mm/hugetlb_vmemmap.c
> > > index 02201c2e3dfa..64ad929cac61 100644
> > > --- a/mm/hugetlb_vmemmap.c
> > > +++ b/mm/hugetlb_vmemmap.c
> > > @@ -180,6 +180,22 @@
> > >  #define RESERVE_VMEMMAP_NR           2U
> > >  #define RESERVE_VMEMMAP_SIZE         (RESERVE_VMEMMAP_NR << PAGE_SHIFT)
> > >
> > > +bool hugetlb_free_vmemmap_enabled;
> > > +
> > > +static int __init early_hugetlb_free_vmemmap_param(char *buf)
> > > +{
> > > +     if (!buf)
> > > +             return -EINVAL;
> > > +
> > > +     if (!strcmp(buf, "on"))
> > > +             hugetlb_free_vmemmap_enabled = true;
> > > +     else if (strcmp(buf, "off"))
> > > +             return -EINVAL;
> > > +
> > > +     return 0;
> > > +}
> > > +early_param("hugetlb_free_vmemmap", early_hugetlb_free_vmemmap_param);
> > > +
> > >  static inline unsigned long free_vmemmap_pages_size_per_hpage(struct hstate *h)
> > >  {
> > >       return (unsigned long)free_vmemmap_pages_per_hpage(h) << PAGE_SHIFT;
> > > --
> > > 2.11.0
> > >
> >
> > --
> > Oscar Salvador
> > SUSE L3
> 
> 
> 
> -- 
> Yours,
> Muchun

-- 
Oscar Salvador
SUSE L3

  reply	other threads:[~2020-12-16 22:11 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-13 15:45 [PATCH v9 00/11] Free some vmemmap pages of HugeTLB page Muchun Song
2020-12-13 15:45 ` [PATCH v9 01/11] mm/memory_hotplug: Factor out bootmem core functions to bootmem_info.c Muchun Song
2020-12-13 15:45 ` [PATCH v9 02/11] mm/hugetlb: Introduce a new config HUGETLB_PAGE_FREE_VMEMMAP Muchun Song
2020-12-16  1:03   ` Mike Kravetz
2020-12-16  3:24     ` [External] " Muchun Song
2020-12-16  3:45     ` Mike Kravetz
2020-12-16  3:52       ` [External] " Muchun Song
2020-12-13 15:45 ` [PATCH v9 03/11] mm/hugetlb: Free the vmemmap pages associated with each HugeTLB page Muchun Song
2020-12-16 13:06   ` Oscar Salvador
2020-12-16 13:15     ` [External] " Muchun Song
2020-12-16 22:08   ` Mike Kravetz
2020-12-16 22:25     ` Oscar Salvador
2020-12-16 22:49       ` Mike Kravetz
2020-12-17  6:54         ` [External] " Muchun Song
2020-12-17  9:05           ` Muchun Song
2020-12-17  4:06     ` Muchun Song
2020-12-13 15:45 ` [PATCH v9 04/11] mm/hugetlb: Defer freeing of HugeTLB pages Muchun Song
2020-12-16 23:48   ` Mike Kravetz
2020-12-17  3:19     ` [External] " Muchun Song
2020-12-13 15:45 ` [PATCH v9 05/11] mm/hugetlb: Allocate the vmemmap pages associated with each HugeTLB page Muchun Song
2020-12-17  1:17   ` Mike Kravetz
2020-12-17  3:22     ` [External] " Muchun Song
2020-12-13 15:45 ` [PATCH v9 06/11] mm/hugetlb: Set the PageHWPoison to the raw error page Muchun Song
2020-12-16 13:28   ` Oscar Salvador
2020-12-16 13:51     ` [External] " Muchun Song
2020-12-16 13:30   ` Oscar Salvador
2020-12-13 15:45 ` [PATCH v9 07/11] mm/hugetlb: Flush work when dissolving hugetlb page Muchun Song
2020-12-13 15:45 ` [PATCH v9 08/11] mm/hugetlb: Add a kernel parameter hugetlb_free_vmemmap Muchun Song
2020-12-16 14:40   ` Oscar Salvador
2020-12-16 16:04     ` [External] " Muchun Song
2020-12-16 22:10       ` Oscar Salvador [this message]
2020-12-17  2:45         ` Muchun Song
2020-12-13 15:45 ` [PATCH v9 09/11] mm/hugetlb: Introduce nr_free_vmemmap_pages in the struct hstate Muchun Song
2020-12-16 13:43   ` Oscar Salvador
2020-12-16 13:56     ` [External] " Muchun Song
2020-12-16 22:12       ` Oscar Salvador
2020-12-17  8:34     ` Muchun Song
2020-12-13 15:45 ` [PATCH v9 10/11] mm/hugetlb: Gather discrete indexes of tail page Muchun Song
2020-12-16 14:03   ` Oscar Salvador
2020-12-16 14:26     ` [External] " Muchun Song
2020-12-13 15:45 ` [PATCH v9 11/11] mm/hugetlb: Optimize the code with the help of the compiler Muchun Song
2020-12-17 10:31   ` Oscar Salvador
2020-12-17 10:42     ` [External] " Muchun Song

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20201216221005.GA3207@localhost.localdomain \
    --to=osalvador@suse.de \
    --cc=akpm@linux-foundation.org \
    --cc=almasrymina@google.com \
    --cc=anshuman.khandual@arm.com \
    --cc=bp@alien8.de \
    --cc=corbet@lwn.net \
    --cc=dave.hansen@linux.intel.com \
    --cc=david@redhat.com \
    --cc=duanxiongchun@bytedance.com \
    --cc=hpa@zytor.com \
    --cc=jroedel@suse.de \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=luto@kernel.org \
    --cc=mchehab+huawei@kernel.org \
    --cc=mhocko@suse.com \
    --cc=mike.kravetz@oracle.com \
    --cc=mingo@redhat.com \
    --cc=oneukum@suse.com \
    --cc=paulmck@kernel.org \
    --cc=pawan.kumar.gupta@linux.intel.com \
    --cc=peterz@infradead.org \
    --cc=rdunlap@infradead.org \
    --cc=rientjes@google.com \
    --cc=song.bao.hua@hisilicon.com \
    --cc=songmuchun@bytedance.com \
    --cc=tglx@linutronix.de \
    --cc=viro@zeniv.linux.org.uk \
    --cc=willy@infradead.org \
    --cc=x86@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.