1116491Sharti// SPDX-License-Identifier: GPL-2.0-or-later
2116491Sharti/* FS-Cache statistics
3116491Sharti *
4116491Sharti * Copyright (C) 2021 Red Hat, Inc. All Rights Reserved.
5116491Sharti * Written by David Howells (dhowells@redhat.com)
6116491Sharti */
7116491Sharti
8116491Sharti#define FSCACHE_DEBUG_LEVEL CACHE
9116491Sharti#include <linux/proc_fs.h>
10116491Sharti#include <linux/seq_file.h>
11116491Sharti#include "internal.h"
12116491Sharti
13116491Sharti/*
14116491Sharti * operation counters
15116491Sharti */
16116491Shartiatomic_t fscache_n_volumes;
17116491Shartiatomic_t fscache_n_volumes_collision;
18116491Shartiatomic_t fscache_n_volumes_nomem;
19116491Shartiatomic_t fscache_n_cookies;
20116491Shartiatomic_t fscache_n_cookies_lru;
21116491Shartiatomic_t fscache_n_cookies_lru_expired;
22116491Shartiatomic_t fscache_n_cookies_lru_removed;
23116491Shartiatomic_t fscache_n_cookies_lru_dropped;
24116491Sharti
25116491Shartiatomic_t fscache_n_acquires;
26116491Shartiatomic_t fscache_n_acquires_ok;
27116491Shartiatomic_t fscache_n_acquires_oom;
28116491Sharti
29116491Shartiatomic_t fscache_n_invalidates;
30116491Sharti
31116491Shartiatomic_t fscache_n_updates;
32116491ShartiEXPORT_SYMBOL(fscache_n_updates);
33116491Sharti
34116519Shartiatomic_t fscache_n_relinquishes;
35116519Shartiatomic_t fscache_n_relinquishes_retire;
36116519Shartiatomic_t fscache_n_relinquishes_dropped;
37116491Sharti
38116491Shartiatomic_t fscache_n_resizes;
39116491Shartiatomic_t fscache_n_resizes_null;
40116491Sharti
41116491Shartiatomic_t fscache_n_read;
42116491ShartiEXPORT_SYMBOL(fscache_n_read);
43116491Shartiatomic_t fscache_n_write;
44116491ShartiEXPORT_SYMBOL(fscache_n_write);
45116491Shartiatomic_t fscache_n_no_write_space;
46116491ShartiEXPORT_SYMBOL(fscache_n_no_write_space);
47116491Shartiatomic_t fscache_n_no_create_space;
48116491ShartiEXPORT_SYMBOL(fscache_n_no_create_space);
49116491Shartiatomic_t fscache_n_culled;
50116491ShartiEXPORT_SYMBOL(fscache_n_culled);
51116491Shartiatomic_t fscache_n_dio_misfit;
52116491ShartiEXPORT_SYMBOL(fscache_n_dio_misfit);
53116491Sharti
54116491Sharti/*
55116491Sharti * display the general statistics
56116491Sharti */
57116491Shartiint fscache_stats_show(struct seq_file *m)
58116491Sharti{
59116491Sharti	seq_puts(m, "-- FS-Cache statistics --\n");
60116491Sharti	seq_printf(m, "Cookies: n=%d v=%d vcol=%u voom=%u\n",
61116491Sharti		   atomic_read(&fscache_n_cookies),
62116491Sharti		   atomic_read(&fscache_n_volumes),
63116491Sharti		   atomic_read(&fscache_n_volumes_collision),
64116491Sharti		   atomic_read(&fscache_n_volumes_nomem)
65116491Sharti		   );
66116491Sharti
67116491Sharti	seq_printf(m, "Acquire: n=%u ok=%u oom=%u\n",
68116491Sharti		   atomic_read(&fscache_n_acquires),
69116491Sharti		   atomic_read(&fscache_n_acquires_ok),
70116491Sharti		   atomic_read(&fscache_n_acquires_oom));
71116491Sharti
72116491Sharti	seq_printf(m, "LRU    : n=%u exp=%u rmv=%u drp=%u at=%ld\n",
73116491Sharti		   atomic_read(&fscache_n_cookies_lru),
74116491Sharti		   atomic_read(&fscache_n_cookies_lru_expired),
75116491Sharti		   atomic_read(&fscache_n_cookies_lru_removed),
76116491Sharti		   atomic_read(&fscache_n_cookies_lru_dropped),
77116491Sharti		   timer_pending(&fscache_cookie_lru_timer) ?
78116491Sharti		   fscache_cookie_lru_timer.expires - jiffies : 0);
79116491Sharti
80116491Sharti	seq_printf(m, "Invals : n=%u\n",
81116491Sharti		   atomic_read(&fscache_n_invalidates));
82116491Sharti
83116491Sharti	seq_printf(m, "Updates: n=%u rsz=%u rsn=%u\n",
84116491Sharti		   atomic_read(&fscache_n_updates),
85116491Sharti		   atomic_read(&fscache_n_resizes),
86116491Sharti		   atomic_read(&fscache_n_resizes_null));
87116491Sharti
88116491Sharti	seq_printf(m, "Relinqs: n=%u rtr=%u drop=%u\n",
89116491Sharti		   atomic_read(&fscache_n_relinquishes),
90116491Sharti		   atomic_read(&fscache_n_relinquishes_retire),
91116491Sharti		   atomic_read(&fscache_n_relinquishes_dropped));
92116491Sharti
93116491Sharti	seq_printf(m, "NoSpace: nwr=%u ncr=%u cull=%u\n",
94116491Sharti		   atomic_read(&fscache_n_no_write_space),
95116491Sharti		   atomic_read(&fscache_n_no_create_space),
96116491Sharti		   atomic_read(&fscache_n_culled));
97116491Sharti
98116491Sharti	seq_printf(m, "IO     : rd=%u wr=%u mis=%u\n",
99116491Sharti		   atomic_read(&fscache_n_read),
100116491Sharti		   atomic_read(&fscache_n_write),
101116491Sharti		   atomic_read(&fscache_n_dio_misfit));
102116491Sharti	return 0;
103116491Sharti}
104116491Sharti