From patchwork Thu Feb 6 18:51:06 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: 13963573 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 F38FFC0219B for ; Thu, 6 Feb 2025 18:52:24 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 573F7280019; Thu, 6 Feb 2025 13:52:02 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 50798280002; Thu, 6 Feb 2025 13:52:02 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 37222280019; Thu, 6 Feb 2025 13:52:02 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 11269280002 for ; Thu, 6 Feb 2025 13:52:02 -0500 (EST) Received: from smtpin18.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id C2F381C9195 for ; Thu, 6 Feb 2025 18:52:01 +0000 (UTC) X-FDA: 83090414442.18.32152B8 Received: from mail-pl1-f201.google.com (mail-pl1-f201.google.com [209.85.214.201]) by imf02.hostedemail.com (Postfix) with ESMTP id EA0A280014 for ; Thu, 6 Feb 2025 18:51:59 +0000 (UTC) Authentication-Results: imf02.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b="sJbwZ/l8"; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf02.hostedemail.com: domain of 3zgSlZwQKCK8UkSaVddVaT.RdbaXcjm-bbZkPRZ.dgV@flex--fvdl.bounces.google.com designates 209.85.214.201 as permitted sender) smtp.mailfrom=3zgSlZwQKCK8UkSaVddVaT.RdbaXcjm-bbZkPRZ.dgV@flex--fvdl.bounces.google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1738867920; a=rsa-sha256; cv=none; b=WfkEzRcGnVacyouvhtgrPVy8CW1OjijOwFRYROjwVwBj6IWUujHg7LrjSf4jo6521YM3HS sLElxDUwSFeakgDSIkF6pCMQJsauBh4SQLLqBAFx5VWoRf8mDpgbiuAYyFgYtB12GMWs78 jp12PEYA9Mni93Y2EQD02lKdOgT4Mzk= ARC-Authentication-Results: i=1; imf02.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b="sJbwZ/l8"; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf02.hostedemail.com: domain of 3zgSlZwQKCK8UkSaVddVaT.RdbaXcjm-bbZkPRZ.dgV@flex--fvdl.bounces.google.com designates 209.85.214.201 as permitted sender) smtp.mailfrom=3zgSlZwQKCK8UkSaVddVaT.RdbaXcjm-bbZkPRZ.dgV@flex--fvdl.bounces.google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1738867920; 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=HzKNFokGTQRMQwkaxAdlaexKlVOh5cMMgkZKyufFdYg=; b=FcIp/trw6dqz5MMqCKb1CcE6YdHS7jBvPWuQcR4S7Gn4aQnPbYcz40Zjld0nOw485qF1Sy 0wkyQCgjygtNqMa/68b+4x1BQPv36gizLwxmEFrnA/RGTld/5XUrKkKB83XJDF7HRVomE+ mhr0ZGwZ4TrD53PTnif9S72QCGemTGE= Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-216430a88b0so27719895ad.0 for ; Thu, 06 Feb 2025 10:51:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1738867919; x=1739472719; 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=HzKNFokGTQRMQwkaxAdlaexKlVOh5cMMgkZKyufFdYg=; b=sJbwZ/l87/O/S58T20i2GhdExtl/JKQHS2cgasD1cJiDelPuyiH4DiLBlaf3N0l+hv nEGHqvT7LvZfzlBIQLthE2b5M1+9ISkQ6O7nelEn6lShsvVN5Cj6CaPGnbR6U0b5HaPH G+kcHwVHMFHckm28VTHS1zIAblIrj8+Rwii0V1vX6z8wJEbKP7Fa7oQNlrhpl2jKWhk9 kptk+ZJUnhRD11FSCuDqWqu/3LfxvyfRIZvDQHyf7w44q21BTKGV/hxbEWwUBs5N2Ofy 7E/EmAF0voB2y1BC3PorsGmxhs20LPwSIAanzF9/ffEsWITkQejY6UXY8581RFvI1gQc l8Bg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738867919; x=1739472719; 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=HzKNFokGTQRMQwkaxAdlaexKlVOh5cMMgkZKyufFdYg=; b=aPIZNGFIAX9LLznegJHOq+AAjA1W1c+cjnVKgbctYkgs+z1sJKHoD8EL5UTfHFR4Dz +Gv7+CkEOH+CK6wf7NgE3Vv2NCqGWu8oQxCujU3RurYwW/dGwScm2M0hxLYWJCUOZdnx GqBtVMmjLJ6FdGb0TXJSf9KVCc5w6Zgy+NEvZ6vOsw6uJ3K6Y9m40YoLoHfFeqxMWgO2 BZhxQnOWir0OGLeAeKf9NcvLUdw/LwxFNLt+k2VjwW+FghJbtxxmjvgGLPHXmDXSjxg/ H96pJCWln28jgK+Z+epzzy0iglnbX2bjR5BszrrzQxQJ8C/QOteQR61hwltaEhKljmRu bCPQ== X-Forwarded-Encrypted: i=1; AJvYcCVnael8hblXq0DPs8c+jA7nQGCRr2Z5qFFcCE9eiM4iKSuI2/ja073Ec3gJilP04JqOyxrZXC0IaA==@kvack.org X-Gm-Message-State: AOJu0YwD7g1X4fYf+BnunwDZkFSixM/KKhW2Arr1GNXGJK1De/KkKAAq N6VJBAZGJ/neIqnyMVQNHzS+zU/28C3KPUxOEuj2yWHe9SC8Cvp/cfYT/TJ+K4jD1veRjg== X-Google-Smtp-Source: AGHT+IE7WeCaaWwdtjLGXnFjJ3HV2HveYH8iYSHnW1lYFmfFYzgFw1cgzb7HpN3mgbnk50S1qEYYDK+c X-Received: from pfblg21.prod.google.com ([2002:a05:6a00:7095:b0:730:46e0:7ad0]) (user=fvdl job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a20:9f8b:b0:1db:c20f:2c4d with SMTP id adf61e73a8af0-1ee03a22c01mr874861637.2.1738867918849; Thu, 06 Feb 2025 10:51:58 -0800 (PST) Date: Thu, 6 Feb 2025 18:51:06 +0000 In-Reply-To: <20250206185109.1210657-1-fvdl@google.com> Mime-Version: 1.0 References: <20250206185109.1210657-1-fvdl@google.com> X-Mailer: git-send-email 2.48.1.502.g6dc24dfdaf-goog Message-ID: <20250206185109.1210657-27-fvdl@google.com> Subject: [PATCH v3 26/28] 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-Server: rspam02 X-Rspamd-Queue-Id: EA0A280014 X-Stat-Signature: n7mdrmrphycguh3i31o6jxbkgn4sc3y1 X-Rspam-User: X-HE-Tag: 1738867919-335029 X-HE-Meta: U2FsdGVkX1+y/Zr3r5nmnMuAYv99htPYkiiLhVqEV+LNysoxpV2zuY9bljLyXhHmrpRD2A3urTbzovoPlUPp9N786KfqcPna/NyDP+u9D0jQn3cazHgLSGimYXeMXI/Ufyi4UMmVRxMZefTtCdlvOlz/jr6TDXc/PbIbrI637X8cePwLOAgxs9sVlqeOrDWY9XvNRxbpLNKYqDYoN8QEz/RVm/Hfbzapsz9Y14TYCaZAKHn7mKvCKd3LXkdU06iL10x5SVqQ3GtY6VkGnohtd1C1dE29I6lVOgaC+yBBxuHLbaOFiGNikwRsF+x6BzwL9gNvLIRiKbztSc7bMqS9KCafYtAAxQP45nLtD140CLsRbPQIFGMPlp080ZSzFc+uwWQ3ZdgHX4nNW7KsnWiQ4TRMPkYHB3XGoikqb1K5Epvu7pHiBdoBbvaqbPwhoTePCMWeZh4CKaGVLtatU6P4gm+z9C3Uno9aYViVtNpW/05lMIJ1fZx53/pKs4+gNUZ4aEG4gTNSi5c+pM7bBoiasfHs/EhFAqtPsna0F023gOmAqOrta3StJeKKqrwcFQsPTDFP2WbxAP4DLacy3YMWx2qQ36QWgo5KYVLanaQ6wZb/ibblrad/tyIQ3usH/S9cwyr2GBU81lXb8+LfkhoGtBxHv8ZFlY/v0JjD3TQfodxXKSaLreOfyBJjyROVbBvPnRvcYLHwM9k8nUnkGXu8sFjiyMBpNvxXGC8BQJz7w2K+88VcGU/vEZrxBGa3kJOQ7npAxh1Qxp02zuEipOkcSavQmT9+pn9g63iqidIXRWAY4Nmu9uwJ6NbAYoUIbjPJ0qkB4hlGyBxLr3Mkds8giG0p7zSw7ens9kJnulSZESmGpdGT9qN6ILJvW5LnIMpbHYIfPJkRIzQmMhE/iRgEnppXLs9XQ1WSnYV6ifdpXHMD7UXjKPQcii443+4EeJmw3ZqVQJ8kTuKk3BKYCw2 JbpvB/3i v5dc9Ixl/zg270H6vWvm+UiilcrOvggddzbAlaMoGudPujYBvjF1003Xq8MWoCbK1yBWINhESYVjFcVsRu2obnU7OW4/l8lPUpJ26/bjQ5CJKmw4zZdfmY9VWcpd1QL8pQaH7AwRDAQD9yXK7R56vPOrjKNdWHIEPVR6qWFsZ1SUrfNmjE5GIjsPN3khN/k6Mi6BmcN39Gm0cilunvOsJNh5g/ZoTxxhCskTIPXAtGxMdXwNRaA18/d817zJe4KEpbJc8gAKyDC0cUu2McbOAWIdTBZ63Sw2QPnRB/JgjXoKQcuCucXCeOmg2lT7UpUOLvySgAP/FiK0uecRVQsohHAhmCeFsJd/zSnEIE+TPcBbeQDXAInV08m3PuseUyoE/MBVrW9xnwi3bC+Ry0BG8iqtGYZu/J13amKRC/bwyTSeN8RYpm19zuZ3nVrscJJtJOrvjstGQVO3iV0YO3kRjqt546XBx7RJelqxQndgwXgHYrwx8DUpK8frDeciS/8kIDvOrk6nrnEdBUGG9RG0hVj4iiBaCkuh6P3RRGdNd3D2pCfNQfiE/IqQJZROBuMmlcq0Y 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 fb8752b42ec8..eb56b251ce10 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 29b3a6e70a53..24a06d6d3617 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; @@ -4731,6 +4735,9 @@ static __init void hugetlb_parse_params(void) hcp->setup(hcp->val); } + + if (!hugetlb_cma_size) + hugetlb_cma_only = false; } /* @@ -7843,6 +7850,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;