From nobody Sat Feb 7 08:28:32 2026 Received: from mail-ot1-f41.google.com (mail-ot1-f41.google.com [209.85.210.41]) (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 E66FC1C84BB for ; Mon, 2 Feb 2026 00:55:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769993732; cv=none; b=cB6x99S3sNPYi0gX6fQMaiq3gZUsUqweMWH9Lzw1E6xxaJaiIK1xysZlnjL2/l28I3Ws+qNDvlQvsYYsYSpRc08VTBaRY1tW4cvtBypsrjVEPF1JjOp/+iQc7U7Sc/Uzbe7GaqTZdsL4nWdeTw2UOxhprmqgVvw1iIy3e1UtKrc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769993732; c=relaxed/simple; bh=k54yCkPzYLPB0NhfHbeMM2mVpmbSEmT8wriWzgSdCmA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=P+4NLt5hhnwyGKeZTkcETSIqLiLKKh/yKbBv9DEzj+Y4Qfxer7Tsy1TpOlRGJNQSF/7hPzC8AVjMkgwCWBEHQD1yE0E00Bu8RRoCYXHkzINA9/1YL0j+YiBZwbTLiHTpVJYAqBR6g0kGO9K0mHICIfV/QiadLjUfGYB0vFMegA4= 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=dL9Y4gr0; arc=none smtp.client-ip=209.85.210.41 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="dL9Y4gr0" Received: by mail-ot1-f41.google.com with SMTP id 46e09a7af769-7d1866473b0so2463686a34.1 for ; Sun, 01 Feb 2026 16:55:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769993730; x=1770598530; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=2rQf42l81vbrWHLFD+4Euf1umigy7cZsac9bu9cfg5c=; b=dL9Y4gr0hc2wvAJWyMgrHmS8zSnEybO7er3fiAslgxyIs2pG1VD9Ru4b836w1/OqWD TBNqgys8NftlNylseVlPJM9fyIPd2VhlFqTpPvjbCndvFfL7m/+Gb2P1O6tZbN51QmxP yKFfPYcbwLqALNKhsty2aa3a9snkQ8TeLyvaVVSkL/aFyLxQAwX2rkm2pT1E6dsqqA9U ku/OhWHMwsNrB83v7YQOfNyt/eJXqLfZZXySQ5ywyfAF63Ck/xI/a1Iw2D4B8/9YB0zB JOhLSqXMUQYIkGxrkI4+uvaPHI35Z5YeqquhX7GJC8mf8MU7J73Ox1xY/vVmDX8rokhY dubQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769993730; x=1770598530; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=2rQf42l81vbrWHLFD+4Euf1umigy7cZsac9bu9cfg5c=; b=GjZAVnOj+Vl5E+N5pgTbOcHNyb7HgjXjnmnQkvHzYcBVVZx9+VeOErpH6GJataVQoV imal1q9ay8E923kMYVjbWpZk7SVz5yrXnajMSEKGpMhy9ExQuzU7j/Bzz81fDkuCQziE CLKKHqT5cvnJdPf9UpeE3MYwPjHzA3AoAZEQwNLEUbsyl+HIVUaaAOhvwHoWNapZS/Xw Vi3Z435I5C542HfVZnktHkJl814swO+yPrfPtSOuWBIkQ0nCa9BPpfxcGO8PYfwPhn97 MxRipPPYs7+YUP8vQA66V1AS1cEHsF4Yc/OfJ8qAqA2T88/VXYwW5NCCgmKORFghMYV7 qK+Q== X-Forwarded-Encrypted: i=1; AJvYcCV1TVLXZwrMcp9X2TL3jBXeuUE6ipMa0bOLQ0vmXv4283tuqjPy+Nt9mARJmdvVEzREhL97QHyrYB9F/mQ=@vger.kernel.org X-Gm-Message-State: AOJu0Yy3Y22ezCjuL/mA3b4oeMuiVo/m2e5Ubu4Rtbc776TKp0pkNgUs PQAnl5CAlE4WvKW8LCUd8d0iCJASBNQXZdvqSQBCdIbRetm3qm5VQLF5 X-Gm-Gg: AZuq6aJ9bAg2hDX12cRQJ4dUZiDuiAL/rlcW8kN7JFaoZEcCCwq9gpim+NEvQAKy8ZY AUx/NRy2Z1uOU55GWhNtFvqPP3qkb9BbUWrjp0B491Zn+LUjgqj+jsFIj1HW2hEBbllcpmOcIDs 5zS6YCp74Ol6YseNkyDloaRK4RGLggUKm7J49DMaC0rmo5c5PKyPq4cSeIjiezPREWJiqYNE02v Wg0ESaQxQEtHKMfNK+5fRlosU7C0r9oNYmJdAI21mM6ckR2mDkGM0cmkviGlz/rBbaRuTSBCFqX ZYyvUaETaiHn8gXPUWeUlE8gRNp7nSDOVFrfH5afhlIr6WAIWGl+SnZht82nzKyftqQy/x8N/sE wG4dJzTWxUOWtPyaN3+RlM1kHkFmoALYxm4wAbPq0wHIJwfIxzynB7dbRMwO4YKCXKaHkiDTh3X J7Hcej0KdH X-Received: by 2002:a05:6830:4389:b0:7c7:8280:9207 with SMTP id 46e09a7af769-7d1a5335f7dmr6749201a34.37.1769993729809; Sun, 01 Feb 2026 16:55:29 -0800 (PST) Received: from localhost ([2a03:2880:10ff:4e::]) by smtp.gmail.com with ESMTPSA id 46e09a7af769-7d18c69ac16sm9771704a34.7.2026.02.01.16.55.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 01 Feb 2026 16:55:29 -0800 (PST) From: Usama Arif To: ziy@nvidia.com, Andrew Morton , David Hildenbrand , lorenzo.stoakes@oracle.com, linux-mm@kvack.org Cc: hannes@cmpxchg.org, riel@surriel.com, shakeel.butt@linux.dev, kas@kernel.org, baohua@kernel.org, dev.jain@arm.com, baolin.wang@linux.alibaba.com, npache@redhat.com, Liam.Howlett@oracle.com, ryan.roberts@arm.com, vbabka@suse.cz, lance.yang@linux.dev, linux-kernel@vger.kernel.org, kernel-team@meta.com, Usama Arif Subject: [RFC 02/12] mm/thp: add mTHP stats infrastructure for PUD THP Date: Sun, 1 Feb 2026 16:50:19 -0800 Message-ID: <20260202005451.774496-3-usamaarif642@gmail.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260202005451.774496-1-usamaarif642@gmail.com> References: <20260202005451.774496-1-usamaarif642@gmail.com> 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" Extend the mTHP (multi-size THP) statistics infrastructure to support PUD-sized transparent huge pages. The mTHP framework tracks statistics for each supported THP size through per-order counters exposed via sysfs. To add PUD THP support, PUD_ORDER must be included in the set of tracked orders. With this change, PUD THP events (allocations, faults, splits, swaps) are tracked and exposed through the existing sysfs interface at /sys/kernel/mm/transparent_hugepage/hugepages-1048576kB/stats/. This provides visibility into PUD THP behavior for debugging and performance analysis. Signed-off-by: Usama Arif --- include/linux/huge_mm.h | 42 +++++++++++++++++++++++++++++++++++++---- mm/huge_memory.c | 3 ++- 2 files changed, 40 insertions(+), 5 deletions(-) diff --git a/include/linux/huge_mm.h b/include/linux/huge_mm.h index e672e45bb9cc7..5509ba8555b6e 100644 --- a/include/linux/huge_mm.h +++ b/include/linux/huge_mm.h @@ -76,7 +76,13 @@ extern struct kobj_attribute thpsize_shmem_enabled_attr; * and including PMD_ORDER, except order-0 (which is not "huge") and order= -1 * (which is a limitation of the THP implementation). */ -#define THP_ORDERS_ALL_ANON ((BIT(PMD_ORDER + 1) - 1) & ~(BIT(0) | BIT(1))) +#ifdef CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD +#define THP_ORDERS_ALL_ANON_PUD BIT(PUD_ORDER) +#else +#define THP_ORDERS_ALL_ANON_PUD 0 +#endif +#define THP_ORDERS_ALL_ANON (((BIT(PMD_ORDER + 1) - 1) & ~(BIT(0) | BIT(1)= )) | \ + THP_ORDERS_ALL_ANON_PUD) =20 /* * Mask of all large folio orders supported for file THP. Folios in a DAX @@ -146,18 +152,46 @@ enum mthp_stat_item { }; =20 #if defined(CONFIG_TRANSPARENT_HUGEPAGE) && defined(CONFIG_SYSFS) + +#ifdef CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD +#define MTHP_STAT_COUNT (PMD_ORDER + 2) +#define MTHP_STAT_PUD_INDEX (PMD_ORDER + 1) /* PUD uses last index */ +#else +#define MTHP_STAT_COUNT (PMD_ORDER + 1) +#endif + struct mthp_stat { - unsigned long stats[ilog2(MAX_PTRS_PER_PTE) + 1][__MTHP_STAT_COUNT]; + unsigned long stats[MTHP_STAT_COUNT][__MTHP_STAT_COUNT]; }; =20 DECLARE_PER_CPU(struct mthp_stat, mthp_stats); =20 +static inline int mthp_stat_order_to_index(int order) +{ +#ifdef CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD + if (order =3D=3D PUD_ORDER) + return MTHP_STAT_PUD_INDEX; +#endif + return order; +} + static inline void mod_mthp_stat(int order, enum mthp_stat_item item, int = delta) { - if (order <=3D 0 || order > PMD_ORDER) + int index; + + if (order <=3D 0) + return; + +#ifdef CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD + if (order !=3D PUD_ORDER && order > PMD_ORDER) return; +#else + if (order > PMD_ORDER) + return; +#endif =20 - this_cpu_add(mthp_stats.stats[order][item], delta); + index =3D mthp_stat_order_to_index(order); + this_cpu_add(mthp_stats.stats[index][item], delta); } =20 static inline void count_mthp_stat(int order, enum mthp_stat_item item) diff --git a/mm/huge_memory.c b/mm/huge_memory.c index 3128b3beedb0a..d033624d7e1f2 100644 --- a/mm/huge_memory.c +++ b/mm/huge_memory.c @@ -598,11 +598,12 @@ static unsigned long sum_mthp_stat(int order, enum mt= hp_stat_item item) { unsigned long sum =3D 0; int cpu; + int index =3D mthp_stat_order_to_index(order); =20 for_each_possible_cpu(cpu) { struct mthp_stat *this =3D &per_cpu(mthp_stats, cpu); =20 - sum +=3D this->stats[order][item]; + sum +=3D this->stats[index][item]; } =20 return sum; --=20 2.47.3