From patchwork Tue Feb 18 18:16:53 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: 13980424 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 A7EDEC021AD for ; Tue, 18 Feb 2025 18:18:08 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id C180828018D; Tue, 18 Feb 2025 13:17:49 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id BC8AD280181; Tue, 18 Feb 2025 13:17:49 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A41EF28018D; Tue, 18 Feb 2025 13:17:49 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 7A4B1280181 for ; Tue, 18 Feb 2025 13:17:49 -0500 (EST) Received: from smtpin24.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 35F6649654 for ; Tue, 18 Feb 2025 18:17:49 +0000 (UTC) X-FDA: 83133873858.24.FD0A525 Received: from mail-pl1-f201.google.com (mail-pl1-f201.google.com [209.85.214.201]) by imf04.hostedemail.com (Postfix) with ESMTP id 3E88340014 for ; Tue, 18 Feb 2025 18:17:47 +0000 (UTC) Authentication-Results: imf04.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b="BIJAuW/a"; spf=pass (imf04.hostedemail.com: domain of 3ys60ZwQKCH8iygojrrjoh.frpolqx0-ppnydfn.ruj@flex--fvdl.bounces.google.com designates 209.85.214.201 as permitted sender) smtp.mailfrom=3ys60ZwQKCH8iygojrrjoh.frpolqx0-ppnydfn.ruj@flex--fvdl.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1739902667; a=rsa-sha256; cv=none; b=c3hE1+Ns4sZeamcx7U/yvpE/fU+K9hVznDehqvfYBkcjvmaw5Fn04UuMnOFDoNvcAIWB20 VvqMSpCmwQobI2iRxcWUaQ8jS/tkaIGIg40iWYgx1eRdUeZt1oUJkLY4kqbE3TkvllkDli Fp0nQB+3JP84BUs1i1hbqB20Dc06qcQ= ARC-Authentication-Results: i=1; imf04.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b="BIJAuW/a"; spf=pass (imf04.hostedemail.com: domain of 3ys60ZwQKCH8iygojrrjoh.frpolqx0-ppnydfn.ruj@flex--fvdl.bounces.google.com designates 209.85.214.201 as permitted sender) smtp.mailfrom=3ys60ZwQKCH8iygojrrjoh.frpolqx0-ppnydfn.ruj@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=1739902667; 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=jPC4tchnt1N2YhIqVh3vzNfsaSlSSanvoj/zggZqrBE=; b=m44hnHB/+MEqUYHdJFSVzLvyQTw7WRDE1/h692wwrCB0yZL9DaSZhgScpb7q34iPPDB6Gf 6KUQR267kIGu9pkBC/o3dUGnG9lHJ8jNOpAbgaC5sKLkSGyfFOcztWLUECesN4zOwIxGcC KVvWT4a3C60+gGGWYMq46Pb2IFYCGAg= Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-220f0382404so88274765ad.1 for ; Tue, 18 Feb 2025 10:17:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1739902666; x=1740507466; 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=jPC4tchnt1N2YhIqVh3vzNfsaSlSSanvoj/zggZqrBE=; b=BIJAuW/atLdE/pobetJcyzcqZ0Xl2lqF+AJ8DZtJMXmAheXveQ9n/iAhtblNi+VykM xbkxOJOfdRC7wNFWkXxGMjBps/FHd9q142VzaASw8Y7xxrOw5Vt0dMj6RWwgA49Y3GlB IldNcsDTOKF0fJbsKc4jAGUZCPsxV8bRs1+2XdmTVDtnVM738kB+ZrDuopWqZmeL6yOa 8zN7fyl8pYcZoRUFO1kYR7KW5uIDoafmn/cUroobhTFtgtTUniJdDkKFpLXV8r3PCtG7 HKvkqnuhwn1RIarCPkIvIVWGC7ca168tJTJvJdIY+EeIcQFzpwEOIml6Nhv57Sng1nFr ukXw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739902666; x=1740507466; 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=jPC4tchnt1N2YhIqVh3vzNfsaSlSSanvoj/zggZqrBE=; b=mjDHGoLzLMUTlM9xIE4IsuAbsYZy8HqimWvRr3DNd7d4M5b3wjeYH5Sg6/qCrS/O2c 18TNbOgZMUNe8x1ZSjqFrIWdpOBD77FHliwMG2+kXtdYHSjNF03+s5vozXsCvX3xWK8A 7GOJ/zngL343z/WCKMJPcyA0qRqM0C65sRP2uiLfVtWy+GZN8EPBXELky5uTR1p5h19H P8+uylDMU1H1aJkNBgeYx59zb3k5Zk24shgl+/XlZ5xC19t1aatnh509TSbKWOs9OFaP fE1HirsQvPDR305S8zj2vffYQdX25Vux84spPYqoVqiDX4GwlPLaw3hvpKWhW2UVocAb OETA== X-Forwarded-Encrypted: i=1; AJvYcCVSRg2ZCbeYyr8Y5yNlo34qvTT2HQnhsHh5G3Ti/A8xNQGudQSBBBN8Ioi58+O2JfN6CxXrrDKvBw==@kvack.org X-Gm-Message-State: AOJu0Yy5vDFD/WZSJW9rXF9+J8femn9orN7CakoVajKNkZ1Od2eifrA7 qPkKZYVihSG+SgjoakMPZbYdIKbi1dxnV8exR/oUqd5EzJC+UJy49qoUEw8AWVRNLwpGVQ== X-Google-Smtp-Source: AGHT+IEtEjZxSkaHGNUqLkCYYCbWC6D2V31JmuFgG4Dg2Vo0lypjwM3EadejgHbXDL3fVjUh+UqlBkvb X-Received: from pfbga8.prod.google.com ([2002:a05:6a00:6208:b0:725:e4b6:901f]) (user=fvdl job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a20:c70b:b0:1ee:c6bf:7c49 with SMTP id adf61e73a8af0-1eed4e3f207mr456118637.6.1739902666173; Tue, 18 Feb 2025 10:17:46 -0800 (PST) Date: Tue, 18 Feb 2025 18:16:53 +0000 In-Reply-To: <20250218181656.207178-1-fvdl@google.com> Mime-Version: 1.0 References: <20250218181656.207178-1-fvdl@google.com> X-Mailer: git-send-email 2.48.1.601.g30ceb7b040-goog Message-ID: <20250218181656.207178-26-fvdl@google.com> Subject: [PATCH v4 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, Frank van der Linden X-Rspamd-Queue-Id: 3E88340014 X-Stat-Signature: sp6ciyfjmiq9z8gaf8sqqhdjtqrk1kja X-Rspam-User: X-Rspamd-Server: rspam10 X-HE-Tag: 1739902667-900452 X-HE-Meta: U2FsdGVkX18dRuc70syy4g/aW7oP0FpOoolChIEPqfUfLTlNBVRWppT3OAWcgidA+/QsVGuteqfyFzehQ2gzn8ryqCl18zN5z5xAIy0lc+ZJI1Nhjl+xl4896SX1Wu1bqjgJjIa8yW3uzw9Fq9qOgxZpVCOoV4FH8azbrkjgXo45bb4qHvL+xVdoKgHgEFf2OJfncejW48rtBlZ2IpDbXJjmTd2P2d4ckhDuLWrl4DBtKyaw40DIhRl0vdPxG5SWTdKJ3qgmpZMdqEb8s1T/2K4AX9xEv/d78P2u99n53r+zG2fuQWs9LbyFRVsJi3oKDYUOUdsEhNVFPJde/E5HJQAHn7y5w9GYC6plujK8D43POvILqwbZcmUV3ETXjxaw3hoz8X5znwgRO8F23NCh8LtrzUtWncIpnUx3AmaxbAOldB69gYUnb35mena37wRIYGRZ82CC7at83QYDu2vSBCYi4c+QYWC8V0JSC7fzdfFqCaS9Rz66kQ3RBqxIF2fIhxcAtECWYVwjIKTAL9gMXgq/L2LPvmikYkKvBoYJfl+k2S1fkhod4zlCnVLiaO6vGSiUSYJiChSCNlftQLcu4prK4oh0ZubTBcXtCCwscUTTPSxwKoI7Oe8GjFsW14tAHfg9x1INRfRy9s8GJ8dfXph9tGos0g3DrMdfxf8QbePtGYMCahyi7yaHaFueq0tXLmdWktBomR771s0tR58hCtip9us+D34Vw577CG+YIFw064dUhO3J/AsSLnRkCTs0OZseZR7l4yWSiLXdlT/n66LhIe/49Nx78xsn58LODvLs1dMwSNEMf1wh8QwiMzqcMJuu78Y4yHpjJ3j44b26daKdGB0nDdK3VFeA+MqwXHn/mt/3re0b9JGN/7PLcTEy68Jqi/qTxU8Sl+2jcSXM7Com3kZ1E3MXWVGQQvxFTta7uG2dhVO6gb0r+E7oRXfo8LOxRdN1Etari8irshF Sg+OTTQR MU2HX7kMq6FLS6oBewt65pM3n6SI+pa7Ry7bqbFdRSXHV04bqC4Y3fsEmZqfCVHiWNxqOSrCTZgMoWx+U28HvaBNYm/AbtiQAa+okODm7e3qZEkTQzzpOE/sgzozNPIc8DReIpK/sa56M12u3yFUHar3YVfEtP9PdfKvdnz63V58mchKu0WD+jlt3VxxJ78ZdKGg56Q0fjTSEjqVjPRyY0axpwU36EGhItr5O8swlmHlgGSBVPXvPWEYrKW4U5TvoNcPG+WUdZ32i5zQjNn6/zjn4WWzGGN48k0ZgwASPs9lD4locK4NPvfF/CZXy7Fht9lnWrHWF19XBcWs/ib7lkM5VkynpPElhhNeqazJtfpvW86dJibV9mUEh0IjukpufDl53twFj5UzmN1nuVxr/tEM0puwi1xqVwUeP3t2I6LUuXvYRD4m0OkzvPCCSW2sxpRV0U4qbEy3eNKYvN6qgWFk63zuCty1FH61KqLBQgnwYBs5jS2GHrDtfg3ob1AuhxOlT4eyf8/i9N033CEHCn+1RzbI0fkFLeP0pW5fCFbatOldt9wAZnTCbMJuO7YsKiw0x+AC+NMgkIXQ= 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;