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 959BFEB64DB for ; Thu, 15 Jun 2023 17:01:10 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E50DC6B0072; Thu, 15 Jun 2023 13:01:09 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id E01758E0001; Thu, 15 Jun 2023 13:01:09 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id CCA7A6B0078; Thu, 15 Jun 2023 13:01:09 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id BD94A6B0072 for ; Thu, 15 Jun 2023 13:01:09 -0400 (EDT) Received: from smtpin15.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 8BFEF160906 for ; Thu, 15 Jun 2023 17:01:09 +0000 (UTC) X-FDA: 80905597458.15.8218FE9 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf15.hostedemail.com (Postfix) with ESMTP id DE50FA0070 for ; Thu, 15 Jun 2023 17:00:48 +0000 (UTC) Authentication-Results: imf15.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=GxF42cMf; dmarc=pass (policy=none) header.from=kernel.org; spf=pass (imf15.hostedemail.com: domain of rppt@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=rppt@kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1686848449; 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=6F55MzPhB9KfNpubJXp6egu+AQjXxNLF1LzhDHlIt3o=; b=7tFIPgUWGAvkX6zoSgD2xbIIFKV5GMSBCBnIjaPBgfgRCIG52WjZQkU7XUpZGTGrqCwRk2 VfR8DkHnyqLvcAPODmHQ8qTyirspK12q98h+jglYokyVhVpdjNAAZ725cp+mvzBc6Aal2W Q7rTO1FFvuL1y3AObv3RgKi+14BUWqs= ARC-Authentication-Results: i=1; imf15.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=GxF42cMf; dmarc=pass (policy=none) header.from=kernel.org; spf=pass (imf15.hostedemail.com: domain of rppt@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=rppt@kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1686848449; a=rsa-sha256; cv=none; b=zD48W6Go+iCVbWIo6LvGyv2GH4swD4xPL6tvRSlhkg5ZUvkVwFPM6nywjOdacggFwUD5+W LNNScPgqxwbePrAujDsshR2dPDzC8Gp5nHJqTBH12PlBQkOIVyllsTZfMcqmBVJkSgZI7f Yzmhh/0/bf6dTLNDtze1IkK6gVXbkF4= Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id D383561018; Thu, 15 Jun 2023 17:00:47 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4B314C433C0; Thu, 15 Jun 2023 17:00:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1686848447; bh=Kt68JHUeOhDerRP2RZ9sTpahMgEkSX3vVTlKMeVTh1E=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=GxF42cMfY0HUChiikg+RCCMhCwu89z0N6EI24JViOFkR6o1sIQbEWNPZY6hPif1LU J4luxsIOIWxZxRUKTLiWd7tl97uTnrx7MJIUg3z6Jrv2nrRw+RiNBat4Jz4CQkF+PQ ape9wq+MqDUgaS+RRZCOuNgT5fFweisge6aj1Ns7juQuJqXGw3zQzMkjKtPixIuByd 1ZvrXvyOYtdEr90PYIfsqnOeWpESJmFsD6ggDBlqUaJ9UTy6G52H9snDi+jmtjlzhV D8htqpJUdjHceYxo62CR31ahp3aWky4fA43i6TZGzYfGxso70nhWfno7rihwDUAe0a HXxH63gXK/+gQ== Date: Thu, 15 Jun 2023 20:00:11 +0300 From: Mike Rapoport To: Liam Ni Cc: dave.hansen@linux.intel.com, luto@kernel.org, peterz@infradead.org, tglx@linutronix.de, mingo@redhat.com, bp@alien8.de, hpa@zytor.com, akpm@linux-foundation.org, x86@kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: Re: [PATCH] x86,NUMA:Get the number of ram pages directly in numa_meminfo_cover_memory() Message-ID: <20230615170011.GK52412@kernel.org> References: <20230615142016.419570-1-zhiguangni01@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20230615142016.419570-1-zhiguangni01@gmail.com> X-Rspamd-Queue-Id: DE50FA0070 X-Rspam-User: X-Rspamd-Server: rspam05 X-Stat-Signature: nt4p3qp7k9iykmf7p4sojxazyxotucdo X-HE-Tag: 1686848448-927803 X-HE-Meta: U2FsdGVkX18uP76zy4dIj/mifVywEXMe5jnhUKdenE8mb64c8a/aJ6RQrGnmT8vSxsJ84gRumiiCVjc+0PXBPRWiU4O5/lTXbFwL8slJMLaVCgyS/7xA5xviucwGDtBZw6/qgzFX4HOLUjSmjM3ulVPdS8XUsIIS1WTVIR2slUpz2aqsaTVSUcTELDmlQKn+SMEGM4etCoAvyyoa6dZyBl7BSbyTT9+ZaX8DNs5KFTOU6iMD9nuKpwkGtitV/ZZZr4FxzaSzMYIHkJHZNlw4YK3XlCy3mmTuf0xF8EyyI6DlE/FsHPCPccf57vXiZ2NcDohvHExwy06CHJrSDC8J2zO/3z6FLm4h7GWBfyF41AYJ4+Vi9uFI3Ej/NIeRwnPZxgEKjMCrwMXb6EkL2+C9spyCs73ni0o205+pRKfAcm9/N0HApjvcJYRgbf7jK3BxcIg+AT1I2Tcf7vdtFYpU0obxCUNw4sLOy4rJlSID/qDl704Cg8hgxLKTFFwluKGJHSIDezA2ak/yYS5lnNU/hBgzG5aaXWqdX6Pl0CriK6sGYm4T84yk7qc4z5wcbfvWO1mOTis9/Bar7KusebpcNEQTZEogIEzX5a5eO2x73w03N2Dw/spR4HxXb4rVRlH1+IqmzbNmJNmRPTgxSblymt8vqBQlgZfH48calPE9iGHA4mAGYDOvxiAGWW/WKJeg89GUKNlO/xUjiOW26oDndXlVDgEV+ZUrjvbM/4Wyqu2+Y1MA8AngM3ZZ8V61fFHD3HqJo0wlO5yShFOxEMW6yBYeOEA4DhJK+htLjNRSc8bKquVhL2RqJ3lkIepgCi6xU8lLEtvV78xMUoyw5tpucJxkfhcmvM8EXH6zFkroTETLn+V/iV0lQDhGaqM2KLVbvkKm4RV7er9UvOeIVam+e6YKf7YKO3w1ziswuvtBwIM89WchOBH5wjXo5cHbK9kkNeMntIHdIDhW5sYCtrK R0jtxBvW XmqgQT+dfujPsPsuK+6MZHavHnbV92G1csvOnaKfFFi1BxA1UgUTTiG+yWy5G8fPLDa9Z2eL3+0B3oT1uTqVev5ztKBNZ6Nykg8surKkQDt0761HADpcoSt+XKGHnMG2DdejKBo1qgl5MT+vcBfNg5W+7Y3qkuHYVbAFTMO9i+dbhdxX1J+1osWiOM3eAQXRGk5+aLhQ4X0b4/oHqctEuYzldMDuttsF9w3f+ltBCFDh/nW0WoAEUP9Ln2SWWfDj6FuTc9WLGXdDoCh1B2JL/sQVwwFOXuH3OheLZ8aotm3R96b2xwKKDb9o4COCFtEYW0lmDxEIPgNOPdt+V1YZgAEQmnJk5w/wP4FMiTl64xM8DJWc= 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: Hi, On Fri, Jun 16, 2023 at 12:20:16AM +1000, Liam Ni wrote: > In a previous implementation,The ram page is calculated > by counting the number of holes, > however,the number of ram pages is calculated during hole calculation. > Therefore,we can directly calculate the amount of ram pages. > > Signed-off-by: Liam Ni > --- > arch/x86/mm/numa.c | 4 ++-- > include/linux/mm.h | 4 ++++ > mm/mm_init.c | 33 +++++++++++++++++++++++++++++++++ > 3 files changed, 39 insertions(+), 2 deletions(-) > > diff --git a/arch/x86/mm/numa.c b/arch/x86/mm/numa.c > index 2aadb2019b4f..8ea0e956e3d7 100644 > --- a/arch/x86/mm/numa.c > +++ b/arch/x86/mm/numa.c > @@ -461,12 +461,12 @@ static bool __init numa_meminfo_cover_memory(const struct numa_meminfo *mi) > 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); > + numaram += __available_pages_in_range(mi->blk[i].nid, s, e); This is wrong. You add number of pages in range core MM sees to the number of pages covered by the numa_meminfo. More generally, rather than traverse all the numa_meminfo's and for each of them traverse all the regions in memblock.memory it's enough to count memory in memblock that doesn't have the node assigned and compare it to memblock_phys_mem_size(). > if ((s64)numaram < 0) > numaram = 0; > } > > - e820ram = max_pfn - absent_pages_in_range(0, max_pfn); > + e820ram = available_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))) { > diff --git a/include/linux/mm.h b/include/linux/mm.h > index 0daef3f2f029..f7f8c3476d1e 100644 > --- a/include/linux/mm.h > +++ b/include/linux/mm.h > @@ -3041,8 +3041,12 @@ void free_area_init(unsigned long *max_zone_pfn); > unsigned long node_map_pfn_alignment(void); > unsigned long __absent_pages_in_range(int nid, unsigned long start_pfn, > unsigned long end_pfn); > +unsigned long __available_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 available_pages_in_range(unsigned long start_pfn, > + unsigned long end_pfn); > 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..33451afbc040 100644 > --- a/mm/mm_init.c > +++ b/mm/mm_init.c > @@ -1165,6 +1165,39 @@ unsigned long __init absent_pages_in_range(unsigned long start_pfn, > return __absent_pages_in_range(MAX_NUMNODES, start_pfn, end_pfn); > } > > +/* > + * Return the number of avalible pages in a range on a node. If nid is MAX_NUMNODES, > + * then all avalible pages in the requested range will be accounted for. > + */ > +unsigned long __init __available_pages_in_range(int nid, > + unsigned long range_start_pfn, > + unsigned long range_end_pfn) > +{ > + unsigned long nr_avalible; > + unsigned long start_pfn, end_pfn; > + int i; > + > + for_each_mem_pfn_range(i, nid, &start_pfn, &end_pfn, NULL) { > + start_pfn = clamp(start_pfn, range_start_pfn, range_end_pfn); > + end_pfn = clamp(end_pfn, range_start_pfn, range_end_pfn); > + nr_avalible += end_pfn - start_pfn; > + } > + return nr_avalible; > +} > + > +/** > + * available_pages_in_range - Return the number of available page frames within a range > + * @start_pfn: The start PFN to start searching for holes > + * @end_pfn: The end PFN to stop searching for holes > + * > + * Return: the number of available pages frames within a range. > + */ > +unsigned long __init available_pages_in_range(unsigned long start_pfn, > + unsigned long end_pfn) > +{ > + return __available_pages_in_range(MAX_NUMNODES, start_pfn, end_pfn); > +} > + > /* Return the number of page frames in holes in a zone on a node */ > static unsigned long __init zone_absent_pages_in_node(int nid, > unsigned long zone_type, > -- > 2.25.1 > -- Sincerely yours, Mike.