Branch data Line data Source code
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 : 0 : int fscache_stats_show(struct seq_file *m, void *v) 138 : : { 139 : 0 : seq_puts(m, "FS-Cache statistics\n"); 140 : : 141 : 0 : seq_printf(m, "Cookies: idx=%u dat=%u spc=%u\n", 142 : 0 : atomic_read(&fscache_n_cookie_index), 143 : 0 : atomic_read(&fscache_n_cookie_data), 144 : 0 : atomic_read(&fscache_n_cookie_special)); 145 : : 146 : 0 : seq_printf(m, "Objects: alc=%u nal=%u avl=%u ded=%u\n", 147 : 0 : atomic_read(&fscache_n_object_alloc), 148 : 0 : atomic_read(&fscache_n_object_no_alloc), 149 : 0 : atomic_read(&fscache_n_object_avail), 150 : 0 : atomic_read(&fscache_n_object_dead)); 151 : 0 : seq_printf(m, "ChkAux : non=%u ok=%u upd=%u obs=%u\n", 152 : 0 : atomic_read(&fscache_n_checkaux_none), 153 : 0 : atomic_read(&fscache_n_checkaux_okay), 154 : 0 : atomic_read(&fscache_n_checkaux_update), 155 : 0 : atomic_read(&fscache_n_checkaux_obsolete)); 156 : : 157 : 0 : seq_printf(m, "Pages : mrk=%u unc=%u\n", 158 : 0 : atomic_read(&fscache_n_marks), 159 : 0 : atomic_read(&fscache_n_uncaches)); 160 : : 161 : 0 : seq_printf(m, "Acquire: n=%u nul=%u noc=%u ok=%u nbf=%u" 162 : : " oom=%u\n", 163 : 0 : atomic_read(&fscache_n_acquires), 164 : 0 : atomic_read(&fscache_n_acquires_null), 165 : 0 : atomic_read(&fscache_n_acquires_no_cache), 166 : 0 : atomic_read(&fscache_n_acquires_ok), 167 : 0 : atomic_read(&fscache_n_acquires_nobufs), 168 : 0 : atomic_read(&fscache_n_acquires_oom)); 169 : : 170 : 0 : seq_printf(m, "Lookups: n=%u neg=%u pos=%u crt=%u tmo=%u\n", 171 : 0 : atomic_read(&fscache_n_object_lookups), 172 : 0 : atomic_read(&fscache_n_object_lookups_negative), 173 : 0 : atomic_read(&fscache_n_object_lookups_positive), 174 : 0 : atomic_read(&fscache_n_object_created), 175 : 0 : atomic_read(&fscache_n_object_lookups_timed_out)); 176 : : 177 : 0 : seq_printf(m, "Invals : n=%u run=%u\n", 178 : 0 : atomic_read(&fscache_n_invalidates), 179 : 0 : atomic_read(&fscache_n_invalidates_run)); 180 : : 181 : 0 : seq_printf(m, "Updates: n=%u nul=%u run=%u\n", 182 : 0 : atomic_read(&fscache_n_updates), 183 : 0 : atomic_read(&fscache_n_updates_null), 184 : 0 : atomic_read(&fscache_n_updates_run)); 185 : : 186 : 0 : seq_printf(m, "Relinqs: n=%u nul=%u wcr=%u rtr=%u\n", 187 : 0 : atomic_read(&fscache_n_relinquishes), 188 : 0 : atomic_read(&fscache_n_relinquishes_null), 189 : 0 : atomic_read(&fscache_n_relinquishes_waitcrt), 190 : 0 : atomic_read(&fscache_n_relinquishes_retire)); 191 : : 192 : 0 : seq_printf(m, "AttrChg: n=%u ok=%u nbf=%u oom=%u run=%u\n", 193 : 0 : atomic_read(&fscache_n_attr_changed), 194 : 0 : atomic_read(&fscache_n_attr_changed_ok), 195 : 0 : atomic_read(&fscache_n_attr_changed_nobufs), 196 : 0 : atomic_read(&fscache_n_attr_changed_nomem), 197 : 0 : atomic_read(&fscache_n_attr_changed_calls)); 198 : : 199 : 0 : seq_printf(m, "Allocs : n=%u ok=%u wt=%u nbf=%u int=%u\n", 200 : 0 : atomic_read(&fscache_n_allocs), 201 : 0 : atomic_read(&fscache_n_allocs_ok), 202 : 0 : atomic_read(&fscache_n_allocs_wait), 203 : 0 : atomic_read(&fscache_n_allocs_nobufs), 204 : 0 : atomic_read(&fscache_n_allocs_intr)); 205 : 0 : seq_printf(m, "Allocs : ops=%u owt=%u abt=%u\n", 206 : 0 : atomic_read(&fscache_n_alloc_ops), 207 : 0 : atomic_read(&fscache_n_alloc_op_waits), 208 : 0 : atomic_read(&fscache_n_allocs_object_dead)); 209 : : 210 : 0 : seq_printf(m, "Retrvls: n=%u ok=%u wt=%u nod=%u nbf=%u" 211 : : " int=%u oom=%u\n", 212 : 0 : atomic_read(&fscache_n_retrievals), 213 : 0 : atomic_read(&fscache_n_retrievals_ok), 214 : 0 : atomic_read(&fscache_n_retrievals_wait), 215 : 0 : atomic_read(&fscache_n_retrievals_nodata), 216 : 0 : atomic_read(&fscache_n_retrievals_nobufs), 217 : 0 : atomic_read(&fscache_n_retrievals_intr), 218 : 0 : atomic_read(&fscache_n_retrievals_nomem)); 219 : 0 : seq_printf(m, "Retrvls: ops=%u owt=%u abt=%u\n", 220 : 0 : atomic_read(&fscache_n_retrieval_ops), 221 : 0 : atomic_read(&fscache_n_retrieval_op_waits), 222 : 0 : atomic_read(&fscache_n_retrievals_object_dead)); 223 : : 224 : 0 : seq_printf(m, "Stores : n=%u ok=%u agn=%u nbf=%u oom=%u\n", 225 : 0 : atomic_read(&fscache_n_stores), 226 : 0 : atomic_read(&fscache_n_stores_ok), 227 : 0 : atomic_read(&fscache_n_stores_again), 228 : 0 : atomic_read(&fscache_n_stores_nobufs), 229 : 0 : atomic_read(&fscache_n_stores_oom)); 230 : 0 : seq_printf(m, "Stores : ops=%u run=%u pgs=%u rxd=%u olm=%u\n", 231 : 0 : atomic_read(&fscache_n_store_ops), 232 : 0 : atomic_read(&fscache_n_store_calls), 233 : 0 : atomic_read(&fscache_n_store_pages), 234 : 0 : atomic_read(&fscache_n_store_radix_deletes), 235 : 0 : atomic_read(&fscache_n_store_pages_over_limit)); 236 : : 237 : 0 : seq_printf(m, "VmScan : nos=%u gon=%u bsy=%u can=%u wt=%u\n", 238 : 0 : atomic_read(&fscache_n_store_vmscan_not_storing), 239 : 0 : atomic_read(&fscache_n_store_vmscan_gone), 240 : 0 : atomic_read(&fscache_n_store_vmscan_busy), 241 : 0 : atomic_read(&fscache_n_store_vmscan_cancelled), 242 : 0 : atomic_read(&fscache_n_store_vmscan_wait)); 243 : : 244 : 0 : seq_printf(m, "Ops : pend=%u run=%u enq=%u can=%u rej=%u\n", 245 : 0 : atomic_read(&fscache_n_op_pend), 246 : 0 : atomic_read(&fscache_n_op_run), 247 : 0 : atomic_read(&fscache_n_op_enqueue), 248 : 0 : atomic_read(&fscache_n_op_cancelled), 249 : 0 : atomic_read(&fscache_n_op_rejected)); 250 : 0 : seq_printf(m, "Ops : ini=%u dfr=%u rel=%u gc=%u\n", 251 : 0 : atomic_read(&fscache_n_op_initialised), 252 : 0 : atomic_read(&fscache_n_op_deferred_release), 253 : 0 : atomic_read(&fscache_n_op_release), 254 : 0 : atomic_read(&fscache_n_op_gc)); 255 : : 256 : 0 : seq_printf(m, "CacheOp: alo=%d luo=%d luc=%d gro=%d\n", 257 : 0 : atomic_read(&fscache_n_cop_alloc_object), 258 : 0 : atomic_read(&fscache_n_cop_lookup_object), 259 : 0 : atomic_read(&fscache_n_cop_lookup_complete), 260 : 0 : atomic_read(&fscache_n_cop_grab_object)); 261 : 0 : seq_printf(m, "CacheOp: inv=%d upo=%d dro=%d pto=%d atc=%d syn=%d\n", 262 : 0 : atomic_read(&fscache_n_cop_invalidate_object), 263 : 0 : atomic_read(&fscache_n_cop_update_object), 264 : 0 : atomic_read(&fscache_n_cop_drop_object), 265 : 0 : atomic_read(&fscache_n_cop_put_object), 266 : 0 : atomic_read(&fscache_n_cop_attr_changed), 267 : 0 : atomic_read(&fscache_n_cop_sync_cache)); 268 : 0 : seq_printf(m, "CacheOp: rap=%d ras=%d alp=%d als=%d wrp=%d ucp=%d dsp=%d\n", 269 : 0 : atomic_read(&fscache_n_cop_read_or_alloc_page), 270 : 0 : atomic_read(&fscache_n_cop_read_or_alloc_pages), 271 : 0 : atomic_read(&fscache_n_cop_allocate_page), 272 : 0 : atomic_read(&fscache_n_cop_allocate_pages), 273 : 0 : atomic_read(&fscache_n_cop_write_page), 274 : 0 : atomic_read(&fscache_n_cop_uncache_page), 275 : 0 : atomic_read(&fscache_n_cop_dissociate_pages)); 276 : 0 : seq_printf(m, "CacheEv: nsp=%d stl=%d rtr=%d cul=%d\n", 277 : 0 : atomic_read(&fscache_n_cache_no_space_reject), 278 : 0 : atomic_read(&fscache_n_cache_stale_objects), 279 : 0 : atomic_read(&fscache_n_cache_retired_objects), 280 : 0 : atomic_read(&fscache_n_cache_culled_objects)); 281 : 0 : return 0; 282 : : }