From patchwork Mon Jul 10 14:14:08 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Liam Ni X-Patchwork-Id: 13307181 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 81B60C001B0 for ; Mon, 10 Jul 2023 14:14:27 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 9E1CA6B0072; Mon, 10 Jul 2023 10:14:26 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 992116B0074; Mon, 10 Jul 2023 10:14:26 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 859526B0075; Mon, 10 Jul 2023 10:14:26 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 75B056B0072 for ; Mon, 10 Jul 2023 10:14:26 -0400 (EDT) Received: from smtpin10.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 2A2ECC0119 for ; Mon, 10 Jul 2023 14:14:26 +0000 (UTC) X-FDA: 80995897332.10.6A9B4FE Received: from mail-pf1-f180.google.com (mail-pf1-f180.google.com [209.85.210.180]) by imf14.hostedemail.com (Postfix) with ESMTP id BB868100024 for ; Mon, 10 Jul 2023 14:14:22 +0000 (UTC) Authentication-Results: imf14.hostedemail.com; dkim=pass header.d=gmail.com header.s=20221208 header.b=EnnUPxjQ; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf14.hostedemail.com: domain of zhiguangni01@gmail.com designates 209.85.210.180 as permitted sender) smtp.mailfrom=zhiguangni01@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1688998462; 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=Mv8u75UgPYyw3J1c9x8u8HK0vBlvX+2V/eWoGzYtNdA=; b=sWEzoDZZmM59Aoc07jVcEG19bl+YeicV0FsQMMZl2WRVKRMFw4U4AlbGTy0QZ+MLyNNLye Zequvm6wpgjP6izjTsyzV7NkudYTgZHW+m+Mar+yBcN7HjUxyxvr+9zoa9T0dfWMKrKKsW DwbiGEqfoui7vyBWZdzmWCgZ8xi9Tw8= ARC-Authentication-Results: i=1; imf14.hostedemail.com; dkim=pass header.d=gmail.com header.s=20221208 header.b=EnnUPxjQ; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf14.hostedemail.com: domain of zhiguangni01@gmail.com designates 209.85.210.180 as permitted sender) smtp.mailfrom=zhiguangni01@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1688998462; a=rsa-sha256; cv=none; b=FJkJ5IiUJtQ0/pQd+qHu7kHTV89wXeRAAzRQ90R683IyI+Jeem0RJ6bAy6CSSZfJgrPS7B HypvZJ92snzt2Rzp9xVzIyW1J9p6EyCjpjQFnnHJoINY2yTuVlPwmjHgDJOfiWRL4Tn3Gi PSJVGfcKABMvYG6YyClPczcKOh7C18M= Received: by mail-pf1-f180.google.com with SMTP id d2e1a72fcca58-666fb8b1bc8so4009458b3a.1 for ; Mon, 10 Jul 2023 07:14:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1688998461; x=1691590461; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=Mv8u75UgPYyw3J1c9x8u8HK0vBlvX+2V/eWoGzYtNdA=; b=EnnUPxjQSRVAftNOSQhQMjO52wPL4wQUmZ9WZbSnktt9md1Ol3cg6GnBkmpRFi1qCR sL8jv0E56Ymlc0CfjwkNSK2MF06DXTJfLqLchxLzGLp9GugiIQ9NA78Nx4cYFx4mf0+x lflaF910uZF8eRd/t+tfVMa1e5ef3HkxZ89E0yTAlZaHTJcXb9xQduW9RH2gWYgiakMe A8hqCiXb6qHUA6l/vTA+Qw847QlvJ/aS30/+1hPZ7QO7oLGdoiWETZUmuR+Rem1dmXqD HVyR2kIRjwI/TDNEODrsMuRVKOgACfucnYVKAoWYkgQQLOES5SjtLQ0PAUgbKHbEjJVf IKbw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1688998461; x=1691590461; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=Mv8u75UgPYyw3J1c9x8u8HK0vBlvX+2V/eWoGzYtNdA=; b=OwPqOOA9dIeXTATW4hULedSKM39mPsathdUtHa2oZfXNG8/rRz8H3gdq50tFfCPJ6h KxuU2fQPflRr/QxYm2ByFiFA1+eg5Br/nphD6sE5+L8l6LT3zlj8Y38f7amzu2efGljf Z5qEtaqwFxmo8xMyigAJ2m3UfOTYG1+Dqrgh0nvq6o53iiOnUmaz7oaQExqBcf2Lwmei fzpD7bjsqUelw6Wy+pRlI+B+GPLmv3ehYqfBPd7YXLeo/Jw5FLsnp/slt/5AOfgfMlL8 n/hByEk4UJNKVOlkv6duRZYvvOQvkW5b/YJBtjRq10zHfoYtY+xLAsmH4KOl6qcO99m9 BHww== X-Gm-Message-State: ABy/qLbVFOgqIVnM2xTdC+mfmqc+/MYqk+4xF3S+kLdZ9wSDRAY6R1dp 1bnfGOkkFOU8U42KZz19tBFO0ltaqa91PAtK X-Google-Smtp-Source: APBJJlHsZpjqp1tOUsGLo2NIwaH4oWoc0CdMZFihBn4V9/gyCo4grpssGwQBRVOssU7NBeu0jaLAJQ== X-Received: by 2002:a05:6a00:15d3:b0:67f:1d30:9e51 with SMTP id o19-20020a056a0015d300b0067f1d309e51mr17644702pfu.33.1688998461035; Mon, 10 Jul 2023 07:14:21 -0700 (PDT) Received: from localhost ([58.38.26.179]) by smtp.gmail.com with ESMTPSA id a9-20020a62bd09000000b0066884d4efdbsm7432182pff.12.2023.07.10.07.14.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Jul 2023 07:14:20 -0700 (PDT) From: Liam Ni To: linux-mm@kvack.org, linux-kernel@vger.kernel.org, loongarch@lists.linux.dev Cc: zhoubinbin@loongson.cn, chenfeiyang@loongson.cn, jiaxun.yang@flygoat.com, rppt@kernel.org, akpm@linux-foundation.org, hpa@zytor.com, x86@kernel.org, bp@alien8.de, mingo@redhat.com, tglx@linutronix.de, peterz@infradead.org, luto@kernel.org, dave.hansen@linux.intel.com, kernel@xen0n.name, chenhuacai@kernel.org, Liam Ni Subject: [PATCH V3] [PATCH V3] NUMA:Improve the efficiency of calculating pages loss Date: Mon, 10 Jul 2023 22:14:08 +0800 Message-Id: <20230710141408.9998-1-zhiguangni01@gmail.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 X-Rspamd-Queue-Id: BB868100024 X-Rspam-User: X-Rspamd-Server: rspam05 X-Stat-Signature: zix96oxtdwwi57z6cyz75f1cnw5s8xws X-HE-Tag: 1688998462-593700 X-HE-Meta: U2FsdGVkX1+Xj9j0mlkdKFv2qhXKfWfhrzAwq+DEzh3h2HQXglzjoa6G/5aQv9FynwiCYsgD7KvmtQRWkiHQuaAQdDZ0X7swQzHlOGi2hToG9XI0g75qWB0xy3byOKW7MLyyvpHjnUG0bZ75QynbQ88fo5GTpuky9B6tpDQtWVkR3gSSE11BVt/qQXS23+4Ae5v3XHONrJNBFSosPFlR2Nvv4QMnehslEb1vvCYbxcIEGnKT03LuNcBk9hEvm/tn1qprU5ffQ2RKUy0jXESqE7KPec5BkHMyPtbqu70tdTwV5YkjJwDt/lECAmAt8RKmo/VZmEYBKHOI8MaERY2nqUulXA/vrAwFh0rFqA+fO33IiruMTN5ep1Kef7tTow+5bUMR25KXHvznZsrwEZgORlBZVkEfs8RoX4sTJQYco8xaLon6UOYe2CziDDEh7VyxQ6IfefLOE9VTq9nLbilLcR+p+nLIm4Z56YEj55OBFRRKvwjpTrJmIjlvmN7zYvrUCB0LcJSxyucjwRo/MoM6dFTbD4rK38hsiWuw+XZZomnExOHa0TkguTh0qYOGlxuKOh9QqTSWLz/ot8E1MDR1ZqJOt0DsAu3HrwIY+fAH1bI7jLc5yUa+c/d5IN6gQR5rbjLfDVkfA7braO6tBp9BVYMqzW7MDNE1q+gFt9jAtYdHPjXbmj2TWDwEPuLXtbjvIGWvxkumHJC6Bea1DCFd4B9hlKcBnliMlGy4retvomI39M46SW7y/qrXbhzIlI8SaKRKO8y+aP/m/JvEKlHCqgd7krc/nc1urHoxthACDvT9JBHBaGHF777WX6d2/2KZkT/Owu0D2DHYfiMrK5bSoCuOzsB4xqcPIEYwfDW+U5p5mGItC3IPw39RKlyYVkcNKSLZYsqVXQsDPZKroOgzhRAM9CoNmtJvTAVSjUqCrOjIzsnBq30soe/j3uKuPvRUWU3a29A/ygx+cvIYrl6 wsGkkiw9 rvk8qdJAo83WTE1aK1LPjLoLz+n962pAKH8shvi/l8ER7cNgC99BHEbyXj1QJFG98AkBKZGcY0RMNlWbRM2GYAgeWuuCIhi8TAqPQMXXV2jONMcl7jUgNXwO53ER0cleeG9WOFpNZlkrn05Gpa6Jx8MhP4XbDfwN8RwYCAomar76LlB9dm4yTQMz489yWgAzeMHb1B3kXBbiG5p6NOnjbd2P4XUcu/0japB+Zntbb525u5UPfSPtaeD2n9ioX0VDrBNHSshkqfqFOsE/YO6TdGinoTCPOB4SvInLjGYU2Mf4RwyYaV9scWLHeGCP2A7QYXtFuPdc/LW7fjXN7laLbeQOJfIu8Htbh719zEvvA+OmXkIE72YKqUoVeuyUVQKgLW8/jO2RlEHN4pvgSrCwn3nmZag/KAwTaqXCk8dnF31OP2iJXkg4Rj4PXz+4pIsmxCVsLbKjqntETTxEVBxZm2xB7rGcQzKyZL3HYBUJEVs+iDZAOrcK72wJ4SSd3R0qvEAIe 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: The number of pages in memblock that doesn't have the node assigned,which also means that these pages are not in numa_info. So these pages can represent the number of lose pages. V2:https://lore.kernel.org/all/20230619075315.49114-1-zhiguangni01@gmail.com/ V1:https://lore.kernel.org/all/20230615142016.419570-1-zhiguangni01@gmail.com/ Signed-off-by: Liam Ni --- arch/loongarch/kernel/numa.c | 23 ++++++++--------------- arch/x86/mm/numa.c | 26 +++++++------------------- include/linux/mm.h | 1 + mm/mm_init.c | 20 ++++++++++++++++++++ 4 files changed, 36 insertions(+), 34 deletions(-) diff --git a/arch/loongarch/kernel/numa.c b/arch/loongarch/kernel/numa.c index 708665895b47..0239891e4d19 100644 --- a/arch/loongarch/kernel/numa.c +++ b/arch/loongarch/kernel/numa.c @@ -262,25 +262,18 @@ static void __init node_mem_init(unsigned int node) * Sanity check to catch more bad NUMA configurations (they are amazingly * common). Make sure the nodes cover all memory. */ -static bool __init numa_meminfo_cover_memory(const struct numa_meminfo *mi) +static bool __init memblock_validate_numa_coverage(const u64 limit) { - int i; - u64 numaram, biosram; + u64 lo_pg; - numaram = 0; - for (i = 0; i < mi->nr_blks; i++) { - u64 s = mi->blk[i].start >> PAGE_SHIFT; - u64 e = mi->blk[i].end >> PAGE_SHIFT; + lo_pg = max_pfn - calculate_without_node_pages_in_range(); - numaram += e - s; - numaram -= __absent_pages_in_range(mi->blk[i].nid, s, e); - if ((s64)numaram < 0) - numaram = 0; + /* We seem to lose 3 pages somewhere. Allow 1M of slack. */ + if (lo_pg >= limit) { + pr_err("NUMA: We lost 1m size page.\n"); + return false; } - max_pfn = max_low_pfn; - biosram = max_pfn - absent_pages_in_range(0, max_pfn); - BUG_ON((s64)(biosram - numaram) >= (1 << (20 - PAGE_SHIFT))); return true; } @@ -428,7 +421,7 @@ int __init init_numa_memory(void) return -EINVAL; init_node_memblock(); - if (numa_meminfo_cover_memory(&numa_meminfo) == false) + if (memblock_validate_numa_coverage(SZ_1M) == false) return -EINVAL; for_each_node_mask(node, node_possible_map) { diff --git a/arch/x86/mm/numa.c b/arch/x86/mm/numa.c index 2aadb2019b4f..14feec144675 100644 --- a/arch/x86/mm/numa.c +++ b/arch/x86/mm/numa.c @@ -451,30 +451,18 @@ EXPORT_SYMBOL(__node_distance); * Sanity check to catch more bad NUMA configurations (they are amazingly * common). Make sure the nodes cover all memory. */ -static bool __init numa_meminfo_cover_memory(const struct numa_meminfo *mi) +static bool __init memblock_validate_numa_coverage(const u64 limit) { - u64 numaram, e820ram; - int i; + u64 lo_pg; - numaram = 0; - for (i = 0; i < mi->nr_blks; i++) { - u64 s = mi->blk[i].start >> PAGE_SHIFT; - u64 e = mi->blk[i].end >> PAGE_SHIFT; - numaram += e - s; - numaram -= __absent_pages_in_range(mi->blk[i].nid, s, e); - if ((s64)numaram < 0) - numaram = 0; - } - - e820ram = max_pfn - absent_pages_in_range(0, max_pfn); + lo_pg = max_pfn - calculate_without_node_pages_in_range(); /* We seem to lose 3 pages somewhere. Allow 1M of slack. */ - if ((s64)(e820ram - numaram) >= (1 << (20 - PAGE_SHIFT))) { - printk(KERN_ERR "NUMA: nodes only cover %LuMB of your %LuMB e820 RAM. Not used.\n", - (numaram << PAGE_SHIFT) >> 20, - (e820ram << PAGE_SHIFT) >> 20); + if (lo_pg >= limit) { + pr_err("NUMA: We lost 1m size page.\n"); return false; } + return true; } @@ -583,7 +571,7 @@ static int __init numa_register_memblks(struct numa_meminfo *mi) return -EINVAL; } } - if (!numa_meminfo_cover_memory(mi)) + if (!memblock_validate_numa_coverage(SZ_1M)) return -EINVAL; /* Finally register nodes. */ diff --git a/include/linux/mm.h b/include/linux/mm.h index 0daef3f2f029..b32457ad1ae3 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -3043,6 +3043,7 @@ unsigned long __absent_pages_in_range(int nid, unsigned long start_pfn, unsigned long end_pfn); extern unsigned long absent_pages_in_range(unsigned long start_pfn, unsigned long end_pfn); +extern unsigned long calculate_without_node_pages_in_range(void); extern void get_pfn_range_for_nid(unsigned int nid, unsigned long *start_pfn, unsigned long *end_pfn); diff --git a/mm/mm_init.c b/mm/mm_init.c index 3ddd18a89b66..13a4883787e3 100644 --- a/mm/mm_init.c +++ b/mm/mm_init.c @@ -1132,6 +1132,26 @@ static void __init adjust_zone_range_for_zone_movable(int nid, } } +/** + * @start_pfn: The start PFN to start searching for holes + * @end_pfn: The end PFN to stop searching for holes + * + * Return: Return the number of page frames without node assigned within a range. + */ +unsigned long __init calculate_without_node_pages_in_range(void) +{ + unsigned long num_pages; + unsigned long start_pfn, end_pfn; + int nid, i; + + for_each_mem_pfn_range(i, MAX_NUMNODES, &start_pfn, &end_pfn, &nid) { + if (nid == NUMA_NO_NODE) + num_pages += end_pfn - start_pfn; + } + + return num_pages; +} + /* * Return the number of holes in a range on a node. If nid is MAX_NUMNODES, * then all holes in the requested range will be accounted for.