From: "Zi Yan" <ziy@nvidia.com>
To: "Oscar Salvador" <osalvador@suse.de>
Cc: "Andrew Morton" <akpm@linux-foundation.org>,
"David Hildenbrand" <david@redhat.com>,
"Michal Hocko" <mhocko@kernel.org>,
"Anshuman Khandual" <anshuman.khandual@arm.com>,
"Vlastimil Babka" <vbabka@suse.cz>,
"Pavel Tatashin" <pasha.tatashin@soleen.com>,
linux-mm@kvack.org, linux-kernel@vger.kernel.org,
"Mike Kravetz" <mike.kravetz@oracle.com>
Subject: Re: [PATCH v3 1/5] mm,memory_hotplug: Allocate memmap from the added memory range
Date: Sun, 07 Mar 2021 22:16:36 -0500 [thread overview]
Message-ID: <830F715B-82B4-4A13-861F-B3A89327F722@nvidia.com> (raw)
In-Reply-To: <20210304100002.7740-2-osalvador@suse.de>
[-- Attachment #1: Type: text/plain, Size: 2291 bytes --]
On 4 Mar 2021, at 4:59, Oscar Salvador wrote:
> Physical memory hotadd has to allocate a memmap (struct page array) for
> the newly added memory section. Currently, alloc_pages_node() is used
> for those allocations.
>
> This has some disadvantages:
> a) an existing memory is consumed for that purpose
> (eg: ~2MB per 128MB memory section on x86_64)
> b) if the whole node is movable then we have off-node struct pages
> which has performance drawbacks.
> c) It might be there are no PMD_ALIGNED chunks so memmap array gets
> populated with base pages.
>
> This can be improved when CONFIG_SPARSEMEM_VMEMMAP is enabled.
>
> Vmemap page tables can map arbitrary memory.
> That means that we can simply use the beginning of each memory section and
> map struct pages there.
> struct pages which back the allocated space then just need to be treated
> carefully.
>
> Implementation wise we will reuse vmem_altmap infrastructure to override
> the default allocator used by __populate_section_memmap.
> Part of the implementation also relies on memory_block structure gaining
> a new field which specifies the number of vmemmap_pages at the beginning.
> This comes in handy as in {online,offline}_pages, all the isolation and
> migration is being done on (buddy_start_pfn, end_pfn] range,
> being buddy_start_pfn = start_pfn + nr_vmemmap_pages.
>
> In this way, we have:
>
> [start_pfn, buddy_start_pfn - 1] = Initialized and PageReserved
> [buddy_start_pfn, end_pfn - 1] = Initialized and sent to buddy
+Mike for hugetlb discussion.
Just thinking about how it might impact gigantic page allocation like hugetlb.
When MHP_MEMMAP_ON_MEMORY is on, memmap pages are placed at the beginning
of each hot added memory block, so available PFNs from two consecutive
hot added memory blocks are not all contiguous, separated by memmap pages.
If the memory block size is <= 1GB, there is no way of reserving gigantic
pages for hugetlb during runtime using alloc_contig_pages from any hot
added memory. Am I getting this right?
I see this implication is documented at the high level in patch 3. Just
wonder if we want to be more specific. Or hugetlb is rarely used along
with hot-add memory.
Thanks.
—
Best Regards,
Yan Zi
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 854 bytes --]
next prev parent reply other threads:[~2021-03-08 3:19 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-03-04 9:59 [PATCH v3 0/5] Allocate memmap from hotadded memory (per device) Oscar Salvador
2021-03-04 9:59 ` [PATCH v3 1/5] mm,memory_hotplug: Allocate memmap from the added memory range Oscar Salvador
2021-03-08 3:16 ` Zi Yan [this message]
2021-03-08 14:04 ` Oscar Salvador
2021-03-08 14:06 ` David Hildenbrand
2021-03-04 9:59 ` [PATCH v3 2/5] acpi,memhotplug: Enable MHP_MEMMAP_ON_MEMORY when supported Oscar Salvador
2021-03-04 10:00 ` [PATCH v3 3/5] mm,memory_hotplug: Add kernel boot option to enable memmap_on_memory Oscar Salvador
2021-03-05 15:35 ` David Hildenbrand
2021-03-08 15:46 ` Oscar Salvador
2021-03-04 10:00 ` [PATCH v3 4/5] x86/Kconfig: Introduce ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE Oscar Salvador
2021-03-05 15:32 ` David Hildenbrand
2021-03-07 22:14 ` Oscar Salvador
2021-03-04 10:00 ` [PATCH v3 5/5] arm64/Kconfig: " Oscar Salvador
2021-03-05 15:32 ` David Hildenbrand
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=830F715B-82B4-4A13-861F-B3A89327F722@nvidia.com \
--to=ziy@nvidia.com \
--cc=akpm@linux-foundation.org \
--cc=anshuman.khandual@arm.com \
--cc=david@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mhocko@kernel.org \
--cc=mike.kravetz@oracle.com \
--cc=osalvador@suse.de \
--cc=pasha.tatashin@soleen.com \
--cc=vbabka@suse.cz \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox