From patchwork Tue Feb 11 03:48:56 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luiz Capitulino X-Patchwork-Id: 13968936 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 EB90AC0219E for ; Tue, 11 Feb 2025 03:49:19 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 7E3F9280006; Mon, 10 Feb 2025 22:49:19 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 76D4A280004; Mon, 10 Feb 2025 22:49:19 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 60D6F280006; Mon, 10 Feb 2025 22:49:19 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 428DB280004 for ; Mon, 10 Feb 2025 22:49:19 -0500 (EST) Received: from smtpin09.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id D40F280C64 for ; Tue, 11 Feb 2025 03:49:18 +0000 (UTC) X-FDA: 83106283596.09.D0AA07D Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by imf05.hostedemail.com (Postfix) with ESMTP id 348A610000F for ; Tue, 11 Feb 2025 03:49:17 +0000 (UTC) Authentication-Results: imf05.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=AwoetTXf; dmarc=pass (policy=none) header.from=redhat.com; spf=pass (imf05.hostedemail.com: domain of luizcap@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=luizcap@redhat.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1739245757; a=rsa-sha256; cv=none; b=NUurqit0zEnxv8GCFtCblzeDTOOepC+T8tmTKZtnCEu/5uov05MllhvvyFVILS0ziyL6L0 gLF+MbDvY8ciRfQiIvk5y+AfsG2UckFRrO0880FzJYle/rwkGqcclQskVxbwDqShFV69Q7 nrJTkP/1LsKNtPHLUF1VEOschmGL/K4= ARC-Authentication-Results: i=1; imf05.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=AwoetTXf; dmarc=pass (policy=none) header.from=redhat.com; spf=pass (imf05.hostedemail.com: domain of luizcap@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=luizcap@redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1739245757; 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-transfer-encoding:content-transfer-encoding: in-reply-to:references:dkim-signature; bh=Fc6Lup8PyQQxDZ8TsMYZrD/hozXEfxTI7AerH3va8cE=; b=NhIa+fmq4g8Vg4I1F+k1rMY4KwLxQF/eagfl1WumTHWWG77cdYaljIi8nZESJl03kxSBIj 3QqS2jYhh4WlO7X3Q41OckKV2zNpaBv7lylg+JVlivMBGxQKD5vUodaFgFq9qeG+PP2Guo iHqGZOUwxIKrdDM/ah4Lq1zYgSPhe+g= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1739245756; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=Fc6Lup8PyQQxDZ8TsMYZrD/hozXEfxTI7AerH3va8cE=; b=AwoetTXfH/HxrRuzPzcaEgMS3tbcfMnisyS/3tQJqJeUFA+4Y83YHkwc6LGzqQVIyT4K8l BeMLqjVBwzWsp5ooir1ptuOWU2pt9zJjo/zBsCVV6YyqAmcE1yjcXV29ngQgDpn1Ax0nSx bt4ehNJWLnmsrcpoAM06zhTR65MzUZM= Received: from mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-382-vsfOlkt8MSuU_8T59fYdLA-1; Mon, 10 Feb 2025 22:49:11 -0500 X-MC-Unique: vsfOlkt8MSuU_8T59fYdLA-1 X-Mimecast-MFC-AGG-ID: vsfOlkt8MSuU_8T59fYdLA Received: from mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.17]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 805C11956088; Tue, 11 Feb 2025 03:49:10 +0000 (UTC) Received: from fedora.redhat.com (unknown [10.22.89.14]) by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 2AC99195608D; Tue, 11 Feb 2025 03:49:08 +0000 (UTC) From: Luiz Capitulino To: linux-kernel@vger.kernel.org, yaozhenguo1@gmail.com, muchun.song@linux.dev Cc: linux-mm@kvack.org, akpm@linux-foundation.org, david@redhat.com, rppt@kernel.org, luizcap@redhat.com Subject: [PATCH] mm: hugetlb: avoid fallback for specific node allocation of 1G pages Date: Mon, 10 Feb 2025 22:48:56 -0500 Message-ID: <20250211034856.629371-1-luizcap@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.17 X-Rspam-User: X-Rspamd-Queue-Id: 348A610000F X-Rspamd-Server: rspam12 X-Stat-Signature: p1qqar9m1kdro7kbj8385dx1qpjm6gbf X-HE-Tag: 1739245757-373019 X-HE-Meta: U2FsdGVkX1+XXBWlJZq7Fo8szlSiHwtN+4dVroZrrUeOPbUIIt6hxV1AQ0EEjpQCHlDH0O+OocWUJIbI0jL/iuzPGQmheGMfeE8vHeEZh22m9E4p1efyVcFzu6CfbRovhC+zj3JKbYvwmnJOxW1D+Ewer3YwH55E7XtPkhQnn8P8HcArHA0DSAblZ/DtByCJbgSWTqAwVgQU6E3XCdWJLAjYLTje2suadKayxoG35OrSLRJjgJy2d9TZ2eb/PrFBaXJP56lhUSIdunyRJHRUzeKnja26x9PBaPlRuSFAX9u1PE4K50D3qhFy6di2vkuX2a4i8OeHLuvtA7DSUAMrEi/GqxjwaS4Nb5nhhoOe3EnboJTi013IVjP6xS0eoQSoUYzCTYvugetW1qh3bf4L/cDIjH7gBZ9pMXl2aFONBstd3fr6qcghVrPxVpywZdoJH/Y21AEELQ/IvJrFOj8V02IfQl2lQy3L6AEQi96HeY7uPzjwhmZa0EIq2Td98e4/7PZKh2ksjrnQcUqTNk/YT9anvUyRDDJU29aK7UnF70cMlx7JTsMy5MMKd8AlkalP1W9FAqtmAyIb9Tg9NXyIBjQ2nw79KQQR0sGqW/nRTr2gglJfbAjwns4QBQYk8Awysr7HDqsFkgvK8R0fckdGr7SJu/sy2V0VMl3aAGlM6+9vSKmmXaVoidJ1IzjZ7C/FvCQI1p3X4SMWa1CXe2sH8xvWt3OTnOpmrUzWv4LyzXeKGowPg/kn2MmSxQKOQoWN+zEa2FdVAvuHQ6qjtvdji+SxqBDvG2CgbYQfCjbwKC8chjNPoC42wiFHjNI24PsnByri5Gx2ocYep6K9Cev0U1O5qGda/Pc4f+DnyhNJkwllWWncJ1u7quuNUyZvOkRGvtjdpGbrJ7CMN8xebDXRpRTesc5FJp66mksZX9e2gbr6iX5YLHKHrw8Sl/mTVUfBAEX76nR0qmL2+v2Xk+w Kj5EXrou TTjOZh3WJ3KXgjSMFyH9uikWHPc6Dl1NIEIgvDR8E8VE+vQAhddla1tAeXqVfZkwgE6PYcr1fTf1ncmMmr3Niq/9yNSZ1FRlcWTmWHe2bjGNJqiQ9OCXNdN0vs+sskeDsVE176iZjliW12TwU5MbPkboYvK08cHTm7QbH270Iumu1h5HwOp2JG1ZxKZ1xCUDw45dL0pAnVM7CrpG9gqPhCmQD+vvLyrCfR6MmuLNiSvsZCmaR6dWwoJWCYLWITsCa4lVV7e6zIVFjqCmz0j7KaYX4GXEWHC4Sna9m7EbztCsAXQkzgip0Zj3Fo8xxxZZP3yWR 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: When using the HugeTLB kernel command-line to allocate 1G pages from a specific node, such as: default_hugepagesz=1G hugepages=1:1 If node 1 happens to not have enough memory for the requested number of 1G pages, the allocation falls back to other nodes. A quick way to reproduce this is by creating a KVM guest with a memory-less node and trying to allocate 1 1G page from it. Instead of failing, the allocation will fallback to other nodes. This defeats the purpose of node specific allocation. Also, specific node allocation for 2M pages don't have this behavior: the allocation will just fail for the pages it can't satisfy. This issue happens because HugeTLB calls memblock_alloc_try_nid_raw() for 1G boot-time allocation as this function falls back to other nodes if the allocation can't be satisfied. Use memblock_alloc_exact_nid_raw() instead, which ensures that the allocation will only be satisfied from the specified node. Fixes: b5389086ad7b ("hugetlbfs: extend the definition of hugepages parameter to support node allocation") Signed-off-by: Luiz Capitulino Acked-by: Oscar Salvador Acked-by: David Hildenbrand Reviewed-by: Frank van der Linden --- mm/hugetlb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mm/hugetlb.c b/mm/hugetlb.c index 65068671e460..163190e89ea1 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c @@ -3145,7 +3145,7 @@ int __alloc_bootmem_huge_page(struct hstate *h, int nid) /* do node specific alloc */ if (nid != NUMA_NO_NODE) { - m = memblock_alloc_try_nid_raw(huge_page_size(h), huge_page_size(h), + m = memblock_alloc_exact_nid_raw(huge_page_size(h), huge_page_size(h), 0, MEMBLOCK_ALLOC_ACCESSIBLE, nid); if (!m) return 0;