From mboxrd@z Thu Jan 1 00:00:00 1970 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 53490EB64DA for ; Tue, 18 Jul 2023 14:32:00 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A3A7A8D0007; Tue, 18 Jul 2023 10:31:59 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 9EA338D0001; Tue, 18 Jul 2023 10:31:59 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 83D688D0007; Tue, 18 Jul 2023 10:31:59 -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 6FE6D8D0001 for ; Tue, 18 Jul 2023 10:31:59 -0400 (EDT) Received: from smtpin03.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 32B8E402C6 for ; Tue, 18 Jul 2023 14:31:59 +0000 (UTC) X-FDA: 81024971958.03.4F9EA16 Received: from mail-yb1-f178.google.com (mail-yb1-f178.google.com [209.85.219.178]) by imf13.hostedemail.com (Postfix) with ESMTP id C14A4200AE for ; Tue, 18 Jul 2023 14:31:32 +0000 (UTC) Authentication-Results: imf13.hostedemail.com; dkim=pass header.d=gmail.com header.s=20221208 header.b=PPKZxxlb; spf=pass (imf13.hostedemail.com: domain of zhiguangni01@gmail.com designates 209.85.219.178 as permitted sender) smtp.mailfrom=zhiguangni01@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1689690692; a=rsa-sha256; cv=none; b=0uFh0zoIQ+kl64fKp1APa+dxXE3RLyZRUgFbvp+5j/O2EEho0r19TJn7xoUVvflt9MzqMY HCn1qwqAIBAbMZIXk0BkvuoazPsThWtZ18NRoR/RPxldwKtP7jIlgrf4YolaVDLva95rxN wPQ19mlXWlgLQSFVBv8GVtojUlgan6w= ARC-Authentication-Results: i=1; imf13.hostedemail.com; dkim=pass header.d=gmail.com header.s=20221208 header.b=PPKZxxlb; spf=pass (imf13.hostedemail.com: domain of zhiguangni01@gmail.com designates 209.85.219.178 as permitted sender) smtp.mailfrom=zhiguangni01@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1689690692; 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=rjpIeqow7KavnD0/SRlgq73LQricx6uLDxJMeUQiZ4Q=; b=HgG04pEDunL67UyDp0vVzSBujQQ40gd4Gi/hu30s8LGguWf4Vtti1wYhcySfOvGPBwkB9J vxhlFls5hrYtPvvEdmgdhwwg/cZiRoNKXjxdYwA4XZNPbR5rCVFZzN2fMfPp0bfXq5//3b du8Sco+iNI2mYbq6cXXW6vG3Y/b4JSo= Received: by mail-yb1-f178.google.com with SMTP id 3f1490d57ef6-c11e2b31b95so5923035276.3 for ; Tue, 18 Jul 2023 07:31:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1689690691; x=1692282691; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=rjpIeqow7KavnD0/SRlgq73LQricx6uLDxJMeUQiZ4Q=; b=PPKZxxlbX67hKoW02aRYjLt7DnZCbtwFM52WyDMWojmxap2OFcv4VhrJtfyoOPmaY5 K3dJSnLIcwzPAUuVeAVZE15JOcbVf/Qk9xdCGyrEZo01HRCrRhKm9glg7WIENRWIlzkW 1HXFRWSXZ2Fd8fnQpyJVPZFoZ46mf5PgkuFBA6+w2T2zku8i2GfGbTAe81O7LAsxB8A6 kXkizNhQjyq3zL101Xsj2UU6LDY34TOft7WkNZNGNcEoEQwO84n5ZOBk2ijX78886e8/ I66q5/Avp/9sseOt8mtApcdHGoPNhCPiUukAB3GtCkY6OGImiwuASUlXC0o61p15M4k8 sYqw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689690691; x=1692282691; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=rjpIeqow7KavnD0/SRlgq73LQricx6uLDxJMeUQiZ4Q=; b=ZObduPaW4566h47WYZ6S15VvEQGijmXhfRs7iPgix0BzFSBValCyCDdL1dTUTej86e 7SAejVdFnOlgSfgfSqVdwXhaAjOrX3sGBMJ67Y3QEC4upHK5S6S8noD7OyioQJ/0gN5k yiglIYWSVa33q5KZh+v9z6vNu8p2r2LKyeJD8ockTJPtC09MuBtfnp41ih3HnoExTb1L tWGG4KjB5bdAWxmtpLZnN1EF/5hesBFT94AjqgzzaS08hQ8NVCMk3Qaw0dci+agBfn4/ Hvl9I9gSVQYjDRRsDpvJ3/xQJTsafHRrSbWiMC9CIlo2omNcT8SzVp/2CFBSV3YqPzCT ABVg== X-Gm-Message-State: ABy/qLYOxNhp/Lw+JlXny2F9bpAXHgmP8P1bbDvzRYU/lF2JONOljoUv vYcuefL7vTIATUoLzRAnFHrwcQUMaMU1ymBcVLmw6Bk6SoA= X-Google-Smtp-Source: APBJJlHbP2K9+0wdcMRs1ip81cmcwyNZLOlC7o4iriCt43sinSc0iTV9tvvNKQBkROzB3Os0KlriLnI/3+rVCADyVIc= X-Received: by 2002:a5b:4d2:0:b0:cf0:8fde:c326 with SMTP id u18-20020a5b04d2000000b00cf08fdec326mr35365ybp.42.1689690691401; Tue, 18 Jul 2023 07:31:31 -0700 (PDT) MIME-Version: 1.0 References: <20230710141408.9998-1-zhiguangni01@gmail.com> In-Reply-To: <20230710141408.9998-1-zhiguangni01@gmail.com> From: Liam Ni Date: Tue, 18 Jul 2023 22:31:20 +0800 Message-ID: Subject: Re: [PATCH V3] [PATCH V3] NUMA:Improve the efficiency of calculating pages loss 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 Content-Type: text/plain; charset="UTF-8" X-Rspamd-Server: rspam08 X-Rspamd-Queue-Id: C14A4200AE X-Stat-Signature: 9go9f93gb3t6us3jogyksag3s6qeyzao X-Rspam-User: X-HE-Tag: 1689690692-333103 X-HE-Meta: U2FsdGVkX1+qTFE10cqJQxQt6s8EAiEIVMKixvw6j/rW4JXhVxShwQUGF7JtBWkGaQeOq0WYZ500iu6ySFWtdNKh3hnW9nzQRD8YTFCuvivrB4xhY/FUqNsIERGp1skLHTzTecxbYVLOivevnCtjbYyk25HxWbgIMgFIJuCvKXaZi7nR/h4/AULMJO800u+tztXpA8BX7W04nTIH0kd5eBzwBd0X18jHq9ESxUvmiXzNLkQjj/ykSTtKLc9WrWuaJm7gq15IcwkysrIAPXMA+0BGWH0TnVHLFvEK0atJs1rfAb4hlPTtY9Vn2NRQzNEP6iBPd5dDwbdl9KpFaBvGcOu6+dT0klj95eVriGqRP+M0ImabmnA4/+PqgPktrCTLNiOiwUZcm8eEw/upRWHyyQafWyxX0PZntNwI8dEoHR6C/Sm0El+Y3KgClpS7zUDP37Ie1WJ3dOwtik8htPueifCTGQi5Ivg4/bitDVj5Ul++5Vtuq2a98NpJoPxubTRgtE0lECbUdEwafeCzNDHuK4aZIko+vhcpqueLgKXl0y8lhK4TXa9bBsDC2vN1YpNrfnodzKyPUZ5CVl5UAv1xFMpBKrexaOII+qisSGWz3LtgW80BchkZNj+D9Co/G0R9XEE/libzCz0D6MUa2tfdd1dSQlWVJGf+TCYyvDCnCyuSuV6fuei9oOcmHlPGRw/8EhIRA+afXAEF6ENS4TjnSjsszcbjHhqZyBMBHUTBGwLICfkhn5h6EpEd5E6wZwV4P5NGOoLod9gbtj9b9GK2XBk/QsZ80fh7FXiA/7Z0afwmoEX9T+S6BIKEKp3eWurzF3MWgWH2s2QL5r6bdVgr2vHBimDg3Lu/VuLUDTLVhVFdQMflgiC3/HqMs0lc+CqpN0SOJIjML+oy78kDEKv890PJLE+SmoeAmReibq0kkRLe7FEfEOuoLdgxM91a5X0hsAgbjcGjFbkTRobNykq aLEGcuma 8Vy7/zUAi47nyqTYORt6HJ7pWtUHJGexHqek6/cLyP8ZL8OOD2eo6/r77fYK7WtB7F/05ODEC9/+o/Zpozc7Z1fkzxFHBJ5gNrHld/rOC7G9JW73H7ulbJ2ktLZdJ6ixidk5FirOPnVG1GLTTnNT1j2npPwFuZ21+qIcCZx83GfOWx46lrZF9ZTjuUErGNIxFEEIpsgVCG/j4jmcC/EjMMQWja3wpOcNDEtz7e4hNWubHWB1s+7UbJ7okBRntsurr4t5VIAsetw+zb0kogIru1Oo7uCbys2POc5osaTZ218o64XWUzovs/t9X6qU/wRxU0T3IRTCMQKB5TEYvef0fzxYNoSdcoLwfTCo8wiXRLjcXyVrepSe5ICUYUsCDH1EsuCGCJxYYTwPqZ24dPxpeRi6+/vFjK7M19B8sMG9HHl6/d4gueAt8Yrh6QA== 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: Friendly ping On Mon, 10 Jul 2023 at 22:14, Liam Ni wrote: > > 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. > -- > 2.25.1 >