]>
Commit | Line | Data |
---|---|---|
11c556b3 CL |
1 | /* |
2 | * linux/include/linux/sunrpc/metrics.h | |
3 | * | |
4 | * Declarations for RPC client per-operation metrics | |
5 | * | |
6 | * Copyright (C) 2005 Chuck Lever <cel@netapp.com> | |
7 | * | |
8 | * RPC client per-operation statistics provide latency and retry | |
9 | * information about each type of RPC procedure in a given RPC program. | |
10 | * These statistics are not for detailed problem diagnosis, but simply | |
11 | * to indicate whether the problem is local or remote. | |
12 | * | |
13 | * These counters are not meant to be human-readable, but are meant to be | |
14 | * integrated into system monitoring tools such as "sar" and "iostat". As | |
15 | * such, the counters are sampled by the tools over time, and are never | |
16 | * zeroed after a file system is mounted. Moving averages can be computed | |
17 | * by the tools by taking the difference between two instantaneous samples | |
18 | * and dividing that by the time between the samples. | |
19 | * | |
20 | * The counters are maintained in a single array per RPC client, indexed | |
21 | * by procedure number. There is no need to maintain separate counter | |
22 | * arrays per-CPU because these counters are always modified behind locks. | |
23 | */ | |
24 | ||
25 | #ifndef _LINUX_SUNRPC_METRICS_H | |
26 | #define _LINUX_SUNRPC_METRICS_H | |
27 | ||
28 | #include <linux/seq_file.h> | |
ff839970 | 29 | #include <linux/ktime.h> |
11c556b3 CL |
30 | |
31 | #define RPC_IOSTATS_VERS "1.0" | |
32 | ||
33 | struct rpc_iostats { | |
34 | /* | |
35 | * These counters give an idea about how many request | |
36 | * transmissions are required, on average, to complete that | |
37 | * particular procedure. Some procedures may require more | |
38 | * than one transmission because the server is unresponsive, | |
39 | * the client is retransmitting too aggressively, or the | |
40 | * requests are large and the network is congested. | |
41 | */ | |
42 | unsigned long om_ops, /* count of operations */ | |
43 | om_ntrans, /* count of RPC transmissions */ | |
44 | om_timeouts; /* count of major timeouts */ | |
45 | ||
46 | /* | |
47 | * These count how many bytes are sent and received for a | |
48 | * given RPC procedure type. This indicates how much load a | |
49 | * particular procedure is putting on the network. These | |
50 | * counts include the RPC and ULP headers, and the request | |
51 | * payload. | |
52 | */ | |
53 | unsigned long long om_bytes_sent, /* count of bytes out */ | |
54 | om_bytes_recv; /* count of bytes in */ | |
55 | ||
56 | /* | |
57 | * The length of time an RPC request waits in queue before | |
58 | * transmission, the network + server latency of the request, | |
59 | * and the total time the request spent from init to release | |
60 | * are measured. | |
61 | */ | |
ff839970 CL |
62 | ktime_t om_queue, /* queued for xmit */ |
63 | om_rtt, /* RPC RTT */ | |
64 | om_execute; /* RPC execution */ | |
11c556b3 CL |
65 | } ____cacheline_aligned; |
66 | ||
67 | struct rpc_task; | |
68 | struct rpc_clnt; | |
69 | ||
70 | /* | |
71 | * EXPORTed functions for managing rpc_iostats structures | |
72 | */ | |
7866baba AB |
73 | |
74 | #ifdef CONFIG_PROC_FS | |
75 | ||
11c556b3 | 76 | struct rpc_iostats * rpc_alloc_iostats(struct rpc_clnt *); |
0a702195 WAA |
77 | void rpc_count_iostats(const struct rpc_task *, |
78 | struct rpc_iostats *); | |
11c556b3 CL |
79 | void rpc_print_iostats(struct seq_file *, struct rpc_clnt *); |
80 | void rpc_free_iostats(struct rpc_iostats *); | |
81 | ||
7866baba AB |
82 | #else /* CONFIG_PROC_FS */ |
83 | ||
84 | static inline struct rpc_iostats *rpc_alloc_iostats(struct rpc_clnt *clnt) { return NULL; } | |
0a702195 WAA |
85 | static inline void rpc_count_iostats(const struct rpc_task *task, |
86 | struct rpc_iostats *stats) {} | |
7866baba AB |
87 | static inline void rpc_print_iostats(struct seq_file *seq, struct rpc_clnt *clnt) {} |
88 | static inline void rpc_free_iostats(struct rpc_iostats *stats) {} | |
89 | ||
90 | #endif /* CONFIG_PROC_FS */ | |
91 | ||
11c556b3 | 92 | #endif /* _LINUX_SUNRPC_METRICS_H */ |