Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
stats.c
Go to the documentation of this file.
1 /* FS-Cache statistics
2  *
3  * Copyright (C) 2007 Red Hat, Inc. All Rights Reserved.
4  * Written by David Howells ([email protected])
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version
9  * 2 of the License, or (at your option) any later version.
10  */
11 
12 #define FSCACHE_DEBUG_LEVEL THREAD
13 #include <linux/module.h>
14 #include <linux/proc_fs.h>
15 #include <linux/seq_file.h>
16 #include "internal.h"
17 
18 /*
19  * operation counters
20  */
30 
36 
45 
56 
67 
72 
75 
82 
86 
91 
95 
105 
110 
127 
128 /*
129  * display the general statistics
130  */
131 static int fscache_stats_show(struct seq_file *m, void *v)
132 {
133  seq_puts(m, "FS-Cache statistics\n");
134 
135  seq_printf(m, "Cookies: idx=%u dat=%u spc=%u\n",
136  atomic_read(&fscache_n_cookie_index),
137  atomic_read(&fscache_n_cookie_data),
138  atomic_read(&fscache_n_cookie_special));
139 
140  seq_printf(m, "Objects: alc=%u nal=%u avl=%u ded=%u\n",
141  atomic_read(&fscache_n_object_alloc),
142  atomic_read(&fscache_n_object_no_alloc),
143  atomic_read(&fscache_n_object_avail),
144  atomic_read(&fscache_n_object_dead));
145  seq_printf(m, "ChkAux : non=%u ok=%u upd=%u obs=%u\n",
146  atomic_read(&fscache_n_checkaux_none),
147  atomic_read(&fscache_n_checkaux_okay),
148  atomic_read(&fscache_n_checkaux_update),
149  atomic_read(&fscache_n_checkaux_obsolete));
150 
151  seq_printf(m, "Pages : mrk=%u unc=%u\n",
152  atomic_read(&fscache_n_marks),
153  atomic_read(&fscache_n_uncaches));
154 
155  seq_printf(m, "Acquire: n=%u nul=%u noc=%u ok=%u nbf=%u"
156  " oom=%u\n",
157  atomic_read(&fscache_n_acquires),
158  atomic_read(&fscache_n_acquires_null),
159  atomic_read(&fscache_n_acquires_no_cache),
160  atomic_read(&fscache_n_acquires_ok),
161  atomic_read(&fscache_n_acquires_nobufs),
162  atomic_read(&fscache_n_acquires_oom));
163 
164  seq_printf(m, "Lookups: n=%u neg=%u pos=%u crt=%u tmo=%u\n",
165  atomic_read(&fscache_n_object_lookups),
166  atomic_read(&fscache_n_object_lookups_negative),
167  atomic_read(&fscache_n_object_lookups_positive),
168  atomic_read(&fscache_n_object_created),
169  atomic_read(&fscache_n_object_lookups_timed_out));
170 
171  seq_printf(m, "Updates: n=%u nul=%u run=%u\n",
172  atomic_read(&fscache_n_updates),
173  atomic_read(&fscache_n_updates_null),
174  atomic_read(&fscache_n_updates_run));
175 
176  seq_printf(m, "Relinqs: n=%u nul=%u wcr=%u rtr=%u\n",
177  atomic_read(&fscache_n_relinquishes),
178  atomic_read(&fscache_n_relinquishes_null),
179  atomic_read(&fscache_n_relinquishes_waitcrt),
180  atomic_read(&fscache_n_relinquishes_retire));
181 
182  seq_printf(m, "AttrChg: n=%u ok=%u nbf=%u oom=%u run=%u\n",
183  atomic_read(&fscache_n_attr_changed),
184  atomic_read(&fscache_n_attr_changed_ok),
185  atomic_read(&fscache_n_attr_changed_nobufs),
186  atomic_read(&fscache_n_attr_changed_nomem),
187  atomic_read(&fscache_n_attr_changed_calls));
188 
189  seq_printf(m, "Allocs : n=%u ok=%u wt=%u nbf=%u int=%u\n",
190  atomic_read(&fscache_n_allocs),
191  atomic_read(&fscache_n_allocs_ok),
192  atomic_read(&fscache_n_allocs_wait),
193  atomic_read(&fscache_n_allocs_nobufs),
194  atomic_read(&fscache_n_allocs_intr));
195  seq_printf(m, "Allocs : ops=%u owt=%u abt=%u\n",
196  atomic_read(&fscache_n_alloc_ops),
197  atomic_read(&fscache_n_alloc_op_waits),
198  atomic_read(&fscache_n_allocs_object_dead));
199 
200  seq_printf(m, "Retrvls: n=%u ok=%u wt=%u nod=%u nbf=%u"
201  " int=%u oom=%u\n",
202  atomic_read(&fscache_n_retrievals),
203  atomic_read(&fscache_n_retrievals_ok),
204  atomic_read(&fscache_n_retrievals_wait),
205  atomic_read(&fscache_n_retrievals_nodata),
206  atomic_read(&fscache_n_retrievals_nobufs),
207  atomic_read(&fscache_n_retrievals_intr),
208  atomic_read(&fscache_n_retrievals_nomem));
209  seq_printf(m, "Retrvls: ops=%u owt=%u abt=%u\n",
210  atomic_read(&fscache_n_retrieval_ops),
211  atomic_read(&fscache_n_retrieval_op_waits),
212  atomic_read(&fscache_n_retrievals_object_dead));
213 
214  seq_printf(m, "Stores : n=%u ok=%u agn=%u nbf=%u oom=%u\n",
215  atomic_read(&fscache_n_stores),
216  atomic_read(&fscache_n_stores_ok),
217  atomic_read(&fscache_n_stores_again),
218  atomic_read(&fscache_n_stores_nobufs),
219  atomic_read(&fscache_n_stores_oom));
220  seq_printf(m, "Stores : ops=%u run=%u pgs=%u rxd=%u olm=%u\n",
221  atomic_read(&fscache_n_store_ops),
222  atomic_read(&fscache_n_store_calls),
223  atomic_read(&fscache_n_store_pages),
224  atomic_read(&fscache_n_store_radix_deletes),
225  atomic_read(&fscache_n_store_pages_over_limit));
226 
227  seq_printf(m, "VmScan : nos=%u gon=%u bsy=%u can=%u\n",
228  atomic_read(&fscache_n_store_vmscan_not_storing),
229  atomic_read(&fscache_n_store_vmscan_gone),
230  atomic_read(&fscache_n_store_vmscan_busy),
231  atomic_read(&fscache_n_store_vmscan_cancelled));
232 
233  seq_printf(m, "Ops : pend=%u run=%u enq=%u can=%u rej=%u\n",
234  atomic_read(&fscache_n_op_pend),
235  atomic_read(&fscache_n_op_run),
236  atomic_read(&fscache_n_op_enqueue),
237  atomic_read(&fscache_n_op_cancelled),
238  atomic_read(&fscache_n_op_rejected));
239  seq_printf(m, "Ops : dfr=%u rel=%u gc=%u\n",
240  atomic_read(&fscache_n_op_deferred_release),
241  atomic_read(&fscache_n_op_release),
242  atomic_read(&fscache_n_op_gc));
243 
244  seq_printf(m, "CacheOp: alo=%d luo=%d luc=%d gro=%d\n",
245  atomic_read(&fscache_n_cop_alloc_object),
246  atomic_read(&fscache_n_cop_lookup_object),
247  atomic_read(&fscache_n_cop_lookup_complete),
248  atomic_read(&fscache_n_cop_grab_object));
249  seq_printf(m, "CacheOp: upo=%d dro=%d pto=%d atc=%d syn=%d\n",
250  atomic_read(&fscache_n_cop_update_object),
251  atomic_read(&fscache_n_cop_drop_object),
252  atomic_read(&fscache_n_cop_put_object),
253  atomic_read(&fscache_n_cop_attr_changed),
254  atomic_read(&fscache_n_cop_sync_cache));
255  seq_printf(m, "CacheOp: rap=%d ras=%d alp=%d als=%d wrp=%d ucp=%d dsp=%d\n",
256  atomic_read(&fscache_n_cop_read_or_alloc_page),
257  atomic_read(&fscache_n_cop_read_or_alloc_pages),
258  atomic_read(&fscache_n_cop_allocate_page),
259  atomic_read(&fscache_n_cop_allocate_pages),
260  atomic_read(&fscache_n_cop_write_page),
261  atomic_read(&fscache_n_cop_uncache_page),
262  atomic_read(&fscache_n_cop_dissociate_pages));
263  return 0;
264 }
265 
266 /*
267  * open "/proc/fs/fscache/stats" allowing provision of a statistical summary
268  */
269 static int fscache_stats_open(struct inode *inode, struct file *file)
270 {
271  return single_open(file, fscache_stats_show, NULL);
272 }
273 
275  .owner = THIS_MODULE,
276  .open = fscache_stats_open,
277  .read = seq_read,
278  .llseek = seq_lseek,
279  .release = seq_release,
280 };