Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
at v6.16-rc7 51 lines 1.5 kB view raw
1/* SPDX-License-Identifier: GPL-2.0-only */ 2/* 3 * Tools for integrating with lru_gen, like parsing the lru_gen debugfs output. 4 * 5 * Copyright (C) 2025, Google LLC. 6 */ 7#ifndef SELFTEST_KVM_LRU_GEN_UTIL_H 8#define SELFTEST_KVM_LRU_GEN_UTIL_H 9 10#include <inttypes.h> 11#include <limits.h> 12#include <stdlib.h> 13 14#include "test_util.h" 15 16#define MAX_NR_GENS 16 /* MAX_NR_GENS in include/linux/mmzone.h */ 17#define MAX_NR_NODES 4 /* Maximum number of nodes supported by the test */ 18 19#define LRU_GEN_DEBUGFS "/sys/kernel/debug/lru_gen" 20#define LRU_GEN_ENABLED_PATH "/sys/kernel/mm/lru_gen/enabled" 21#define LRU_GEN_ENABLED 1 22#define LRU_GEN_MM_WALK 2 23 24struct generation_stats { 25 int gen; 26 long age_ms; 27 long nr_anon; 28 long nr_file; 29}; 30 31struct node_stats { 32 int node; 33 int nr_gens; /* Number of populated gens entries. */ 34 struct generation_stats gens[MAX_NR_GENS]; 35}; 36 37struct memcg_stats { 38 unsigned long memcg_id; 39 int nr_nodes; /* Number of populated nodes entries. */ 40 struct node_stats nodes[MAX_NR_NODES]; 41}; 42 43void lru_gen_read_memcg_stats(struct memcg_stats *stats, const char *memcg); 44long lru_gen_sum_memcg_stats(const struct memcg_stats *stats); 45long lru_gen_sum_memcg_stats_for_gen(int gen, const struct memcg_stats *stats); 46void lru_gen_do_aging(struct memcg_stats *stats, const char *memcg); 47int lru_gen_find_generation(const struct memcg_stats *stats, 48 unsigned long total_pages); 49bool lru_gen_usable(void); 50 51#endif /* SELFTEST_KVM_LRU_GEN_UTIL_H */