This is to gather statistics to check if memory regions of specific access tempratures are backed by hugepages of a size in a specific range This filter can help to observe and prove the effectivenes of different schemes for shrinking/collapsing hugepages. Signed-off-by: Usama Arif <usamaarif642@xxxxxxxxx> --- include/linux/damon.h | 2 ++ mm/damon/paddr.c | 7 +++++++ mm/damon/sysfs-schemes.c | 1 + 3 files changed, 10 insertions(+) diff --git a/include/linux/damon.h b/include/linux/damon.h index 6f30ceeff215..5ba6c2114e3f 100644 --- a/include/linux/damon.h +++ b/include/linux/damon.h @@ -336,6 +336,7 @@ struct damos_stat { * @DAMOS_FILTER_TYPE_ANON: Anonymous pages. * @DAMOS_FILTER_TYPE_MEMCG: Specific memcg's pages. * @DAMOS_FILTER_TYPE_YOUNG: Recently accessed pages. + * @DAMOS_FILTER_TYPE_HUGEPAGE: Page is part of a hugepage. * @DAMOS_FILTER_TYPE_ADDR: Address range. * @DAMOS_FILTER_TYPE_TARGET: Data Access Monitoring target. * @NR_DAMOS_FILTER_TYPES: Number of filter types. @@ -355,6 +356,7 @@ enum damos_filter_type { DAMOS_FILTER_TYPE_ANON, DAMOS_FILTER_TYPE_MEMCG, DAMOS_FILTER_TYPE_YOUNG, + DAMOS_FILTER_TYPE_HUGEPAGE, DAMOS_FILTER_TYPE_ADDR, DAMOS_FILTER_TYPE_TARGET, NR_DAMOS_FILTER_TYPES, diff --git a/mm/damon/paddr.c b/mm/damon/paddr.c index 3f59a3fdc391..34fe1eb664cc 100644 --- a/mm/damon/paddr.c +++ b/mm/damon/paddr.c @@ -227,6 +227,7 @@ static bool damos_pa_filter_match(struct damos_filter *filter, { bool matched = false; struct mem_cgroup *memcg; + size_t folio_sz; switch (filter->type) { case DAMOS_FILTER_TYPE_ANON: @@ -246,6 +247,12 @@ static bool damos_pa_filter_match(struct damos_filter *filter, if (matched) damon_folio_mkold(folio); break; +#if defined(CONFIG_PGTABLE_HAS_HUGE_LEAVES) + case DAMOS_FILTER_TYPE_HUGEPAGE: + folio_sz = folio_size(folio); + matched = filter->folio_size.min <= folio_sz && folio_sz <= filter->folio_size.max; + break; +#endif default: break; } diff --git a/mm/damon/sysfs-schemes.c b/mm/damon/sysfs-schemes.c index bc7ca43ca9c4..76aee3ab277e 100644 --- a/mm/damon/sysfs-schemes.c +++ b/mm/damon/sysfs-schemes.c @@ -330,6 +330,7 @@ static const char * const damon_sysfs_scheme_filter_type_strs[] = { "anon", "memcg", "young", + "hugepage", "addr", "target", }; -- 2.43.5