From patchwork Fri Feb 28 18:29:26 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Frank van der Linden X-Patchwork-Id: 13996926 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id D8084C282D0 for ; Fri, 28 Feb 2025 18:30:51 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id B6AC728001A; Fri, 28 Feb 2025 13:30:32 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id B1939280001; Fri, 28 Feb 2025 13:30:32 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 96AB128001A; Fri, 28 Feb 2025 13:30:32 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 75414280001 for ; Fri, 28 Feb 2025 13:30:32 -0500 (EST) Received: from smtpin22.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 2796281117 for ; Fri, 28 Feb 2025 18:30:32 +0000 (UTC) X-FDA: 83170193904.22.3735FD9 Received: from mail-pj1-f73.google.com (mail-pj1-f73.google.com [209.85.216.73]) by imf23.hostedemail.com (Postfix) with ESMTP id 4828F14001E for ; Fri, 28 Feb 2025 18:30:30 +0000 (UTC) Authentication-Results: imf23.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=vUXOuCTN; spf=pass (imf23.hostedemail.com: domain of 3xQDCZwQKCBQzFx508805y.w86527EH-664Fuw4.8B0@flex--fvdl.bounces.google.com designates 209.85.216.73 as permitted sender) smtp.mailfrom=3xQDCZwQKCBQzFx508805y.w86527EH-664Fuw4.8B0@flex--fvdl.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1740767430; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=SJXuy9g+fIYCpUv35AHIylFJGRqMuxPCbt3E+0p7mQw=; b=FnZzGghszAD0vvtggL9PtOPE+qwjUi+Okl3SZkoqxMjVvtMaVTW+corNwtD0x1k/UioaRI H9hIongIJXB8R+ydW4/HaFX4hQio/OwUCKavLdSv4499LGaPpgvyvEayxn/HD+WjnOvAZn eU7D92rFKc0WEfIGuU52aMY+rlbSl/s= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1740767430; a=rsa-sha256; cv=none; b=A+1EDhmu8N90AYPxJdVgw72LjtQv+2/h9dyApM2ONHox/Pbd/YjkwMRxNlx/L5NDQOmIuJ PIZUfU+P3lIDO36gMyCtljswe9HqxuzObrTs6RNlMF4skk6nI/n7DckRYkH01TBqo8SvFv MTtKNnqcNkhGp2+AwRCNGNmHOhVYiXY= ARC-Authentication-Results: i=1; imf23.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=vUXOuCTN; spf=pass (imf23.hostedemail.com: domain of 3xQDCZwQKCBQzFx508805y.w86527EH-664Fuw4.8B0@flex--fvdl.bounces.google.com designates 209.85.216.73 as permitted sender) smtp.mailfrom=3xQDCZwQKCBQzFx508805y.w86527EH-664Fuw4.8B0@flex--fvdl.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-2feb4648d4dso5632529a91.1 for ; Fri, 28 Feb 2025 10:30:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1740767429; x=1741372229; darn=kvack.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=SJXuy9g+fIYCpUv35AHIylFJGRqMuxPCbt3E+0p7mQw=; b=vUXOuCTNt+DgiQK/b+3p+ndDGH3KkdcXdYqDruitGQLEEr815lFd5i9lOC9Nn+8ygu 8wt4ZJLG9F+3uwvlklXC1Qlc2FSyGusWunQKqzy7BqzX5NHV8SXBPVWKoC84pb7cxKWV 3Emv72nyycoJ3+XZFNQ3IcDEEaZBh2wSv0P4Uw1s3IRxLedGvqPnJ2V71nAQf89kh9ZF H7cmcMk2//s4N1O2TBg7sDKSDVB9+W/4R1M02p+vZlrezMdBJ6L3V5Pte/N96JFVPTdB nqt95XMqrAMf3Fbye1OxXogZ4HrndApx7j0FY++1omr5/aGJBLoMWhHz11Ch8J4JoaLT zGZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740767429; x=1741372229; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=SJXuy9g+fIYCpUv35AHIylFJGRqMuxPCbt3E+0p7mQw=; b=lgzIOt30jW1eQBDKBbt2HDd/5V+0s1JBi/LxPJiVg/qGQFfslUu8pI6m7AyEwuSNUB 8rrz2myejKDm/X5W6PL2PvUQ1p2697xDP3S0P9N5XO1h8Of9ftVANXSZkMjOAUmT1woD ULxUKn2mDMEL6bPChg8IWED5BViHVLAOiXv9gsiNd1bBmdE0jRc0StH0ouAOEXd8qH7o zBqqniHDk6IKjYXIakMZ66AISsN/tdthvL6uxztj0JNifl9BhDOx2tbIC+ebHIlKyeSc cc0WVD0qWf7MxkWldKYhh+woyNDhnOe50ZjiCvuIt3mEhf54eT4Zix886hD/VCqqQMBI lK3w== X-Forwarded-Encrypted: i=1; AJvYcCWMdI5wUvVM1AfofKWfPVK0xqpoIAeM+uGNdhLqhUZ91YtSKUDqFUsXF6I928yjgNKTWvvLTVED3Q==@kvack.org X-Gm-Message-State: AOJu0YzFyhBassPjfA9ALDwpPyYmk8IoDWzrnA67bvcyqI4a+CamNeQ8 JvwmwEbPvrJp8OkBqQRq9NkGKYBugRjolJdU0/T2b4xM8B1fYmp10UIyyGtFIPeQzZ1tSw== X-Google-Smtp-Source: AGHT+IGyWQ5eAZFcGmvk4D9+09d3FgZW3zWgk6sQSpIGwMbzM1TQ8agrO5NPaNt1FY233n8g7xNvD2p7 X-Received: from pjyp12.prod.google.com ([2002:a17:90a:e70c:b0:2d8:8340:8e46]) (user=fvdl job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:3c88:b0:2ee:ee77:2263 with SMTP id 98e67ed59e1d1-2febab2ecd6mr7718548a91.7.1740767429126; Fri, 28 Feb 2025 10:30:29 -0800 (PST) Date: Fri, 28 Feb 2025 18:29:26 +0000 In-Reply-To: <20250228182928.2645936-1-fvdl@google.com> Mime-Version: 1.0 References: <20250228182928.2645936-1-fvdl@google.com> X-Mailer: git-send-email 2.48.1.711.g2feabab25a-goog Message-ID: <20250228182928.2645936-26-fvdl@google.com> Subject: [PATCH v5 25/27] mm/hugetlb: add hugetlb_cma_only cmdline option From: Frank van der Linden To: akpm@linux-foundation.org, muchun.song@linux.dev, linux-mm@kvack.org, linux-kernel@vger.kernel.org Cc: yuzhao@google.com, usamaarif642@gmail.com, joao.m.martins@oracle.com, roman.gushchin@linux.dev, ziy@nvidia.com, david@redhat.com, Frank van der Linden X-Stat-Signature: oxxu8w53s1gi96ija7gydwscdpwdcuis X-Rspamd-Queue-Id: 4828F14001E X-Rspam-User: X-Rspamd-Server: rspam01 X-HE-Tag: 1740767430-808824 X-HE-Meta: U2FsdGVkX1+0b+bJse6wfK64bbYKjlJYng/GDhGx8m8/lMzUF5MppJL3lNBI3xgthYEGE8bwBfpPyGM0/L3v0s+h0z4tGXfpG4zq1v2RrDDaZjPwQbRxOFEkRkM/EaSwKNXSxQE++kyysdAz0N0j3Tjm9tRMoCQrUabxTx9jJwphdvVvcdKd0r/KCf31K/gYOfYx+wS8Lgus5G29Bkd8HPwF/QB8gbT5dV6ugmknDCZ0n+YHmFMlbbF+gDzzCHv0rmnPJ/KXePROBTeWzU+y7MV9eEljLjaMH2PvNfU0Oo1i2BFnTH7DG+HhnwBDOsHRQtARZbQ5VJ15MN6kK7nOZMjjUeqA5KnzMgzKA3nqLrzx1aPl/M1/lqY5hlIC5HnkTnI8giaT1LIPBjB34FxD3DBgMh1TWZpLITzZ4WClEtBp+mRxzeFcIXoCirV3hxIe4dSvo5jJ9zthbNh+9bQXzOG55EbkHV2GpvPXApzeanDcIKiDjUC26HWhsK+5Rh7Gv4drx/8iZzFilIYW2hNoOTfP66ozMBr/lx94b21/7VakQttol/UKWuWObGKlT2aNOsU9uxyc5kI8xiO/KgJA2E2vHGpNIFL/KSYOdx35zkAIRRC+4h3rHQ9hMMfuvCQtgLpCaGYGtnm8fJgnffg/r/jTtK5xxl55FG4gz/i97GFIo9pDfgjoEoalLeqFUucD3uJmJ4d+sxWV/tlMvsrjldWn+sV+6hikULic14gB1ZmVAUCgHIw3xya/Cy7xdkXZdXQRcY6LrmsI1+oc/jvy4LLXMXTR+BzUeLmkqyy2ZUUaeeAWujygT1QSMSQLChzD60U2sgxZt3SgioTctKpUqOwRgiu0MEpL879tNu2dORBi7XI3NqaLt3rSyd+gN0cWpKY49DcqFxWAQhC3zt+f81aFgtvtcuW/qgNLbZ8N9HKWnRc+K3Y1p7jJrvzSOWTxPuTX7+4z/5w1L4Xi6Jn D/+3u67C P/xy+NiFAb+LBmWFKGi+f/cEfD84rHMbk2DgYEJfkse27c9F3dOii3r+MWeSJzGR/jBhJcFarVB6SdCnrOwGlUOwItuWHVHKZTnmBN9h+iqr73wHqIL+VY6WdyWhkPr49QVH2eWNQrBv4DrN9jbmLS0dIxVGj9E08mHvvMZNf1Q1UxnumjLs1SDcre5SBaFJ1nHcflLZIMmUa7OO2d9Il7SQRghPtd66l/BapQTA2gnFGNIGV1Q5n6PTCtC6zh7yJrutJaF5C76TYaWIGS1MBI8c5EtDDi2GEq2cMNU0X58D0Fe1j695je6XlrOjsJFhhz4mEnxO286kVkod42+/9j7BUB1I0qfaReUUy57nBESd7PpZx2jZTpVzKnG8HG2tWSUzejd287JNLREHnDChdbQ0z0/DBfzBeZE5iK9G5VIvr69zqExYYXtYCQog7stvYHLQ1hGKIxXL+fcDBVecvi7l7RTFUq0tFQ1b9dU6paLx1Fu8LxfnOFQRt0p4kbWkc9HATyBaxE5PoJMkmLIRlu+a8g612B79HYqfD3ciZOok/BaRJ/iXpt47UN5mPEwB2aXsP X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: 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 --- Documentation/admin-guide/kernel-parameters.txt | 7 +++++++ mm/hugetlb.c | 14 ++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt index ae21d911d1c7..491628ac071a 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 634dc53f1e3e..0b483c466656 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c @@ -59,6 +59,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]; @@ -1510,6 +1511,9 @@ static struct folio *alloc_gigantic_folio(struct hstate *h, gfp_t gfp_mask, } #endif if (!folio) { + if (hugetlb_cma_only) + return NULL; + folio = folio_alloc_gigantic(order, gfp_mask, nid, nodemask); if (!folio) return NULL; @@ -4738,6 +4742,9 @@ static __init void hugetlb_parse_params(void) hcp->setup(hcp->val); } + + if (!hugetlb_cma_size) + hugetlb_cma_only = false; } /* @@ -7850,6 +7857,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;