1 | // SPDX-License-Identifier: GPL-2.0-or-later |
2 | /* FS-Cache statistics |
3 | * |
4 | * Copyright (C) 2021 Red Hat, Inc. All Rights Reserved. |
5 | * Written by David Howells (dhowells@redhat.com) |
6 | */ |
7 | |
8 | #define FSCACHE_DEBUG_LEVEL CACHE |
9 | #include <linux/proc_fs.h> |
10 | #include <linux/seq_file.h> |
11 | #include "internal.h" |
12 | |
13 | /* |
14 | * operation counters |
15 | */ |
16 | atomic_t fscache_n_volumes; |
17 | atomic_t fscache_n_volumes_collision; |
18 | atomic_t fscache_n_volumes_nomem; |
19 | atomic_t fscache_n_cookies; |
20 | atomic_t fscache_n_cookies_lru; |
21 | atomic_t fscache_n_cookies_lru_expired; |
22 | atomic_t fscache_n_cookies_lru_removed; |
23 | atomic_t fscache_n_cookies_lru_dropped; |
24 | |
25 | atomic_t fscache_n_acquires; |
26 | atomic_t fscache_n_acquires_ok; |
27 | atomic_t fscache_n_acquires_oom; |
28 | |
29 | atomic_t fscache_n_invalidates; |
30 | |
31 | atomic_t fscache_n_updates; |
32 | EXPORT_SYMBOL(fscache_n_updates); |
33 | |
34 | atomic_t fscache_n_relinquishes; |
35 | atomic_t fscache_n_relinquishes_retire; |
36 | atomic_t fscache_n_relinquishes_dropped; |
37 | |
38 | atomic_t fscache_n_resizes; |
39 | atomic_t fscache_n_resizes_null; |
40 | |
41 | atomic_t fscache_n_read; |
42 | EXPORT_SYMBOL(fscache_n_read); |
43 | atomic_t fscache_n_write; |
44 | EXPORT_SYMBOL(fscache_n_write); |
45 | atomic_t fscache_n_no_write_space; |
46 | EXPORT_SYMBOL(fscache_n_no_write_space); |
47 | atomic_t fscache_n_no_create_space; |
48 | EXPORT_SYMBOL(fscache_n_no_create_space); |
49 | atomic_t fscache_n_culled; |
50 | EXPORT_SYMBOL(fscache_n_culled); |
51 | |
52 | /* |
53 | * display the general statistics |
54 | */ |
55 | int fscache_stats_show(struct seq_file *m, void *v) |
56 | { |
57 | seq_puts(m, s: "FS-Cache statistics\n" ); |
58 | seq_printf(m, fmt: "Cookies: n=%d v=%d vcol=%u voom=%u\n" , |
59 | atomic_read(v: &fscache_n_cookies), |
60 | atomic_read(v: &fscache_n_volumes), |
61 | atomic_read(v: &fscache_n_volumes_collision), |
62 | atomic_read(v: &fscache_n_volumes_nomem) |
63 | ); |
64 | |
65 | seq_printf(m, fmt: "Acquire: n=%u ok=%u oom=%u\n" , |
66 | atomic_read(v: &fscache_n_acquires), |
67 | atomic_read(v: &fscache_n_acquires_ok), |
68 | atomic_read(v: &fscache_n_acquires_oom)); |
69 | |
70 | seq_printf(m, fmt: "LRU : n=%u exp=%u rmv=%u drp=%u at=%ld\n" , |
71 | atomic_read(v: &fscache_n_cookies_lru), |
72 | atomic_read(v: &fscache_n_cookies_lru_expired), |
73 | atomic_read(v: &fscache_n_cookies_lru_removed), |
74 | atomic_read(v: &fscache_n_cookies_lru_dropped), |
75 | timer_pending(timer: &fscache_cookie_lru_timer) ? |
76 | fscache_cookie_lru_timer.expires - jiffies : 0); |
77 | |
78 | seq_printf(m, fmt: "Invals : n=%u\n" , |
79 | atomic_read(v: &fscache_n_invalidates)); |
80 | |
81 | seq_printf(m, fmt: "Updates: n=%u rsz=%u rsn=%u\n" , |
82 | atomic_read(v: &fscache_n_updates), |
83 | atomic_read(v: &fscache_n_resizes), |
84 | atomic_read(v: &fscache_n_resizes_null)); |
85 | |
86 | seq_printf(m, fmt: "Relinqs: n=%u rtr=%u drop=%u\n" , |
87 | atomic_read(v: &fscache_n_relinquishes), |
88 | atomic_read(v: &fscache_n_relinquishes_retire), |
89 | atomic_read(v: &fscache_n_relinquishes_dropped)); |
90 | |
91 | seq_printf(m, fmt: "NoSpace: nwr=%u ncr=%u cull=%u\n" , |
92 | atomic_read(v: &fscache_n_no_write_space), |
93 | atomic_read(v: &fscache_n_no_create_space), |
94 | atomic_read(v: &fscache_n_culled)); |
95 | |
96 | seq_printf(m, fmt: "IO : rd=%u wr=%u\n" , |
97 | atomic_read(v: &fscache_n_read), |
98 | atomic_read(v: &fscache_n_write)); |
99 | |
100 | netfs_stats_show(m); |
101 | return 0; |
102 | } |
103 | |