Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 192325
b: refs/heads/master
c: ff83997
h: refs/heads/master
i:
  192323: 2ca910b
v: v3
  • Loading branch information
Chuck Lever authored and Trond Myklebust committed May 14, 2010
1 parent a4888ca commit 8d7bdc8
Show file tree
Hide file tree
Showing 7 changed files with 25 additions and 29 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: f56916b97fe2031761ca611f0a342efd913afb33
refs/heads/master: ff8399709e41bf72b4cb145612a0f9a9f7283c83
7 changes: 4 additions & 3 deletions trunk/include/linux/sunrpc/metrics.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
#define _LINUX_SUNRPC_METRICS_H

#include <linux/seq_file.h>
#include <linux/ktime.h>

#define RPC_IOSTATS_VERS "1.0"

Expand Down Expand Up @@ -58,9 +59,9 @@ struct rpc_iostats {
* and the total time the request spent from init to release
* are measured.
*/
unsigned long long om_queue, /* jiffies queued for xmit */
om_rtt, /* jiffies for RPC RTT */
om_execute; /* jiffies for RPC execution */
ktime_t om_queue, /* queued for xmit */
om_rtt, /* RPC RTT */
om_execute; /* RPC execution */
} ____cacheline_aligned;

struct rpc_task;
Expand Down
5 changes: 3 additions & 2 deletions trunk/include/linux/sunrpc/sched.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
#define _LINUX_SUNRPC_SCHED_H_

#include <linux/timer.h>
#include <linux/ktime.h>
#include <linux/sunrpc/types.h>
#include <linux/spinlock.h>
#include <linux/wait.h>
Expand Down Expand Up @@ -80,8 +81,8 @@ struct rpc_task {

unsigned short tk_timeouts; /* maj timeouts */
size_t tk_bytes_sent; /* total bytes sent */
unsigned long tk_start; /* RPC task init timestamp */
long tk_rtt; /* round-trip time (jiffies) */
ktime_t tk_start, /* RPC task init timestamp */
tk_rtt; /* round-trip time */

pid_t tk_owner; /* Process id for batching tasks */
unsigned char tk_priority : 2;/* Task priority */
Expand Down
3 changes: 2 additions & 1 deletion trunk/include/linux/sunrpc/xprt.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
#include <linux/socket.h>
#include <linux/in.h>
#include <linux/kref.h>
#include <linux/ktime.h>
#include <linux/sunrpc/sched.h>
#include <linux/sunrpc/xdr.h>
#include <linux/sunrpc/msg_prot.h>
Expand Down Expand Up @@ -94,7 +95,7 @@ struct rpc_rqst {
*/
u32 rq_bytes_sent; /* Bytes we have sent */

unsigned long rq_xtime; /* when transmitted */
ktime_t rq_xtime; /* transmit time stamp */
int rq_ntrans;

#if defined(CONFIG_NFS_V4_1)
Expand Down
2 changes: 1 addition & 1 deletion trunk/net/sunrpc/sched.c
Original file line number Diff line number Diff line change
Expand Up @@ -834,7 +834,7 @@ static void rpc_init_task(struct rpc_task *task, const struct rpc_task_setup *ta
}

/* starting timestamp */
task->tk_start = jiffies;
task->tk_start = ktime_get();

dprintk("RPC: new task initialized, procpid %u\n",
task_pid_nr(current));
Expand Down
27 changes: 9 additions & 18 deletions trunk/net/sunrpc/stats.c
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ void rpc_count_iostats(struct rpc_task *task)
struct rpc_rqst *req = task->tk_rqstp;
struct rpc_iostats *stats;
struct rpc_iostats *op_metrics;
long rtt, execute, queue;
ktime_t delta;

if (!task->tk_client || !task->tk_client->cl_metrics || !req)
return;
Expand All @@ -159,20 +159,13 @@ void rpc_count_iostats(struct rpc_task *task)
op_metrics->om_bytes_sent += task->tk_bytes_sent;
op_metrics->om_bytes_recv += req->rq_reply_bytes_recvd;

queue = (long)req->rq_xtime - task->tk_start;
if (queue < 0)
queue = -queue;
op_metrics->om_queue += queue;
delta = ktime_sub(req->rq_xtime, task->tk_start);
op_metrics->om_queue = ktime_add(op_metrics->om_queue, delta);

rtt = task->tk_rtt;
if (rtt < 0)
rtt = -rtt;
op_metrics->om_rtt += rtt;
op_metrics->om_rtt = ktime_add(op_metrics->om_rtt, task->tk_rtt);

execute = (long)jiffies - task->tk_start;
if (execute < 0)
execute = -execute;
op_metrics->om_execute += execute;
delta = ktime_sub(ktime_get(), task->tk_start);
op_metrics->om_execute = ktime_add(op_metrics->om_execute, delta);
}

static void _print_name(struct seq_file *seq, unsigned int op,
Expand All @@ -186,8 +179,6 @@ static void _print_name(struct seq_file *seq, unsigned int op,
seq_printf(seq, "\t%12u: ", op);
}

#define MILLISECS_PER_JIFFY (1000 / HZ)

void rpc_print_iostats(struct seq_file *seq, struct rpc_clnt *clnt)
{
struct rpc_iostats *stats = clnt->cl_metrics;
Expand All @@ -214,9 +205,9 @@ void rpc_print_iostats(struct seq_file *seq, struct rpc_clnt *clnt)
metrics->om_timeouts,
metrics->om_bytes_sent,
metrics->om_bytes_recv,
metrics->om_queue * MILLISECS_PER_JIFFY,
metrics->om_rtt * MILLISECS_PER_JIFFY,
metrics->om_execute * MILLISECS_PER_JIFFY);
ktime_to_ms(metrics->om_queue),
ktime_to_ms(metrics->om_rtt),
ktime_to_ms(metrics->om_execute));
}
}
EXPORT_SYMBOL_GPL(rpc_print_iostats);
Expand Down
8 changes: 5 additions & 3 deletions trunk/net/sunrpc/xprt.c
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@
#include <linux/interrupt.h>
#include <linux/workqueue.h>
#include <linux/net.h>
#include <linux/ktime.h>

#include <linux/sunrpc/clnt.h>
#include <linux/sunrpc/metrics.h>
Expand Down Expand Up @@ -779,10 +780,11 @@ static void xprt_update_rtt(struct rpc_task *task)
struct rpc_rqst *req = task->tk_rqstp;
struct rpc_rtt *rtt = task->tk_client->cl_rtt;
unsigned timer = task->tk_msg.rpc_proc->p_timer;
long m = usecs_to_jiffies(ktime_to_us(task->tk_rtt));

if (timer) {
if (req->rq_ntrans == 1)
rpc_update_rtt(rtt, timer, task->tk_rtt);
rpc_update_rtt(rtt, timer, m);
rpc_set_timeo(rtt, timer, req->rq_ntrans - 1);
}
}
Expand All @@ -803,7 +805,7 @@ void xprt_complete_rqst(struct rpc_task *task, int copied)
task->tk_pid, ntohl(req->rq_xid), copied);

xprt->stat.recvs++;
task->tk_rtt = (long)jiffies - req->rq_xtime;
task->tk_rtt = ktime_sub(ktime_get(), req->rq_xtime);
if (xprt->ops->timer != NULL)
xprt_update_rtt(task);

Expand Down Expand Up @@ -904,7 +906,7 @@ void xprt_transmit(struct rpc_task *task)
return;

req->rq_connect_cookie = xprt->connect_cookie;
req->rq_xtime = jiffies;
req->rq_xtime = ktime_get();
status = xprt->ops->send_request(task);
if (status != 0) {
task->tk_status = status;
Expand Down

0 comments on commit 8d7bdc8

Please sign in to comment.