Path: blob/master/tools/testing/selftests/kvm/include/lru_gen_util.h
38237 views
/* SPDX-License-Identifier: GPL-2.0-only */1/*2* Tools for integrating with lru_gen, like parsing the lru_gen debugfs output.3*4* Copyright (C) 2025, Google LLC.5*/6#ifndef SELFTEST_KVM_LRU_GEN_UTIL_H7#define SELFTEST_KVM_LRU_GEN_UTIL_H89#include <inttypes.h>10#include <limits.h>11#include <stdlib.h>1213#include "test_util.h"1415#define MAX_NR_GENS 16 /* MAX_NR_GENS in include/linux/mmzone.h */16#define MAX_NR_NODES 4 /* Maximum number of nodes supported by the test */1718#define LRU_GEN_DEBUGFS "/sys/kernel/debug/lru_gen"19#define LRU_GEN_ENABLED_PATH "/sys/kernel/mm/lru_gen/enabled"20#define LRU_GEN_ENABLED 121#define LRU_GEN_MM_WALK 22223struct generation_stats {24int gen;25long age_ms;26long nr_anon;27long nr_file;28};2930struct node_stats {31int node;32int nr_gens; /* Number of populated gens entries. */33struct generation_stats gens[MAX_NR_GENS];34};3536struct memcg_stats {37unsigned long memcg_id;38int nr_nodes; /* Number of populated nodes entries. */39struct node_stats nodes[MAX_NR_NODES];40};4142void lru_gen_read_memcg_stats(struct memcg_stats *stats, const char *memcg);43long lru_gen_sum_memcg_stats(const struct memcg_stats *stats);44long lru_gen_sum_memcg_stats_for_gen(int gen, const struct memcg_stats *stats);45void lru_gen_do_aging(struct memcg_stats *stats, const char *memcg);46int lru_gen_find_generation(const struct memcg_stats *stats,47unsigned long total_pages);48bool lru_gen_usable(void);4950#endif /* SELFTEST_KVM_LRU_GEN_UTIL_H */515253