lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <D80YXDU2A6IE.S4PQYSOT0PYI@nvidia.com>
Date: Mon, 24 Feb 2025 15:45:51 -0500
From: "Zi Yan" <ziy@...dia.com>
To: "David Hildenbrand" <david@...hat.com>, <linux-kernel@...r.kernel.org>
Cc: <linux-doc@...r.kernel.org>, <cgroups@...r.kernel.org>,
 <linux-mm@...ck.org>, <linux-fsdevel@...r.kernel.org>,
 <linux-api@...r.kernel.org>, "Andrew Morton" <akpm@...ux-foundation.org>,
 "Matthew Wilcox (Oracle)" <willy@...radead.org>, "Tejun Heo"
 <tj@...nel.org>, "Zefan Li" <lizefan.x@...edance.com>, "Johannes Weiner"
 <hannes@...xchg.org>, Michal Koutný <mkoutny@...e.com>,
 "Jonathan Corbet" <corbet@....net>, "Andy Lutomirski" <luto@...nel.org>,
 "Thomas Gleixner" <tglx@...utronix.de>, "Ingo Molnar" <mingo@...hat.com>,
 "Borislav Petkov" <bp@...en8.de>, "Dave Hansen"
 <dave.hansen@...ux.intel.com>, "Muchun Song" <muchun.song@...ux.dev>, "Liam
 R. Howlett" <Liam.Howlett@...cle.com>, "Lorenzo Stoakes"
 <lorenzo.stoakes@...cle.com>, "Vlastimil Babka" <vbabka@...e.cz>, "Jann
 Horn" <jannh@...gle.com>, <owner-linux-mm@...ck.org>
Subject: Re: [PATCH v2 18/20] fs/proc/task_mmu: remove per-page mapcount
 dependency for "mapmax" (CONFIG_NO_PAGE_MAPCOUNT)

On Mon Feb 24, 2025 at 11:56 AM EST, David Hildenbrand wrote:
> Let's implement an alternative when per-page mapcounts in large folios are
> no longer maintained -- soon with CONFIG_NO_PAGE_MAPCOUNT.
>
> For calculating "mapmax", we now use the average per-page mapcount in
> a large folio instead of the per-page mapcount.
>
> For hugetlb folios and folios that are not partially mapped into MMs,
> there is no change.
>
> Likely, this change will not matter much in practice, and an alternative
> might be to simple remove this stat with CONFIG_NO_PAGE_MAPCOUNT.
> However, there might be value to it, so let's keep it like that and
> document the behavior.
>
> Signed-off-by: David Hildenbrand <david@...hat.com>
> ---
>  Documentation/filesystems/proc.rst | 5 +++++
>  fs/proc/task_mmu.c                 | 7 ++++++-
>  2 files changed, 11 insertions(+), 1 deletion(-)
>
> diff --git a/Documentation/filesystems/proc.rst b/Documentation/filesystems/proc.rst
> index 09f0aed5a08ba..1aa190017f796 100644
> --- a/Documentation/filesystems/proc.rst
> +++ b/Documentation/filesystems/proc.rst
> @@ -686,6 +686,11 @@ Where:
>  node locality page counters (N0 == node0, N1 == node1, ...) and the kernel page
>  size, in KB, that is backing the mapping up.
>  
> +Note that some kernel configurations do not track the precise number of times
> +a page part of a larger allocation (e.g., THP) is mapped. In these
> +configurations, "mapmax" might corresponds to the average number of mappings
> +per page in such a larger allocation instead.
> +
>  1.2 Kernel data
>  ---------------
>  
> diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c
> index 80839bbf9657f..d7ee842367f0f 100644
> --- a/fs/proc/task_mmu.c
> +++ b/fs/proc/task_mmu.c
> @@ -2862,7 +2862,12 @@ static void gather_stats(struct page *page, struct numa_maps *md, int pte_dirty,
>  			unsigned long nr_pages)
>  {
>  	struct folio *folio = page_folio(page);
> -	int count = folio_precise_page_mapcount(folio, page);
> +	int count;
> +
> +	if (IS_ENABLED(CONFIG_PAGE_MAPCOUNT))
> +		count = folio_precise_page_mapcount(folio, page);
> +	else
> +		count = min_t(int, folio_average_page_mapcount(folio), 1);

s/min/max ?

Otherwise, count is at most 1. Anyway, if you change
folio_average_page_mapcount() as I indicated in patch 16, this
will become count = folio_average_page_mapcount(folio).

>  
>  	md->pages += nr_pages;
>  	if (pte_dirty || folio_test_dirty(folio))




-- 
Best Regards,
Yan, Zi


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ