From mboxrd@z Thu Jan 1 00:00:00 1970 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: 8bit 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-haowenchao22@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 shmem 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. +"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=true". + "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; }; static void smaps_page_accumulate(struct mem_size_stats *mss, @@ -912,6 +913,10 @@ static void smaps_page_accumulate(struct mem_size_stats *mss, } } +/* 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, struct page *page, if (!folio_test_swapbacked(folio) && !dirty && !folio_test_dirty(folio)) mss->lazyfree += size; + + if (count_zero_page && pages_identical(page, ZERO_PAGE(0))) + mss->anon_zero += PAGE_SIZE; } if (folio_test_ksm(folio)) @@ -1363,6 +1371,8 @@ static void __show_smap(struct seq_file *m, const struct 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"); } -- 2.45.0