/* SPDX-License-Identifier: GPL-2.0-only */ /* * Tools for integrating with lru_gen, like parsing the lru_gen debugfs output. * * Copyright (C) 2025, Google LLC. */ #ifndef SELFTEST_KVM_LRU_GEN_UTIL_H #define SELFTEST_KVM_LRU_GEN_UTIL_H #include #include #include #include "test_util.h" #define MAX_NR_GENS 16 /* MAX_NR_GENS in include/linux/mmzone.h */ #define MAX_NR_NODES 4 /* Maximum number of nodes supported by the test */ #define LRU_GEN_DEBUGFS "/sys/kernel/debug/lru_gen" #define LRU_GEN_ENABLED_PATH "/sys/kernel/mm/lru_gen/enabled" #define LRU_GEN_ENABLED 1 #define LRU_GEN_MM_WALK 2 struct generation_stats { int gen; long age_ms; long nr_anon; long nr_file; }; struct node_stats { int node; int nr_gens; /* Number of populated gens entries. */ struct generation_stats gens[MAX_NR_GENS]; }; struct memcg_stats { unsigned long memcg_id; int nr_nodes; /* Number of populated nodes entries. */ struct node_stats nodes[MAX_NR_NODES]; }; void lru_gen_read_memcg_stats(struct memcg_stats *stats, const char *memcg); long lru_gen_sum_memcg_stats(const struct memcg_stats *stats); long lru_gen_sum_memcg_stats_for_gen(int gen, const struct memcg_stats *stats); void lru_gen_do_aging(struct memcg_stats *stats, const char *memcg); int lru_gen_find_generation(const struct memcg_stats *stats, unsigned long total_pages); bool lru_gen_usable(void); #endif /* SELFTEST_KVM_LRU_GEN_UTIL_H */