From: Frank van der Linden <fvdl@google.com>
To: akpm@linux-foundation.org, muchun.song@linux.dev,
linux-mm@kvack.org, linux-kernel@vger.kernel.org
Cc: yuzhao@google.com, usama.arif@bytedance.com,
joao.m.martins@oracle.com, roman.gushchin@linux.dev,
Frank van der Linden <fvdl@google.com>
Subject: [PATCH 26/27] mm/hugetlb: add hugetlb_cma_only cmdline option
Date: Mon, 27 Jan 2025 23:22:06 +0000 [thread overview]
Message-ID: <20250127232207.3888640-27-fvdl@google.com> (raw)
In-Reply-To: <20250127232207.3888640-1-fvdl@google.com>
Add an option to force hugetlb gigantic pages to be allocated using
CMA only (if hugetlb_cma is enabled). This avoids a fallback to
allocation from the rest of system memory if the CMA allocation
fails. This makes the size of hugetlb_cma a hard upper boundary
for gigantic hugetlb page allocations.
This is useful because, with a large CMA area, the kernel's
unmovable allocations will have less room to work with and it
is undesirable for new hugetlb gigantic page allocations
to be done from that remaining area. It will eat in to the space
available for unmovable allocations, leading to unwanted system
behavior (OOMs because the kernel fails to do unmovable allocations).
So, with this enabled, an administrator can force a hard upper
bound for runtime gigantic page allocations, and have more
predictable system behavior.
Signed-off-by: Frank van der Linden <fvdl@google.com>
---
Documentation/admin-guide/kernel-parameters.txt | 7 +++++++
mm/hugetlb.c | 11 +++++++++++
2 files changed, 18 insertions(+)
diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
index d0f6c055dfcc..6a164466ec33 100644
--- a/Documentation/admin-guide/kernel-parameters.txt
+++ b/Documentation/admin-guide/kernel-parameters.txt
@@ -1892,6 +1892,13 @@
hugepages using the CMA allocator. If enabled, the
boot-time allocation of gigantic hugepages is skipped.
+ hugetlb_cma_only=
+ [HW,CMA,EARLY] When allocating new HugeTLB pages, only
+ try to allocate from the CMA areas.
+
+ This option does nothing if hugetlb_cma= is not also
+ specified.
+
hugetlb_free_vmemmap=
[KNL] Requires CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP
enabled.
diff --git a/mm/hugetlb.c b/mm/hugetlb.c
index 28653214f23d..32ebde9039e2 100644
--- a/mm/hugetlb.c
+++ b/mm/hugetlb.c
@@ -60,6 +60,7 @@ struct hstate hstates[HUGE_MAX_HSTATE];
static struct cma *hugetlb_cma[MAX_NUMNODES];
static unsigned long hugetlb_cma_size_in_node[MAX_NUMNODES] __initdata;
#endif
+static bool hugetlb_cma_only;
static unsigned long hugetlb_cma_size __initdata;
__initdata struct list_head huge_boot_pages[MAX_NUMNODES];
@@ -1511,6 +1512,9 @@ static struct folio *alloc_gigantic_folio(struct hstate *h, gfp_t gfp_mask,
}
#endif
if (!folio) {
+ if (hugetlb_cma_size && hugetlb_cma_only)
+ return NULL;
+
folio = folio_alloc_gigantic(order, gfp_mask, nid, nodemask);
if (!folio)
return NULL;
@@ -7844,6 +7848,13 @@ static int __init cmdline_parse_hugetlb_cma(char *p)
early_param("hugetlb_cma", cmdline_parse_hugetlb_cma);
+static int __init cmdline_parse_hugetlb_cma_only(char *p)
+{
+ return kstrtobool(p, &hugetlb_cma_only);
+}
+
+early_param("hugetlb_cma_only", cmdline_parse_hugetlb_cma_only);
+
void __init hugetlb_cma_reserve(int order)
{
unsigned long size, reserved, per_node;
--
2.48.1.262.g85cc9f2d1e-goog
next prev parent reply other threads:[~2025-01-27 23:23 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-01-27 23:21 [PATCH 00/27] hugetlb/CMA improvements for large systems Frank van der Linden
2025-01-27 23:21 ` [PATCH 01/27] mm/cma: export total and free number of pages for CMA areas Frank van der Linden
2025-01-27 23:21 ` [PATCH 02/27] mm, cma: support multiple contiguous ranges, if requested Frank van der Linden
2025-01-28 4:19 ` Andrew Morton
2025-01-28 5:15 ` Frank van der Linden
2025-01-27 23:21 ` [PATCH 03/27] mm/cma: introduce cma_intersects function Frank van der Linden
2025-01-27 23:21 ` [PATCH 04/27] mm, hugetlb: use cma_declare_contiguous_multi Frank van der Linden
2025-01-27 23:21 ` [PATCH 05/27] mm/hugetlb: fix round-robin bootmem allocation Frank van der Linden
2025-01-27 23:21 ` [PATCH 06/27] mm/hugetlb: remove redundant __ClearPageReserved Frank van der Linden
2025-01-27 23:21 ` [PATCH 07/27] mm/hugetlb: use online nodes for bootmem allocation Frank van der Linden
2025-01-27 23:21 ` [PATCH 08/27] mm/hugetlb: convert cmdline parameters from setup to early Frank van der Linden
2025-01-27 23:21 ` [PATCH 09/27] x86/mm: make register_page_bootmem_memmap handle PTE mappings Frank van der Linden
2025-01-27 23:21 ` [PATCH 10/27] mm/bootmem_info: export register_page_bootmem_memmap Frank van der Linden
2025-01-27 23:21 ` [PATCH 11/27] mm/sparse: allow for alternate vmemmap section init at boot Frank van der Linden
2025-01-27 23:21 ` [PATCH 12/27] mm/hugetlb: set migratetype for bootmem folios Frank van der Linden
2025-01-27 23:21 ` [PATCH 13/27] mm: define __init_reserved_page_zone function Frank van der Linden
2025-01-27 23:21 ` [PATCH 14/27] mm/hugetlb: check bootmem pages for zone intersections Frank van der Linden
2025-01-27 23:21 ` [PATCH 15/27] mm/sparse: add vmemmap_*_hvo functions Frank van der Linden
2025-01-27 23:21 ` [PATCH 16/27] mm/hugetlb: deal with multiple calls to hugetlb_bootmem_alloc Frank van der Linden
2025-01-27 23:21 ` [PATCH 17/27] mm/hugetlb: move huge_boot_pages list init " Frank van der Linden
2025-01-27 23:21 ` [PATCH 18/27] mm/hugetlb: add pre-HVO framework Frank van der Linden
2025-01-27 23:21 ` [PATCH 19/27] mm/hugetlb_vmemmap: fix hugetlb_vmemmap_restore_folios definition Frank van der Linden
2025-01-27 23:22 ` [PATCH 20/27] mm/hugetlb: do pre-HVO for bootmem allocated pages Frank van der Linden
2025-01-27 23:22 ` [PATCH 21/27] x86/setup: call hugetlb_bootmem_alloc early Frank van der Linden
2025-01-27 23:22 ` [PATCH 22/27] x86/mm: set ARCH_WANT_SPARSEMEM_VMEMMAP_PREINIT Frank van der Linden
2025-01-27 23:22 ` [PATCH 23/27] mm/cma: simplify zone intersection check Frank van der Linden
2025-01-27 23:22 ` [PATCH 24/27] mm/cma: introduce a cma validate function Frank van der Linden
2025-01-27 23:22 ` [PATCH 25/27] mm/cma: introduce interface for early reservations Frank van der Linden
2025-01-27 23:22 ` Frank van der Linden [this message]
2025-01-27 23:22 ` [PATCH 27/27] mm/hugetlb: enable bootmem allocation from CMA areas Frank van der Linden
2025-01-28 8:55 ` Christophe Leroy
2025-01-28 17:52 ` Frank van der Linden
2025-01-29 22:43 ` Frank van der Linden
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=20250127232207.3888640-27-fvdl@google.com \
--to=fvdl@google.com \
--cc=akpm@linux-foundation.org \
--cc=joao.m.martins@oracle.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=muchun.song@linux.dev \
--cc=roman.gushchin@linux.dev \
--cc=usama.arif@bytedance.com \
--cc=yuzhao@google.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®