Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
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 */