All of lore.kernel.org
 help / color / mirror / Atom feed
From: Nicholas Piggin <npiggin@gmail.com>
To: Andrew Morton <akpm@linux-foundation.org>,
	'Christophe Leroy' <christophe.leroy@csgroup.eu>,
	David Laight <David.Laight@ACULAB.COM>,
	"linux-mm@kvack.org" <linux-mm@kvack.org>
Cc: "Ding Tianhong" <dingtianhong@huawei.com>,
	"Christoph Hellwig" <hch@infradead.org>,
	"Jonathan Cameron" <Jonathan.Cameron@Huawei.com>,
	"linux-arch@vger.kernel.org" <linux-arch@vger.kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"linuxppc-dev@lists.ozlabs.org" <linuxppc-dev@lists.ozlabs.org>,
	"Zefan\
	 Li" <lizefan@huawei.com>,
	"Rick Edgecombe" <rick.p.edgecombe@intel.com>
Subject: RE: [PATCH v10 11/12] mm/vmalloc: Hugepage vmalloc mappings
Date: Tue, 26 Jan 2021 19:50:05 +1000	[thread overview]
Message-ID: <1611654541.je6x6v0xw5.astroid@bobo.none> (raw)
In-Reply-To: <7749b310046c4b9baa07037af1d97d87@AcuMS.aculab.com>

Excerpts from David Laight's message of January 25, 2021 10:24 pm:
> From: Christophe Leroy
>> Sent: 25 January 2021 09:15
>> 
>> Le 24/01/2021 à 09:22, Nicholas Piggin a écrit :
>> > Support huge page vmalloc mappings. Config option HAVE_ARCH_HUGE_VMALLOC
>> > enables support on architectures that define HAVE_ARCH_HUGE_VMAP and
>> > supports PMD sized vmap mappings.
>> >
>> > vmalloc will attempt to allocate PMD-sized pages if allocating PMD size
>> > or larger, and fall back to small pages if that was unsuccessful.
>> >
>> > Architectures must ensure that any arch specific vmalloc allocations
>> > that require PAGE_SIZE mappings (e.g., module allocations vs strict
>> > module rwx) use the VM_NOHUGE flag to inhibit larger mappings.
>> >
>> > When hugepage vmalloc mappings are enabled in the next patch, this
>> > reduces TLB misses by nearly 30x on a `git diff` workload on a 2-node
>> > POWER9 (59,800 -> 2,100) and reduces CPU cycles by 0.54%.
>> >
>> > This can result in more internal fragmentation and memory overhead for a
>> > given allocation, an option nohugevmalloc is added to disable at boot.
>> >
>> > Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
>> > ---
>> >   arch/Kconfig            |  10 +++
>> >   include/linux/vmalloc.h |  18 ++++
>> >   mm/page_alloc.c         |   5 +-
>> >   mm/vmalloc.c            | 192 ++++++++++++++++++++++++++++++----------
>> >   4 files changed, 177 insertions(+), 48 deletions(-)
>> >
>> 
>> > diff --git a/mm/vmalloc.c b/mm/vmalloc.c
>> > index 0377e1d059e5..eef61e0f5170 100644
>> > --- a/mm/vmalloc.c
>> > +++ b/mm/vmalloc.c
>> 
>> > @@ -2691,15 +2746,18 @@ EXPORT_SYMBOL_GPL(vmap_pfn);
>> >   #endif /* CONFIG_VMAP_PFN */
>> >
>> >   static void *__vmalloc_area_node(struct vm_struct *area, gfp_t gfp_mask,
>> > -				 pgprot_t prot, int node)
>> > +				 pgprot_t prot, unsigned int page_shift,
>> > +				 int node)
>> >   {
>> >   	const gfp_t nested_gfp = (gfp_mask & GFP_RECLAIM_MASK) | __GFP_ZERO;
>> > -	unsigned int nr_pages = get_vm_area_size(area) >> PAGE_SHIFT;
>> > -	unsigned long array_size;
>> > -	unsigned int i;
>> > +	unsigned int page_order = page_shift - PAGE_SHIFT;
>> > +	unsigned long addr = (unsigned long)area->addr;
>> > +	unsigned long size = get_vm_area_size(area);
>> > +	unsigned int nr_small_pages = size >> PAGE_SHIFT;
>> >   	struct page **pages;
>> > +	unsigned int i;
>> >
>> > -	array_size = (unsigned long)nr_pages * sizeof(struct page *);
>> > +	array_size = (unsigned long)nr_small_pages * sizeof(struct page *);
>> 
>> array_size() is a function in include/linux/overflow.h
>> 
>> For some reason, it breaks the build with your series.
> 
> I can't see the replacement definition for array_size.
> The old local variable is deleted.

Yeah I saw that after taking another look. Must have sent in a bad diff. 
The v11 fixed that and a couple of other compile issues.

Thanks,
Nick

WARNING: multiple messages have this Message-ID (diff)
From: Nicholas Piggin <npiggin@gmail.com>
To: Andrew Morton <akpm@linux-foundation.org>,
	'Christophe Leroy' <christophe.leroy@csgroup.eu>,
	David Laight <David.Laight@ACULAB.COM>,
	"linux-mm@kvack.org" <linux-mm@kvack.org>
Cc: "linux-arch@vger.kernel.org" <linux-arch@vger.kernel.org>,
	"Ding Tianhong" <dingtianhong@huawei.com>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"Christoph Hellwig" <hch@infradead.org>,
	"Zefan\
	 Li" <lizefan@huawei.com>,
	"Jonathan Cameron" <Jonathan.Cameron@Huawei.com>,
	"Rick Edgecombe" <rick.p.edgecombe@intel.com>,
	"linuxppc-dev@lists.ozlabs.org" <linuxppc-dev@lists.ozlabs.org>
Subject: RE: [PATCH v10 11/12] mm/vmalloc: Hugepage vmalloc mappings
Date: Tue, 26 Jan 2021 19:50:05 +1000	[thread overview]
Message-ID: <1611654541.je6x6v0xw5.astroid@bobo.none> (raw)
In-Reply-To: <7749b310046c4b9baa07037af1d97d87@AcuMS.aculab.com>

Excerpts from David Laight's message of January 25, 2021 10:24 pm:
> From: Christophe Leroy
>> Sent: 25 January 2021 09:15
>> 
>> Le 24/01/2021 à 09:22, Nicholas Piggin a écrit :
>> > Support huge page vmalloc mappings. Config option HAVE_ARCH_HUGE_VMALLOC
>> > enables support on architectures that define HAVE_ARCH_HUGE_VMAP and
>> > supports PMD sized vmap mappings.
>> >
>> > vmalloc will attempt to allocate PMD-sized pages if allocating PMD size
>> > or larger, and fall back to small pages if that was unsuccessful.
>> >
>> > Architectures must ensure that any arch specific vmalloc allocations
>> > that require PAGE_SIZE mappings (e.g., module allocations vs strict
>> > module rwx) use the VM_NOHUGE flag to inhibit larger mappings.
>> >
>> > When hugepage vmalloc mappings are enabled in the next patch, this
>> > reduces TLB misses by nearly 30x on a `git diff` workload on a 2-node
>> > POWER9 (59,800 -> 2,100) and reduces CPU cycles by 0.54%.
>> >
>> > This can result in more internal fragmentation and memory overhead for a
>> > given allocation, an option nohugevmalloc is added to disable at boot.
>> >
>> > Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
>> > ---
>> >   arch/Kconfig            |  10 +++
>> >   include/linux/vmalloc.h |  18 ++++
>> >   mm/page_alloc.c         |   5 +-
>> >   mm/vmalloc.c            | 192 ++++++++++++++++++++++++++++++----------
>> >   4 files changed, 177 insertions(+), 48 deletions(-)
>> >
>> 
>> > diff --git a/mm/vmalloc.c b/mm/vmalloc.c
>> > index 0377e1d059e5..eef61e0f5170 100644
>> > --- a/mm/vmalloc.c
>> > +++ b/mm/vmalloc.c
>> 
>> > @@ -2691,15 +2746,18 @@ EXPORT_SYMBOL_GPL(vmap_pfn);
>> >   #endif /* CONFIG_VMAP_PFN */
>> >
>> >   static void *__vmalloc_area_node(struct vm_struct *area, gfp_t gfp_mask,
>> > -				 pgprot_t prot, int node)
>> > +				 pgprot_t prot, unsigned int page_shift,
>> > +				 int node)
>> >   {
>> >   	const gfp_t nested_gfp = (gfp_mask & GFP_RECLAIM_MASK) | __GFP_ZERO;
>> > -	unsigned int nr_pages = get_vm_area_size(area) >> PAGE_SHIFT;
>> > -	unsigned long array_size;
>> > -	unsigned int i;
>> > +	unsigned int page_order = page_shift - PAGE_SHIFT;
>> > +	unsigned long addr = (unsigned long)area->addr;
>> > +	unsigned long size = get_vm_area_size(area);
>> > +	unsigned int nr_small_pages = size >> PAGE_SHIFT;
>> >   	struct page **pages;
>> > +	unsigned int i;
>> >
>> > -	array_size = (unsigned long)nr_pages * sizeof(struct page *);
>> > +	array_size = (unsigned long)nr_small_pages * sizeof(struct page *);
>> 
>> array_size() is a function in include/linux/overflow.h
>> 
>> For some reason, it breaks the build with your series.
> 
> I can't see the replacement definition for array_size.
> The old local variable is deleted.

Yeah I saw that after taking another look. Must have sent in a bad diff. 
The v11 fixed that and a couple of other compile issues.

Thanks,
Nick

  reply	other threads:[~2021-01-26 11:30 UTC|newest]

Thread overview: 73+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-01-24  8:22 [PATCH v10 00/12] huge vmalloc mappings Nicholas Piggin
2021-01-24  8:22 ` Nicholas Piggin
2021-01-24  8:22 ` [PATCH v10 01/12] mm/vmalloc: fix vmalloc_to_page for huge vmap mappings Nicholas Piggin
2021-01-24  8:22   ` Nicholas Piggin
2021-01-24 11:31   ` Christoph Hellwig
2021-01-24 11:31     ` Christoph Hellwig
2021-01-24  8:22 ` [PATCH v10 02/12] mm: apply_to_pte_range warn and fail if a large pte is encountered Nicholas Piggin
2021-01-24  8:22   ` Nicholas Piggin
2021-01-24 11:32   ` Christoph Hellwig
2021-01-24 11:32     ` Christoph Hellwig
2021-01-24  8:22 ` [PATCH v10 03/12] mm/vmalloc: rename vmap_*_range vmap_pages_*_range Nicholas Piggin
2021-01-24  8:22   ` Nicholas Piggin
2021-01-24 11:34   ` Christoph Hellwig
2021-01-24 11:34     ` Christoph Hellwig
2021-01-24  8:22 ` [PATCH v10 04/12] mm/ioremap: rename ioremap_*_range to vmap_*_range Nicholas Piggin
2021-01-24  8:22   ` Nicholas Piggin
2021-01-24 11:36   ` Christoph Hellwig
2021-01-24 11:36     ` Christoph Hellwig
2021-01-24 12:04     ` Nicholas Piggin
2021-01-24 12:04       ` Nicholas Piggin
2021-01-24  8:22 ` [PATCH v10 05/12] mm: HUGE_VMAP arch support cleanup Nicholas Piggin
2021-01-24  8:22   ` Nicholas Piggin
2021-01-24  8:22   ` Nicholas Piggin
2021-01-24 11:40   ` Christoph Hellwig
2021-01-24 11:40     ` Christoph Hellwig
2021-01-24 11:40     ` Christoph Hellwig
2021-01-24 12:22     ` Nicholas Piggin
2021-01-24 12:22       ` Nicholas Piggin
2021-01-24 12:22       ` Nicholas Piggin
2021-01-25  8:19     ` Christophe Leroy
2021-01-25  8:19       ` Christophe Leroy
2021-01-25  8:19       ` Christophe Leroy
2021-01-25  8:40   ` Christophe Leroy
2021-01-25  8:40     ` Christophe Leroy
2021-01-25  8:40     ` Christophe Leroy
2021-01-24  8:22 ` [PATCH v10 06/12] powerpc: inline huge vmap supported functions Nicholas Piggin
2021-01-24  8:22   ` Nicholas Piggin
2021-01-25  8:42   ` Christophe Leroy
2021-01-25  8:42     ` Christophe Leroy
2021-01-25 11:37     ` Nicholas Piggin
2021-01-25 11:37       ` Nicholas Piggin
2021-01-24  8:22 ` [PATCH v10 07/12] arm64: " Nicholas Piggin
2021-01-24  8:22   ` Nicholas Piggin
2021-01-24  8:22   ` Nicholas Piggin
2021-01-24  8:22 ` [PATCH v10 08/12] x86: " Nicholas Piggin
2021-01-24  8:22   ` Nicholas Piggin
2021-01-24  8:22 ` [PATCH v10 09/12] mm: Move vmap_range from mm/ioremap.c to mm/vmalloc.c Nicholas Piggin
2021-01-24  8:22   ` Nicholas Piggin
2021-01-24 14:49   ` Christoph Hellwig
2021-01-24 14:49     ` Christoph Hellwig
2021-01-24  8:22 ` [PATCH v10 10/12] mm/vmalloc: add vmap_range_noflush variant Nicholas Piggin
2021-01-24  8:22   ` Nicholas Piggin
2021-01-24 14:51   ` Christoph Hellwig
2021-01-24 14:51     ` Christoph Hellwig
2021-01-24  8:22 ` [PATCH v10 11/12] mm/vmalloc: Hugepage vmalloc mappings Nicholas Piggin
2021-01-24  8:22   ` Nicholas Piggin
2021-01-24 15:07   ` Christoph Hellwig
2021-01-24 15:07     ` Christoph Hellwig
2021-01-24 18:06     ` Randy Dunlap
2021-01-24 18:06       ` Randy Dunlap
2021-01-24 23:17     ` Nicholas Piggin
2021-01-24 23:17       ` Nicholas Piggin
2021-01-25  9:14   ` Christophe Leroy
2021-01-25  9:14     ` Christophe Leroy
2021-01-25 11:37     ` Nicholas Piggin
2021-01-25 11:37       ` Nicholas Piggin
2021-01-25 12:13       ` Christophe Leroy
2021-01-25 12:13         ` Christophe Leroy
2021-01-25 12:24     ` David Laight
2021-01-26  9:50       ` Nicholas Piggin [this message]
2021-01-26  9:50         ` Nicholas Piggin
2021-01-24  8:22 ` [PATCH v10 12/12] powerpc/64s/radix: Enable huge " Nicholas Piggin
2021-01-24  8:22   ` Nicholas Piggin

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=1611654541.je6x6v0xw5.astroid@bobo.none \
    --to=npiggin@gmail.com \
    --cc=David.Laight@ACULAB.COM \
    --cc=Jonathan.Cameron@Huawei.com \
    --cc=akpm@linux-foundation.org \
    --cc=christophe.leroy@csgroup.eu \
    --cc=dingtianhong@huawei.com \
    --cc=hch@infradead.org \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=lizefan@huawei.com \
    --cc=rick.p.edgecombe@intel.com \
    /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.