1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /* FS-Cache latency histogram
4 * Copyright (C) 2008 Red Hat, Inc. All Rights Reserved.
5 * Written by David Howells (dhowells@redhat.com)
8 #define FSCACHE_DEBUG_LEVEL THREAD
9 #include <linux/module.h>
10 #include <linux/proc_fs.h>
11 #include <linux/seq_file.h>
14 atomic_t fscache_obj_instantiate_histogram
[HZ
];
15 atomic_t fscache_objs_histogram
[HZ
];
16 atomic_t fscache_ops_histogram
[HZ
];
17 atomic_t fscache_retrieval_delay_histogram
[HZ
];
18 atomic_t fscache_retrieval_histogram
[HZ
];
21 * display the time-taken histogram
23 static int fscache_histogram_show(struct seq_file
*m
, void *v
)
28 switch ((unsigned long) v
) {
30 seq_puts(m
, "JIFS SECS OBJ INST OP RUNS OBJ RUNS RETRV DLY RETRIEVLS\n");
33 seq_puts(m
, "===== ===== ========= ========= ========= ========= =========\n");
36 index
= (unsigned long) v
- 3;
37 n
[0] = atomic_read(&fscache_obj_instantiate_histogram
[index
]);
38 n
[1] = atomic_read(&fscache_ops_histogram
[index
]);
39 n
[2] = atomic_read(&fscache_objs_histogram
[index
]);
40 n
[3] = atomic_read(&fscache_retrieval_delay_histogram
[index
]);
41 n
[4] = atomic_read(&fscache_retrieval_histogram
[index
]);
42 if (!(n
[0] | n
[1] | n
[2] | n
[3] | n
[4]))
45 t
= (index
* 1000) / HZ
;
47 seq_printf(m
, "%4lu 0.%03u %9u %9u %9u %9u %9u\n",
48 index
, t
, n
[0], n
[1], n
[2], n
[3], n
[4]);
54 * set up the iterator to start reading from the first line
56 static void *fscache_histogram_start(struct seq_file
*m
, loff_t
*_pos
)
58 if ((unsigned long long)*_pos
>= HZ
+ 2)
62 return (void *)(unsigned long) *_pos
;
66 * move to the next line
68 static void *fscache_histogram_next(struct seq_file
*m
, void *v
, loff_t
*pos
)
71 return (unsigned long long)*pos
> HZ
+ 2 ?
72 NULL
: (void *)(unsigned long) *pos
;
76 * clean up after reading
78 static void fscache_histogram_stop(struct seq_file
*m
, void *v
)
82 const struct seq_operations fscache_histogram_ops
= {
83 .start
= fscache_histogram_start
,
84 .stop
= fscache_histogram_stop
,
85 .next
= fscache_histogram_next
,
86 .show
= fscache_histogram_show
,