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 | atomic_t fscache_n_dio_misfit; |
52 | EXPORT_SYMBOL(fscache_n_dio_misfit); |
53 | |
54 | /* |
55 | * display the general statistics |
56 | */ |
57 | int fscache_stats_show(struct seq_file *m) |
58 | { |
59 | seq_puts(m, s: "-- FS-Cache statistics --\n" ); |
60 | seq_printf(m, fmt: "Cookies: n=%d v=%d vcol=%u voom=%u\n" , |
61 | atomic_read(v: &fscache_n_cookies), |
62 | atomic_read(v: &fscache_n_volumes), |
63 | atomic_read(v: &fscache_n_volumes_collision), |
64 | atomic_read(v: &fscache_n_volumes_nomem) |
65 | ); |
66 | |
67 | seq_printf(m, fmt: "Acquire: n=%u ok=%u oom=%u\n" , |
68 | atomic_read(v: &fscache_n_acquires), |
69 | atomic_read(v: &fscache_n_acquires_ok), |
70 | atomic_read(v: &fscache_n_acquires_oom)); |
71 | |
72 | seq_printf(m, fmt: "LRU : n=%u exp=%u rmv=%u drp=%u at=%ld\n" , |
73 | atomic_read(v: &fscache_n_cookies_lru), |
74 | atomic_read(v: &fscache_n_cookies_lru_expired), |
75 | atomic_read(v: &fscache_n_cookies_lru_removed), |
76 | atomic_read(v: &fscache_n_cookies_lru_dropped), |
77 | timer_pending(timer: &fscache_cookie_lru_timer) ? |
78 | fscache_cookie_lru_timer.expires - jiffies : 0); |
79 | |
80 | seq_printf(m, fmt: "Invals : n=%u\n" , |
81 | atomic_read(v: &fscache_n_invalidates)); |
82 | |
83 | seq_printf(m, fmt: "Updates: n=%u rsz=%u rsn=%u\n" , |
84 | atomic_read(v: &fscache_n_updates), |
85 | atomic_read(v: &fscache_n_resizes), |
86 | atomic_read(v: &fscache_n_resizes_null)); |
87 | |
88 | seq_printf(m, fmt: "Relinqs: n=%u rtr=%u drop=%u\n" , |
89 | atomic_read(v: &fscache_n_relinquishes), |
90 | atomic_read(v: &fscache_n_relinquishes_retire), |
91 | atomic_read(v: &fscache_n_relinquishes_dropped)); |
92 | |
93 | seq_printf(m, fmt: "NoSpace: nwr=%u ncr=%u cull=%u\n" , |
94 | atomic_read(v: &fscache_n_no_write_space), |
95 | atomic_read(v: &fscache_n_no_create_space), |
96 | atomic_read(v: &fscache_n_culled)); |
97 | |
98 | seq_printf(m, fmt: "IO : rd=%u wr=%u mis=%u\n" , |
99 | atomic_read(v: &fscache_n_read), |
100 | atomic_read(v: &fscache_n_write), |
101 | atomic_read(v: &fscache_n_dio_misfit)); |
102 | return 0; |
103 | } |
104 | |