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 7FBFFEE57DF for ; Mon, 11 Sep 2023 13:39:08 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id CEA696B029F; Mon, 11 Sep 2023 09:39:07 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id C9AA76B02A0; Mon, 11 Sep 2023 09:39:07 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B3C776B02A1; Mon, 11 Sep 2023 09:39:07 -0400 (EDT) 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 A343F6B029F for ; Mon, 11 Sep 2023 09:39:07 -0400 (EDT) Received: from smtpin25.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 7ADE11C9C4C for ; Mon, 11 Sep 2023 13:39:07 +0000 (UTC) X-FDA: 81224422734.25.B724101 Received: from mail-pf1-f169.google.com (mail-pf1-f169.google.com [209.85.210.169]) by imf13.hostedemail.com (Postfix) with ESMTP id A4B8F2000C for ; Mon, 11 Sep 2023 13:39:05 +0000 (UTC) Authentication-Results: imf13.hostedemail.com; dkim=pass header.d=gmail.com header.s=20221208 header.b=VtRWlKI6; spf=pass (imf13.hostedemail.com: domain of zhiguangni01@gmail.com designates 209.85.210.169 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=1694439545; 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:content-transfer-encoding:in-reply-to: references:dkim-signature; bh=yzjWWSPat2JgzSDnNcTFgX4QJsPLKM/SCLEwhPsOghY=; b=tZZ0heuQ9WyOs2CxQPbBN9riMFBlME3zHxb7/p4sYFwPoeA189dUAUFtrnMbCJJsl3+M5n hlpZZgSmPIlV+5gfYUGWgyQWsmAzq3WR09Alhnr0KZm57bB4+CuPtfB01VscEs7joP9SQ8 HCQ/8srPVG4HAjdxXEE9XdyEGl9vQWs= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1694439545; a=rsa-sha256; cv=none; b=0MEiWsZcJqIqc5L0C8n6e7kY3YIMwUzu9fz6oLM+mZu4m0zokrldqlfrYbXMVGqwBHUFUu Ch88jvVK17zNT2tYbIGsbsRv0G/hLGvuPvstI0C2vJszP3UOzUDmR8ZA3/bVdlJi4VCsVo iZBsmWjhrskEgcZ9KvsV/HqkvogzQcA= ARC-Authentication-Results: i=1; imf13.hostedemail.com; dkim=pass header.d=gmail.com header.s=20221208 header.b=VtRWlKI6; spf=pass (imf13.hostedemail.com: domain of zhiguangni01@gmail.com designates 209.85.210.169 as permitted sender) smtp.mailfrom=zhiguangni01@gmail.com; dmarc=pass (policy=none) header.from=gmail.com Received: by mail-pf1-f169.google.com with SMTP id d2e1a72fcca58-68fac16ee5fso1206470b3a.1 for ; Mon, 11 Sep 2023 06:39:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1694439544; x=1695044344; darn=kvack.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=yzjWWSPat2JgzSDnNcTFgX4QJsPLKM/SCLEwhPsOghY=; b=VtRWlKI6vA+lSzrtIWMMDWPGARO2+wtFftayJc5djc9Ru+0m5LhdxFUGe7cvzdu4Q7 QYp2v2dCgh9/5Yo0iy9ws31U+8FJqgNM06iWM1bEnskmkkgiCDh3I7K/4t08gpU22g5T 8NUZnDPLTZwUsLDXOwCnlxNWvSho7mzj7e5f8V/EadUcZZC2rbbh4rGdRHh2kNIP5gBg 0jvJeNefsOafTSuii2KtHBT4ijzNLD5xFkkh0V0HDMj4NDozzzch+zHkNfrNtAFHB+sD HpFz4dzKolnyyTvq7QKAJHpbEWrSG8qYpyPFmWnPFs3eUT8MYVDbUBASUQIvBLy0XZR2 72gA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694439544; x=1695044344; 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=yzjWWSPat2JgzSDnNcTFgX4QJsPLKM/SCLEwhPsOghY=; b=YNykcoJBVjmf/RnTeY4+LqgWFlcrg5GZx/59MpaWcBi6o3dDVL52dPtBGLVLbTE24U q+hyzIlunJQSm+BnhvVtHgI56PgYQ0c+/DUfbtEQrNIgBBFNaj/feT6ElRGzfBYA2EoA NmnGYC3Ae0BlDzNRmz/J1qY1nB6buet13EF2YUu0cvu1/mJ+yPmIHX5y3qVZgzUiTT53 DJuODtdcmhFr/mnL86X4UUGT33M/op10/tvGChw6IbK8hALR1MpVhMxbVALHamltHkyM s0hw7Na7qR1VOnumz88krFL3LpKhh6T3IGN1P7belSHKa5mLye6AGJG7kMTqkkOBNHOD N0BQ== X-Gm-Message-State: AOJu0YxyVSlxAxN0ncvBFJVgUZMahJHQYqtJXg580Pfi1ZLJ6G0i4j/7 Q1UxyR4YowoGaUkeE/woNcU= X-Google-Smtp-Source: AGHT+IH8HWLxoNkhA8I8mAWSHBs8jufPtqLVvAu/k6LkGMx57d5cT/PNbs9sTc0ZdSx9AHJg7UZbCw== X-Received: by 2002:a05:6a20:3c9f:b0:153:4ea6:d127 with SMTP id b31-20020a056a203c9f00b001534ea6d127mr9849451pzj.18.1694439544396; Mon, 11 Sep 2023 06:39:04 -0700 (PDT) Received: from localhost ([58.37.145.245]) by smtp.gmail.com with ESMTPSA id m26-20020a63941a000000b0056ae1af610asm5475157pge.58.2023.09.11.06.39.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Sep 2023 06:39:03 -0700 (PDT) From: Liam Ni To: linux-kernel@vger.kernel.org, linux-mm@kvack.org, rppt@kernel.org Cc: dave.hansen@linux.intel.com, luto@kernel.org, peterz@infradead.org, tglx@linutronix.de, mingo@redhat.com, bp@alien8.de, x86@kernel.org, hpa@zytor.com, akpm@linux-foundation.org, Liam Ni Subject: [PATCH V4] NUMA:Improve the efficiency of calculating pages loss Date: Mon, 11 Sep 2023 21:38:52 +0800 Message-Id: <20230911133852.2545-1-zhiguangni01@gmail.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: A4B8F2000C X-Rspam-User: X-Stat-Signature: qwxaqp5qa569rm8yy5ssr7s51rsd9z97 X-Rspamd-Server: rspam03 X-HE-Tag: 1694439545-556745 X-HE-Meta: U2FsdGVkX1/iKnZ0Tt4fJPNNHaUGPwUsmzeJbOhCT7u8ae+qIzlxqrhX3LQUT04ARx2nJ8YRC9kfHmDCpF2jMFwAHHEwAoApeYieUx4WnOQo5KYaZ+RxQvIOj0/LxM411Di8/JOkIeZ2kx8nyf6J9QPrZjHDibS2GEjHsEb940/MfUKLVZNIKIc+T/13OoOWpQ83eP/NgjyzeOGLesogk8iFYGKonboEp6zTQYjF299f1ya5Nay9ZNmr6lm3y9RPwUSS0bRu9vQnTn9YLD4MSizV6/l17g6xrXDVN/hwieo+2RI5V57Y3NGPoPObGMUG5+cfV+AibxxD3lHk4hMD9p/oSM5oY9Et5RWISmSeqHj5AlS2zs1tIB7g4uHqWKWumTIS9D1fsYEfZK97oFWqVnBRFb9QinadTirtwP2BzbBDoQRqZgeteuA8erTLMjE4tDJy++cNa8iGN1pd9RBxIHmvNwoph2YB/woYdXUcUN2pIJpcXGSoUO216cW23Dpr0V66OxKen5bFWnRmNtA1Bt5HGINdh6fgJ/IUcRhvysAQC/fcrhLzVGpfah9tC35Cx11Y7WEHmhVQR74Alqcf0AAN0PS2fl9FLkaHT6IOTG/EvUE9x21UZEwuBEvrrw4A5zb8OT4YvYRJOWbiD1bQmkmHUtMn2Ip6Dbj1ZHNH2B7TqKX+lr+8/B53ogo5gEkeaW90AGG7zjaq1peGCaxYCTO3clH4yeV7DMSKMpLS16Zanbw3FY3pxsKxwgHn73u6jN1mduT16B72U3EuuJKZI1ljF5kQx870l4FbMaw7ieqUf8AtYDxgEh0JWU/h0ftOmvUAFYhwQc73fgP/WoFM/fWPWdPccyyytwThoEzF9tWKlwOA+U+FcCoeA5HTlbN/b+8K8+RoUHSM3y+VHt34FeynOujAFdwuxq/4DDSA8/2wMJjr1OkwROJk7v9pK01CVfYqZ1fScA+0AM87gcJ CT7TlNMd denqPGvfZlB31triw0SIV4z7U+bhB7EbXqRdvRW+YToTcKTfxGC/tvr1yhW2s3N5YTf1eR8bUz+b2f9I2QJtEkuT6gU6Enyi+j/FwPJS0bPGkMdPDgxGXKVqK7i4nfiwdmD1FtrWXQzx/pRoz4oEluiMnO4CMihffHCsvWEau5mJ/aFyAo7GJoAyiZjl/ihUYnqbbiqdieXgtI2Hzb2uYvWeE7wYIULPF+ZGg512AX31yj1gFV58NLyfDlNolrkkibAHJWHfcIPC/dunY4dGmPg1/QyV+YibeDeX0lp9rUAm2frqv3DbKnU0YmxczXnBemjWmu+knikns36+IcqL47MLN+l71ovBbdE2iFMorWEm5P25uwvGF1/KkupB1fS+B7Id5KHH563RMslXVz22ZiAIU70cVqVq12kWjq8V/IeSEELPlhd6IuqOxBKPPyMRTkPeMYiP5aeO7K9uiBYYIH2Ph0B4f+W41cf4g8UNa4SMgB3Lie9e5/gzadGDAK1ryMCPoHNgQaAXO5xY= 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: Optimize the way of calculating missing pages. In the previous implementation, We calculate missing pages as follows: 1. calculate numaram by traverse all the numa_meminfo's and for each of them traverse all the regions in memblock.memory to prepare for counting missing pages. 2. Traverse all the regions in memblock.memory again to get e820ram. 3. the missing page is (e820ram - numaram ) But,it's enough to count memory in ‘memblock.memory’ that doesn't have the node assigned. V3:https://lore.kernel.org/all/CACZJ9cUXiWxDb6hF4JFhWe7Np82k6LopVQ+_AoGFOccN4kjJqA@mail.gmail.com/#r 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/x86/mm/numa.c | 33 +-------------------------------- include/linux/memblock.h | 1 + mm/memblock.c | 21 +++++++++++++++++++++ 3 files changed, 23 insertions(+), 32 deletions(-) diff --git a/arch/x86/mm/numa.c b/arch/x86/mm/numa.c index 2aadb2019b4f..ee5f08adfaf6 100644 --- a/arch/x86/mm/numa.c +++ b/arch/x86/mm/numa.c @@ -447,37 +447,6 @@ int __node_distance(int from, int to) } 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) -{ - u64 numaram, e820ram; - int i; - - 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); - - /* 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); - return false; - } - return true; -} - /* * Mark all currently memblock-reserved physical memory (which covers the * kernel's own memory ranges) as hot-unswappable. @@ -583,7 +552,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/memblock.h b/include/linux/memblock.h index 1c1072e3ca06..0c3a193ebc58 100644 --- a/include/linux/memblock.h +++ b/include/linux/memblock.h @@ -120,6 +120,7 @@ int memblock_physmem_add(phys_addr_t base, phys_addr_t size); void memblock_trim_memory(phys_addr_t align); bool memblock_overlaps_region(struct memblock_type *type, phys_addr_t base, phys_addr_t size); +bool memblock_validate_numa_coverage(const u64 limit); int memblock_mark_hotplug(phys_addr_t base, phys_addr_t size); int memblock_clear_hotplug(phys_addr_t base, phys_addr_t size); int memblock_mark_mirror(phys_addr_t base, phys_addr_t size); diff --git a/mm/memblock.c b/mm/memblock.c index 0863222af4a4..8f61f868bec1 100644 --- a/mm/memblock.c +++ b/mm/memblock.c @@ -734,6 +734,27 @@ int __init_memblock memblock_add(phys_addr_t base, phys_addr_t size) return memblock_add_range(&memblock.memory, base, size, MAX_NUMNODES, 0); } +bool __init_memblock memblock_validate_numa_coverage(const u64 limit) +{ + unsigned long lose_pg = 0; + unsigned long start_pfn, end_pfn; + int nid, i; + + /* calculate lose page */ + for_each_mem_pfn_range(i, MAX_NUMNODES, &start_pfn, &end_pfn, &nid) { + if (nid == NUMA_NO_NODE) + lose_pg += end_pfn - start_pfn; + } + + if (lose_pg >= limit) { + pr_err("NUMA: We lost %ld pages.\n", lose_pg); + return false; + } + + return true; +} + + /** * memblock_isolate_range - isolate given range into disjoint memblocks * @type: memblock type to isolate range for -- 2.25.1