From nobody Thu Apr 2 22:29:01 2026 Received: from mail-pg1-f176.google.com (mail-pg1-f176.google.com [209.85.215.176]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 80FAF308F0A for ; Sat, 14 Feb 2026 08:45:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.176 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771058721; cv=none; b=XnZ62DZgDQphfQocY8BU8+RiHnjOJnvQzQZhoxDu9zPGhYpfHChUFy6ANGKPeRSNj8K8ChyO34oSAyUM+2Sio/Q+W9jsy3NEXpWjZ86MtnLV6eoQWqfAlUrRNUqJeoTxLXONDdxphRnTj+26powEu1AUSvNHvhgeDZ+ullbpNvI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771058721; c=relaxed/simple; bh=KqX7j9xyRl95mDWksYbf2gXQPaQi6ZOQ7Ks7Pl4jEas=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=tDCkAbVuN8Ij8olSpub3cPDKcUDsTrDTFxqkFNva2v43L7ryvsO4TPc1yJlOjpc1byeqEc5bs6WG6SikKzOyO9BUn0ua9TIC50GkhiLWWkLp2hKROPoi4QS/8tUX5u5JjpcNQJ/sORVw33WKgTo4R9XIOYmW7uKPKTGPVtrUVJ4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=ZUqbBUvx; arc=none smtp.client-ip=209.85.215.176 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ZUqbBUvx" Received: by mail-pg1-f176.google.com with SMTP id 41be03b00d2f7-c61343f82d7so613702a12.1 for ; Sat, 14 Feb 2026 00:45:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1771058719; x=1771663519; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=xpX6w+exmbmzYP80YKKFeZCWbquQTKNkSqVY1a6AgyE=; b=ZUqbBUvxOZVKXPFg5lsukFLI6C3nLawEwpZHZtRCdXMrZhsFm2YtuSISWeIopBExgs 5K8ESPa47jfENHMG27qtbZHmQQb5tiDhRNKGRkWpPerndzKHK2dF6/LFe7jLCeP2YR7r pYDLS5rBJRycyQBmcUfwukbzT29UX2x+z+Jd/Yc3yn8CzP9ayzPYu/4zTi9CvyW+hpmt WRiUMs77G0p+lgNpJY65OxmrG6hefdxJuGe2K0MTX+iHpVq0uyOlTX7tSu38vc0AUdfG 61CRXOl+BImFOl/U730CeVsO1my0OsLAYf8U3z9gKvtH5inw752xR+v8+kvqwgnmaom0 mwqQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771058719; x=1771663519; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=xpX6w+exmbmzYP80YKKFeZCWbquQTKNkSqVY1a6AgyE=; b=asvTk7b6kcF+WtHEZfBjVCjIzEaaFKh6idYbriaNH3hLYY8MaAwCPs0HOUjvfiETvD orKxKua+cyXBGGSPwQv8USSR/uKYSN+xUNilX1d5zkq05fJ1SNXp7o0Hyf23xHD1O0B+ EOa22nlmk5AmOU/0NvfHEziEVOnl2xTlyeR+JlSU/YejSJmo0QgKgtgcF6EPICF+Zr5k MXMIxtgIDyXYugcvsFMU7WYVCI4ZM8NS4y+fyR7X9r5lzY+SGauZtB/qH5X5CDI5y5Si mafxnLR3clssqND3uOMSYVmcYBAnD/li1s3stma1pW3QGg09bGd+aXyzjV0Ovht/Y0s9 scxg== X-Forwarded-Encrypted: i=1; AJvYcCWihm1t1jkDPW6XlZh+J1doU4kS9bfO8m+0zrrYXEzmW+Q6UluqrUqLP05axiXJlOBCjAT5YjO7hpGw1GA=@vger.kernel.org X-Gm-Message-State: AOJu0YzaR0impvOnsOLcd/jJnhsWSq+LQhZAdGy30tDX0vo4MEZ1Amit FectA9ZidvnGRR7ydKxDvglM8Y0nbZ0fvATfmeQcqL8vVsafq7XdkZeB X-Gm-Gg: AZuq6aLlK2V8gAk2iAXvUKkOv7z102NUpJf7wSVnMmVkd+6RXTuYKrlUB6P44AAfyv9 aGUuKyX0RWASTGsWu5bNQo1CpUNOoRVCuEFFu30FxFoCBs59+rL91BrJtpxs9t501SpXhbKkgsu quzB8BgwqwuNDcUo7XPCAzxFep0xfOne7HttJCnoEtJWB+1lReYsFYXq+XbyB0lx10pehENwtWY KsPVJqkMizaTPhoix3+hlvCfjDZEWeEG77sLvdFbbUguhm1TaXei8LXIjAOK7wa1xUmXV1xbG+b vwY2IXbMGLFQjsV0AAE/43CVqVUG/CwjxymlsGDEPywbaOTKKEThy9jeSQlS99AEuR+Y6XsJO9L UOXtw3e0CoxakFyPaBRJscWFyIazVtWb03hSuvEUw29ByvTKKrvxMPtk7kj1ltDokDWu6XevAIG ZYT9v1BfeiQefQv160Ldau X-Received: by 2002:a17:90b:57ce:b0:356:22b5:704f with SMTP id 98e67ed59e1d1-35844a4f70emr2165244a91.15.1771058718880; Sat, 14 Feb 2026 00:45:18 -0800 (PST) Received: from localhost ([240e:3a5:3184:2a50:fc86:2a4b:6ee6:4]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-356a6a23e55sm3152463a91.0.2026.02.14.00.45.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 14 Feb 2026 00:45:18 -0800 (PST) From: Wenchao Hao To: Andrew Morton , David Hildenbrand , Lorenzo Stoakes , "Liam R . Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , linux-mm@kvack.org, linux-kernel@vger.kernel.org Cc: Wenchao Hao Subject: [PATCH] mm: Add AnonZero accounting for zero-filled anonymous pages Date: Sat, 14 Feb 2026 16:45:14 +0800 Message-ID: <20260214084514.2842745-1-haowenchao22@gmail.com> X-Mailer: git-send-email 2.45.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add kernel command line option "count_zero_page" to track anonymous pages have been allocated and mapped to userspace but zero-filled. This feature is mainly used to debug large folio mechanism, which pre-allocates and map more pages than actually needed, leading to memory waste from unaccessed pages. Export the result in /proc/pid/smaps as "AnonZero" field. Link: https://lore.kernel.org/linux-mm/20260210043456.2137482-1-haowenchao2= 2@gmail.com/ Signed-off-by: Wenchao Hao --- Documentation/filesystems/proc.rst | 5 +++++ fs/proc/task_mmu.c | 10 ++++++++++ 2 files changed, 15 insertions(+) diff --git a/Documentation/filesystems/proc.rst b/Documentation/filesystems= /proc.rst index b0c0d1b45b99..573c8b015e39 100644 --- a/Documentation/filesystems/proc.rst +++ b/Documentation/filesystems/proc.rst @@ -545,6 +545,11 @@ replaced by copy-on-write) part of the underlying shme= m object out on swap. does not take into account swapped out page of underlying shmem objects. "Locked" indicates whether the mapping is locked in memory or not. =20 +"AnonZero" shows the size of anonymous pages that have never been accessed +after mapping, and it can reflect the memory waste caused by huge pages. +Implemented by scanning the size of zero-filled pages of the VMA. It +is default disabled, and enabled via cmdline param "count_zero_page=3Dtrue= ". + "THPeligible" indicates whether the mapping is eligible for allocating naturally aligned THP pages of any currently enabled size. 1 if true, 0 otherwise. diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c index dd3b5cf9f0b7..c39ebd015724 100644 --- a/fs/proc/task_mmu.c +++ b/fs/proc/task_mmu.c @@ -880,6 +880,7 @@ struct mem_size_stats { u64 pss_dirty; u64 pss_locked; u64 swap_pss; + u64 anon_zero; }; =20 static void smaps_page_accumulate(struct mem_size_stats *mss, @@ -912,6 +913,10 @@ static void smaps_page_accumulate(struct mem_size_stat= s *mss, } } =20 +/* If scan and count zero-filled pages */ +static bool count_zero_page; +core_param(count_zero_page, count_zero_page, bool, 0644); + static void smaps_account(struct mem_size_stats *mss, struct page *page, bool compound, bool young, bool dirty, bool locked, bool present) @@ -931,6 +936,9 @@ static void smaps_account(struct mem_size_stats *mss, s= truct page *page, if (!folio_test_swapbacked(folio) && !dirty && !folio_test_dirty(folio)) mss->lazyfree +=3D size; + + if (count_zero_page && pages_identical(page, ZERO_PAGE(0))) + mss->anon_zero +=3D PAGE_SIZE; } =20 if (folio_test_ksm(folio)) @@ -1363,6 +1371,8 @@ static void __show_smap(struct seq_file *m, const str= uct mem_size_stats *mss, mss->swap_pss >> PSS_SHIFT); SEQ_PUT_DEC(" kB\nLocked: ", mss->pss_locked >> PSS_SHIFT); + if (count_zero_page) + SEQ_PUT_DEC(" kB\nAnonZero: ", mss->anon_zero); seq_puts(m, " kB\n"); } =20 --=20 2.45.0