diff options
-rw-r--r-- | include/linux/nfs_iostat.h | 2 | ||||
-rw-r--r-- | include/linux/sunrpc/xprt.h | 7 | ||||
-rw-r--r-- | net/sunrpc/xprt.c | 7 | ||||
-rw-r--r-- | net/sunrpc/xprtsock.c | 23 |
4 files changed, 29 insertions, 10 deletions
diff --git a/include/linux/nfs_iostat.h b/include/linux/nfs_iostat.h index 8866bb3502ee..9dcbbe9a51fb 100644 --- a/include/linux/nfs_iostat.h +++ b/include/linux/nfs_iostat.h | |||
@@ -21,7 +21,7 @@ | |||
21 | #ifndef _LINUX_NFS_IOSTAT | 21 | #ifndef _LINUX_NFS_IOSTAT |
22 | #define _LINUX_NFS_IOSTAT | 22 | #define _LINUX_NFS_IOSTAT |
23 | 23 | ||
24 | #define NFS_IOSTAT_VERS "1.0" | 24 | #define NFS_IOSTAT_VERS "1.1" |
25 | 25 | ||
26 | /* | 26 | /* |
27 | * NFS byte counters | 27 | * NFS byte counters |
diff --git a/include/linux/sunrpc/xprt.h b/include/linux/sunrpc/xprt.h index b033f366d5f6..ea712f97f4a1 100644 --- a/include/linux/sunrpc/xprt.h +++ b/include/linux/sunrpc/xprt.h | |||
@@ -219,10 +219,13 @@ struct rpc_xprt { | |||
219 | connect_time, /* jiffies waiting for connect */ | 219 | connect_time, /* jiffies waiting for connect */ |
220 | sends, /* how many complete requests */ | 220 | sends, /* how many complete requests */ |
221 | recvs, /* how many complete requests */ | 221 | recvs, /* how many complete requests */ |
222 | bad_xids; /* lookup_rqst didn't find XID */ | 222 | bad_xids, /* lookup_rqst didn't find XID */ |
223 | max_slots; /* max rpc_slots used */ | ||
223 | 224 | ||
224 | unsigned long long req_u, /* average requests on the wire */ | 225 | unsigned long long req_u, /* average requests on the wire */ |
225 | bklog_u; /* backlog queue utilization */ | 226 | bklog_u, /* backlog queue utilization */ |
227 | sending_u, /* send q utilization */ | ||
228 | pending_u; /* pend q utilization */ | ||
226 | } stat; | 229 | } stat; |
227 | 230 | ||
228 | struct net *xprt_net; | 231 | struct net *xprt_net; |
diff --git a/net/sunrpc/xprt.c b/net/sunrpc/xprt.c index efe5495ecf65..739df8a11382 100644 --- a/net/sunrpc/xprt.c +++ b/net/sunrpc/xprt.c | |||
@@ -885,7 +885,7 @@ void xprt_transmit(struct rpc_task *task) | |||
885 | { | 885 | { |
886 | struct rpc_rqst *req = task->tk_rqstp; | 886 | struct rpc_rqst *req = task->tk_rqstp; |
887 | struct rpc_xprt *xprt = req->rq_xprt; | 887 | struct rpc_xprt *xprt = req->rq_xprt; |
888 | int status; | 888 | int status, numreqs; |
889 | 889 | ||
890 | dprintk("RPC: %5u xprt_transmit(%u)\n", task->tk_pid, req->rq_slen); | 890 | dprintk("RPC: %5u xprt_transmit(%u)\n", task->tk_pid, req->rq_slen); |
891 | 891 | ||
@@ -922,9 +922,14 @@ void xprt_transmit(struct rpc_task *task) | |||
922 | 922 | ||
923 | xprt->ops->set_retrans_timeout(task); | 923 | xprt->ops->set_retrans_timeout(task); |
924 | 924 | ||
925 | numreqs = atomic_read(&xprt->num_reqs); | ||
926 | if (numreqs > xprt->stat.max_slots) | ||
927 | xprt->stat.max_slots = numreqs; | ||
925 | xprt->stat.sends++; | 928 | xprt->stat.sends++; |
926 | xprt->stat.req_u += xprt->stat.sends - xprt->stat.recvs; | 929 | xprt->stat.req_u += xprt->stat.sends - xprt->stat.recvs; |
927 | xprt->stat.bklog_u += xprt->backlog.qlen; | 930 | xprt->stat.bklog_u += xprt->backlog.qlen; |
931 | xprt->stat.sending_u += xprt->sending.qlen; | ||
932 | xprt->stat.pending_u += xprt->pending.qlen; | ||
928 | 933 | ||
929 | /* Don't race with disconnect */ | 934 | /* Don't race with disconnect */ |
930 | if (!xprt_connected(xprt)) | 935 | if (!xprt_connected(xprt)) |
diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c index 55472c48825e..4c8281d29e2b 100644 --- a/net/sunrpc/xprtsock.c +++ b/net/sunrpc/xprtsock.c | |||
@@ -2227,7 +2227,7 @@ static void xs_local_print_stats(struct rpc_xprt *xprt, struct seq_file *seq) | |||
2227 | idle_time = (long)(jiffies - xprt->last_used) / HZ; | 2227 | idle_time = (long)(jiffies - xprt->last_used) / HZ; |
2228 | 2228 | ||
2229 | seq_printf(seq, "\txprt:\tlocal %lu %lu %lu %ld %lu %lu %lu " | 2229 | seq_printf(seq, "\txprt:\tlocal %lu %lu %lu %ld %lu %lu %lu " |
2230 | "%llu %llu\n", | 2230 | "%llu %llu %lu %llu %llu\n", |
2231 | xprt->stat.bind_count, | 2231 | xprt->stat.bind_count, |
2232 | xprt->stat.connect_count, | 2232 | xprt->stat.connect_count, |
2233 | xprt->stat.connect_time, | 2233 | xprt->stat.connect_time, |
@@ -2236,7 +2236,10 @@ static void xs_local_print_stats(struct rpc_xprt *xprt, struct seq_file *seq) | |||
2236 | xprt->stat.recvs, | 2236 | xprt->stat.recvs, |
2237 | xprt->stat.bad_xids, | 2237 | xprt->stat.bad_xids, |
2238 | xprt->stat.req_u, | 2238 | xprt->stat.req_u, |
2239 | xprt->stat.bklog_u); | 2239 | xprt->stat.bklog_u, |
2240 | xprt->stat.max_slots, | ||
2241 | xprt->stat.sending_u, | ||
2242 | xprt->stat.pending_u); | ||
2240 | } | 2243 | } |
2241 | 2244 | ||
2242 | /** | 2245 | /** |
@@ -2249,14 +2252,18 @@ static void xs_udp_print_stats(struct rpc_xprt *xprt, struct seq_file *seq) | |||
2249 | { | 2252 | { |
2250 | struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt); | 2253 | struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt); |
2251 | 2254 | ||
2252 | seq_printf(seq, "\txprt:\tudp %u %lu %lu %lu %lu %Lu %Lu\n", | 2255 | seq_printf(seq, "\txprt:\tudp %u %lu %lu %lu %lu %llu %llu " |
2256 | "%lu %llu %llu\n", | ||
2253 | transport->srcport, | 2257 | transport->srcport, |
2254 | xprt->stat.bind_count, | 2258 | xprt->stat.bind_count, |
2255 | xprt->stat.sends, | 2259 | xprt->stat.sends, |
2256 | xprt->stat.recvs, | 2260 | xprt->stat.recvs, |
2257 | xprt->stat.bad_xids, | 2261 | xprt->stat.bad_xids, |
2258 | xprt->stat.req_u, | 2262 | xprt->stat.req_u, |
2259 | xprt->stat.bklog_u); | 2263 | xprt->stat.bklog_u, |
2264 | xprt->stat.max_slots, | ||
2265 | xprt->stat.sending_u, | ||
2266 | xprt->stat.pending_u); | ||
2260 | } | 2267 | } |
2261 | 2268 | ||
2262 | /** | 2269 | /** |
@@ -2273,7 +2280,8 @@ static void xs_tcp_print_stats(struct rpc_xprt *xprt, struct seq_file *seq) | |||
2273 | if (xprt_connected(xprt)) | 2280 | if (xprt_connected(xprt)) |
2274 | idle_time = (long)(jiffies - xprt->last_used) / HZ; | 2281 | idle_time = (long)(jiffies - xprt->last_used) / HZ; |
2275 | 2282 | ||
2276 | seq_printf(seq, "\txprt:\ttcp %u %lu %lu %lu %ld %lu %lu %lu %Lu %Lu\n", | 2283 | seq_printf(seq, "\txprt:\ttcp %u %lu %lu %lu %ld %lu %lu %lu " |
2284 | "%llu %llu %lu %llu %llu\n", | ||
2277 | transport->srcport, | 2285 | transport->srcport, |
2278 | xprt->stat.bind_count, | 2286 | xprt->stat.bind_count, |
2279 | xprt->stat.connect_count, | 2287 | xprt->stat.connect_count, |
@@ -2283,7 +2291,10 @@ static void xs_tcp_print_stats(struct rpc_xprt *xprt, struct seq_file *seq) | |||
2283 | xprt->stat.recvs, | 2291 | xprt->stat.recvs, |
2284 | xprt->stat.bad_xids, | 2292 | xprt->stat.bad_xids, |
2285 | xprt->stat.req_u, | 2293 | xprt->stat.req_u, |
2286 | xprt->stat.bklog_u); | 2294 | xprt->stat.bklog_u, |
2295 | xprt->stat.max_slots, | ||
2296 | xprt->stat.sending_u, | ||
2297 | xprt->stat.pending_u); | ||
2287 | } | 2298 | } |
2288 | 2299 | ||
2289 | /* | 2300 | /* |