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 | /* |
