From: Uladzislau Rezki <urezki@gmail.com>
To: Chen Wandun <chenwandun@huawei.com>
Cc: akpm@linux-foundation.org, npiggin@gmail.com, linux-mm@kvack.org,
linux-kernel@vger.kernel.org, edumazet@google.com,
wangkefeng.wang@huawei.com, guohanjun@huawei.com
Subject: Re: [PATCH] mm/vmalloc: fix numa spreading for large hash tables
Date: Thu, 14 Oct 2021 12:01:57 +0200 [thread overview]
Message-ID: <20211014100157.GA1844@pc638.lan> (raw)
In-Reply-To: <20210928121040.2547407-1-chenwandun@huawei.com>
On Tue, Sep 28, 2021 at 08:10:40PM +0800, Chen Wandun wrote:
> Eric Dumazet reported a strange numa spreading info in [1], and found
> commit 121e6f3258fe ("mm/vmalloc: hugepage vmalloc mappings") introduced
> this issue [2].
>
> Dig into the difference before and after this patch, page allocation has
> some difference:
>
> before:
> alloc_large_system_hash
> __vmalloc
> __vmalloc_node(..., NUMA_NO_NODE, ...)
> __vmalloc_node_range
> __vmalloc_area_node
> alloc_page /* because NUMA_NO_NODE, so choose alloc_page branch */
> alloc_pages_current
> alloc_page_interleave /* can be proved by print policy mode */
>
> after:
> alloc_large_system_hash
> __vmalloc
> __vmalloc_node(..., NUMA_NO_NODE, ...)
> __vmalloc_node_range
> __vmalloc_area_node
> alloc_pages_node /* choose nid by nuam_mem_id() */
> __alloc_pages_node(nid, ....)
>
> So after commit 121e6f3258fe ("mm/vmalloc: hugepage vmalloc mappings"),
> it will allocate memory in current node instead of interleaving allocate
> memory.
>
> [1]
> https://lore.kernel.org/linux-mm/CANn89iL6AAyWhfxdHO+jaT075iOa3XcYn9k6JJc7JR2XYn6k_Q@mail.gmail.com/
>
> [2]
> https://lore.kernel.org/linux-mm/CANn89iLofTR=AK-QOZY87RdUZENCZUT4O6a0hvhu3_EwRMerOg@mail.gmail.com/
>
> Fixes: 121e6f3258fe ("mm/vmalloc: hugepage vmalloc mappings")
> Reported-by: Eric Dumazet <edumazet@google.com>
> Signed-off-by: Chen Wandun <chenwandun@huawei.com>
> ---
> mm/vmalloc.c | 33 ++++++++++++++++++++++++++-------
> 1 file changed, 26 insertions(+), 7 deletions(-)
>
> diff --git a/mm/vmalloc.c b/mm/vmalloc.c
> index f884706c5280..48e717626e94 100644
> --- a/mm/vmalloc.c
> +++ b/mm/vmalloc.c
> @@ -2823,6 +2823,8 @@ vm_area_alloc_pages(gfp_t gfp, int nid,
> unsigned int order, unsigned int nr_pages, struct page **pages)
> {
> unsigned int nr_allocated = 0;
> + struct page *page;
> + int i;
>
> /*
> * For order-0 pages we make use of bulk allocator, if
> @@ -2833,6 +2835,7 @@ vm_area_alloc_pages(gfp_t gfp, int nid,
> if (!order) {
> while (nr_allocated < nr_pages) {
> unsigned int nr, nr_pages_request;
> + page = NULL;
>
> /*
> * A maximum allowed request is hard-coded and is 100
> @@ -2842,9 +2845,23 @@ vm_area_alloc_pages(gfp_t gfp, int nid,
> */
> nr_pages_request = min(100U, nr_pages - nr_allocated);
>
> - nr = alloc_pages_bulk_array_node(gfp, nid,
> - nr_pages_request, pages + nr_allocated);
> -
> + if (nid == NUMA_NO_NODE) {
>
<snip>
void *vmalloc(unsigned long size)
{
return __vmalloc_node(size, 1, GFP_KERNEL, NUMA_NO_NODE,
__builtin_return_address(0));
}
EXPORT_SYMBOL(vmalloc);
<snip>
vmalloc() uses NUMA_NO_NODE, so all vmalloc calls will be reverted to a single
page allocator for NUMA and non-NUMA systems. Is it intentional to bypass the
optimized bulk allocator for non-NUMA systems?
Thanks!
--
Vlad Rezki
next prev parent reply other threads:[~2021-10-14 10:02 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-09-28 12:10 [PATCH] mm/vmalloc: fix numa spreading for large hash tables Chen Wandun
2021-09-28 22:33 ` Andrew Morton
2021-10-14 8:50 ` Chen Wandun
2021-10-13 21:46 ` Shakeel Butt
2021-10-14 8:59 ` Chen Wandun
2021-10-15 1:34 ` Nicholas Piggin
2021-10-15 2:31 ` Chen Wandun
2021-10-15 7:11 ` Nicholas Piggin
2021-10-15 11:51 ` Eric Dumazet
2021-10-18 8:45 ` Chen Wandun
2021-10-16 16:46 ` Uladzislau Rezki
2021-10-14 9:29 ` [PATCH] mm/vmalloc: introduce alloc_pages_bulk_array_mempolicy to accelerate memory allocation Chen Wandun
2021-10-15 21:13 ` Andrew Morton
2021-10-16 16:27 ` Uladzislau Rezki
2021-10-14 10:01 ` Uladzislau Rezki [this message]
2021-10-15 2:20 ` [PATCH] mm/vmalloc: fix numa spreading for large hash tables Chen Wandun
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=20211014100157.GA1844@pc638.lan \
--to=urezki@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=chenwandun@huawei.com \
--cc=edumazet@google.com \
--cc=guohanjun@huawei.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=npiggin@gmail.com \
--cc=wangkefeng.wang@huawei.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.