1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /* FS-Cache statistics 3 * 4 * Copyright (C) 2007 Red Hat, Inc. All Rights Reserved. 5 * Written by David Howells (dhowells@redhat.com) 6 */ 7 8 #define FSCACHE_DEBUG_LEVEL THREAD 9 #include <linux/module.h> 10 #include <linux/proc_fs.h> 11 #include <linux/seq_file.h> 12 #include "internal.h" 13 14 /* 15 * operation counters 16 */ 17 atomic_t fscache_n_op_pend; 18 atomic_t fscache_n_op_run; 19 atomic_t fscache_n_op_enqueue; 20 atomic_t fscache_n_op_deferred_release; 21 atomic_t fscache_n_op_initialised; 22 atomic_t fscache_n_op_release; 23 atomic_t fscache_n_op_gc; 24 atomic_t fscache_n_op_cancelled; 25 atomic_t fscache_n_op_rejected; 26 27 atomic_t fscache_n_attr_changed; 28 atomic_t fscache_n_attr_changed_ok; 29 atomic_t fscache_n_attr_changed_nobufs; 30 atomic_t fscache_n_attr_changed_nomem; 31 atomic_t fscache_n_attr_changed_calls; 32 33 atomic_t fscache_n_allocs; 34 atomic_t fscache_n_allocs_ok; 35 atomic_t fscache_n_allocs_wait; 36 atomic_t fscache_n_allocs_nobufs; 37 atomic_t fscache_n_allocs_intr; 38 atomic_t fscache_n_allocs_object_dead; 39 atomic_t fscache_n_alloc_ops; 40 atomic_t fscache_n_alloc_op_waits; 41 42 atomic_t fscache_n_retrievals; 43 atomic_t fscache_n_retrievals_ok; 44 atomic_t fscache_n_retrievals_wait; 45 atomic_t fscache_n_retrievals_nodata; 46 atomic_t fscache_n_retrievals_nobufs; 47 atomic_t fscache_n_retrievals_intr; 48 atomic_t fscache_n_retrievals_nomem; 49 atomic_t fscache_n_retrievals_object_dead; 50 atomic_t fscache_n_retrieval_ops; 51 atomic_t fscache_n_retrieval_op_waits; 52 53 atomic_t fscache_n_stores; 54 atomic_t fscache_n_stores_ok; 55 atomic_t fscache_n_stores_again; 56 atomic_t fscache_n_stores_nobufs; 57 atomic_t fscache_n_stores_oom; 58 atomic_t fscache_n_store_ops; 59 atomic_t fscache_n_store_calls; 60 atomic_t fscache_n_store_pages; 61 atomic_t fscache_n_store_radix_deletes; 62 atomic_t fscache_n_store_pages_over_limit; 63 64 atomic_t fscache_n_store_vmscan_not_storing; 65 atomic_t fscache_n_store_vmscan_gone; 66 atomic_t fscache_n_store_vmscan_busy; 67 atomic_t fscache_n_store_vmscan_cancelled; 68 atomic_t fscache_n_store_vmscan_wait; 69 70 atomic_t fscache_n_marks; 71 atomic_t fscache_n_uncaches; 72 73 atomic_t fscache_n_acquires; 74 atomic_t fscache_n_acquires_null; 75 atomic_t fscache_n_acquires_no_cache; 76 atomic_t fscache_n_acquires_ok; 77 atomic_t fscache_n_acquires_nobufs; 78 atomic_t fscache_n_acquires_oom; 79 80 atomic_t fscache_n_invalidates; 81 atomic_t fscache_n_invalidates_run; 82 83 atomic_t fscache_n_updates; 84 atomic_t fscache_n_updates_null; 85 atomic_t fscache_n_updates_run; 86 87 atomic_t fscache_n_relinquishes; 88 atomic_t fscache_n_relinquishes_null; 89 atomic_t fscache_n_relinquishes_waitcrt; 90 atomic_t fscache_n_relinquishes_retire; 91 92 atomic_t fscache_n_cookie_index; 93 atomic_t fscache_n_cookie_data; 94 atomic_t fscache_n_cookie_special; 95 96 atomic_t fscache_n_object_alloc; 97 atomic_t fscache_n_object_no_alloc; 98 atomic_t fscache_n_object_lookups; 99 atomic_t fscache_n_object_lookups_negative; 100 atomic_t fscache_n_object_lookups_positive; 101 atomic_t fscache_n_object_lookups_timed_out; 102 atomic_t fscache_n_object_created; 103 atomic_t fscache_n_object_avail; 104 atomic_t fscache_n_object_dead; 105 106 atomic_t fscache_n_checkaux_none; 107 atomic_t fscache_n_checkaux_okay; 108 atomic_t fscache_n_checkaux_update; 109 atomic_t fscache_n_checkaux_obsolete; 110 111 atomic_t fscache_n_cop_alloc_object; 112 atomic_t fscache_n_cop_lookup_object; 113 atomic_t fscache_n_cop_lookup_complete; 114 atomic_t fscache_n_cop_grab_object; 115 atomic_t fscache_n_cop_invalidate_object; 116 atomic_t fscache_n_cop_update_object; 117 atomic_t fscache_n_cop_drop_object; 118 atomic_t fscache_n_cop_put_object; 119 atomic_t fscache_n_cop_sync_cache; 120 atomic_t fscache_n_cop_attr_changed; 121 atomic_t fscache_n_cop_read_or_alloc_page; 122 atomic_t fscache_n_cop_read_or_alloc_pages; 123 atomic_t fscache_n_cop_allocate_page; 124 atomic_t fscache_n_cop_allocate_pages; 125 atomic_t fscache_n_cop_write_page; 126 atomic_t fscache_n_cop_uncache_page; 127 atomic_t fscache_n_cop_dissociate_pages; 128 129 atomic_t fscache_n_cache_no_space_reject; 130 atomic_t fscache_n_cache_stale_objects; 131 atomic_t fscache_n_cache_retired_objects; 132 atomic_t fscache_n_cache_culled_objects; 133 134 /* 135 * display the general statistics 136 */ 137 int fscache_stats_show(struct seq_file *m, void *v) 138 { 139 seq_puts(m, "FS-Cache statistics\n"); 140 141 seq_printf(m, "Cookies: idx=%u dat=%u spc=%u\n", 142 atomic_read(&fscache_n_cookie_index), 143 atomic_read(&fscache_n_cookie_data), 144 atomic_read(&fscache_n_cookie_special)); 145 146 seq_printf(m, "Objects: alc=%u nal=%u avl=%u ded=%u\n", 147 atomic_read(&fscache_n_object_alloc), 148 atomic_read(&fscache_n_object_no_alloc), 149 atomic_read(&fscache_n_object_avail), 150 atomic_read(&fscache_n_object_dead)); 151 seq_printf(m, "ChkAux : non=%u ok=%u upd=%u obs=%u\n", 152 atomic_read(&fscache_n_checkaux_none), 153 atomic_read(&fscache_n_checkaux_okay), 154 atomic_read(&fscache_n_checkaux_update), 155 atomic_read(&fscache_n_checkaux_obsolete)); 156 157 seq_printf(m, "Pages : mrk=%u unc=%u\n", 158 atomic_read(&fscache_n_marks), 159 atomic_read(&fscache_n_uncaches)); 160 161 seq_printf(m, "Acquire: n=%u nul=%u noc=%u ok=%u nbf=%u" 162 " oom=%u\n", 163 atomic_read(&fscache_n_acquires), 164 atomic_read(&fscache_n_acquires_null), 165 atomic_read(&fscache_n_acquires_no_cache), 166 atomic_read(&fscache_n_acquires_ok), 167 atomic_read(&fscache_n_acquires_nobufs), 168 atomic_read(&fscache_n_acquires_oom)); 169 170 seq_printf(m, "Lookups: n=%u neg=%u pos=%u crt=%u tmo=%u\n", 171 atomic_read(&fscache_n_object_lookups), 172 atomic_read(&fscache_n_object_lookups_negative), 173 atomic_read(&fscache_n_object_lookups_positive), 174 atomic_read(&fscache_n_object_created), 175 atomic_read(&fscache_n_object_lookups_timed_out)); 176 177 seq_printf(m, "Invals : n=%u run=%u\n", 178 atomic_read(&fscache_n_invalidates), 179 atomic_read(&fscache_n_invalidates_run)); 180 181 seq_printf(m, "Updates: n=%u nul=%u run=%u\n", 182 atomic_read(&fscache_n_updates), 183 atomic_read(&fscache_n_updates_null), 184 atomic_read(&fscache_n_updates_run)); 185 186 seq_printf(m, "Relinqs: n=%u nul=%u wcr=%u rtr=%u\n", 187 atomic_read(&fscache_n_relinquishes), 188 atomic_read(&fscache_n_relinquishes_null), 189 atomic_read(&fscache_n_relinquishes_waitcrt), 190 atomic_read(&fscache_n_relinquishes_retire)); 191 192 seq_printf(m, "AttrChg: n=%u ok=%u nbf=%u oom=%u run=%u\n", 193 atomic_read(&fscache_n_attr_changed), 194 atomic_read(&fscache_n_attr_changed_ok), 195 atomic_read(&fscache_n_attr_changed_nobufs), 196 atomic_read(&fscache_n_attr_changed_nomem), 197 atomic_read(&fscache_n_attr_changed_calls)); 198 199 seq_printf(m, "Allocs : n=%u ok=%u wt=%u nbf=%u int=%u\n", 200 atomic_read(&fscache_n_allocs), 201 atomic_read(&fscache_n_allocs_ok), 202 atomic_read(&fscache_n_allocs_wait), 203 atomic_read(&fscache_n_allocs_nobufs), 204 atomic_read(&fscache_n_allocs_intr)); 205 seq_printf(m, "Allocs : ops=%u owt=%u abt=%u\n", 206 atomic_read(&fscache_n_alloc_ops), 207 atomic_read(&fscache_n_alloc_op_waits), 208 atomic_read(&fscache_n_allocs_object_dead)); 209 210 seq_printf(m, "Retrvls: n=%u ok=%u wt=%u nod=%u nbf=%u" 211 " int=%u oom=%u\n", 212 atomic_read(&fscache_n_retrievals), 213 atomic_read(&fscache_n_retrievals_ok), 214 atomic_read(&fscache_n_retrievals_wait), 215 atomic_read(&fscache_n_retrievals_nodata), 216 atomic_read(&fscache_n_retrievals_nobufs), 217 atomic_read(&fscache_n_retrievals_intr), 218 atomic_read(&fscache_n_retrievals_nomem)); 219 seq_printf(m, "Retrvls: ops=%u owt=%u abt=%u\n", 220 atomic_read(&fscache_n_retrieval_ops), 221 atomic_read(&fscache_n_retrieval_op_waits), 222 atomic_read(&fscache_n_retrievals_object_dead)); 223 224 seq_printf(m, "Stores : n=%u ok=%u agn=%u nbf=%u oom=%u\n", 225 atomic_read(&fscache_n_stores), 226 atomic_read(&fscache_n_stores_ok), 227 atomic_read(&fscache_n_stores_again), 228 atomic_read(&fscache_n_stores_nobufs), 229 atomic_read(&fscache_n_stores_oom)); 230 seq_printf(m, "Stores : ops=%u run=%u pgs=%u rxd=%u olm=%u\n", 231 atomic_read(&fscache_n_store_ops), 232 atomic_read(&fscache_n_store_calls), 233 atomic_read(&fscache_n_store_pages), 234 atomic_read(&fscache_n_store_radix_deletes), 235 atomic_read(&fscache_n_store_pages_over_limit)); 236 237 seq_printf(m, "VmScan : nos=%u gon=%u bsy=%u can=%u wt=%u\n", 238 atomic_read(&fscache_n_store_vmscan_not_storing), 239 atomic_read(&fscache_n_store_vmscan_gone), 240 atomic_read(&fscache_n_store_vmscan_busy), 241 atomic_read(&fscache_n_store_vmscan_cancelled), 242 atomic_read(&fscache_n_store_vmscan_wait)); 243 244 seq_printf(m, "Ops : pend=%u run=%u enq=%u can=%u rej=%u\n", 245 atomic_read(&fscache_n_op_pend), 246 atomic_read(&fscache_n_op_run), 247 atomic_read(&fscache_n_op_enqueue), 248 atomic_read(&fscache_n_op_cancelled), 249 atomic_read(&fscache_n_op_rejected)); 250 seq_printf(m, "Ops : ini=%u dfr=%u rel=%u gc=%u\n", 251 atomic_read(&fscache_n_op_initialised), 252 atomic_read(&fscache_n_op_deferred_release), 253 atomic_read(&fscache_n_op_release), 254 atomic_read(&fscache_n_op_gc)); 255 256 seq_printf(m, "CacheOp: alo=%d luo=%d luc=%d gro=%d\n", 257 atomic_read(&fscache_n_cop_alloc_object), 258 atomic_read(&fscache_n_cop_lookup_object), 259 atomic_read(&fscache_n_cop_lookup_complete), 260 atomic_read(&fscache_n_cop_grab_object)); 261 seq_printf(m, "CacheOp: inv=%d upo=%d dro=%d pto=%d atc=%d syn=%d\n", 262 atomic_read(&fscache_n_cop_invalidate_object), 263 atomic_read(&fscache_n_cop_update_object), 264 atomic_read(&fscache_n_cop_drop_object), 265 atomic_read(&fscache_n_cop_put_object), 266 atomic_read(&fscache_n_cop_attr_changed), 267 atomic_read(&fscache_n_cop_sync_cache)); 268 seq_printf(m, "CacheOp: rap=%d ras=%d alp=%d als=%d wrp=%d ucp=%d dsp=%d\n", 269 atomic_read(&fscache_n_cop_read_or_alloc_page), 270 atomic_read(&fscache_n_cop_read_or_alloc_pages), 271 atomic_read(&fscache_n_cop_allocate_page), 272 atomic_read(&fscache_n_cop_allocate_pages), 273 atomic_read(&fscache_n_cop_write_page), 274 atomic_read(&fscache_n_cop_uncache_page), 275 atomic_read(&fscache_n_cop_dissociate_pages)); 276 seq_printf(m, "CacheEv: nsp=%d stl=%d rtr=%d cul=%d\n", 277 atomic_read(&fscache_n_cache_no_space_reject), 278 atomic_read(&fscache_n_cache_stale_objects), 279 atomic_read(&fscache_n_cache_retired_objects), 280 atomic_read(&fscache_n_cache_culled_objects)); 281 netfs_stats_show(m); 282 return 0; 283 } 284