summaryrefslogtreecommitdiffstats
path: root/rpc/rpc-lib/src/rpc-clnt-ping.c
diff options
context:
space:
mode:
Diffstat (limited to 'rpc/rpc-lib/src/rpc-clnt-ping.c')
-rw-r--r--rpc/rpc-lib/src/rpc-clnt-ping.c25
1 files changed, 19 insertions, 6 deletions
diff --git a/rpc/rpc-lib/src/rpc-clnt-ping.c b/rpc/rpc-lib/src/rpc-clnt-ping.c
index d999adddb7f..a48a265b71d 100644
--- a/rpc/rpc-lib/src/rpc-clnt-ping.c
+++ b/rpc/rpc-lib/src/rpc-clnt-ping.c
@@ -172,6 +172,21 @@ out:
return;
}
+void
+_update_client_latency (call_frame_t *frame, double elapsed_usec)
+{
+ fop_latency_t *lat;
+
+ lat = &frame->this->client_latency;
+
+ lat->total += elapsed_usec;
+ lat->count++;
+ lat->mean = lat->mean + (elapsed_usec - lat->mean) / lat->count;
+ gf_log (THIS->name, GF_LOG_DEBUG, "Ping latency is %0.6lf ms, "
+ "avg: %0.6lf ms, count:%ld", elapsed_usec / 1000.0,
+ lat->mean / 1000.0, lat->count);
+}
+
int
rpc_clnt_ping_cbk (struct rpc_req *req, struct iovec *iov, int count,
void *myframe)
@@ -184,7 +199,7 @@ rpc_clnt_ping_cbk (struct rpc_req *req, struct iovec *iov, int count,
struct timespec timeout = {0, };
struct timespec now;
struct timespec delta;
- int64_t latency_msec = 0;
+ int64_t latency_usec = 0;
int ret = 0;
int unref = 0;
gf_boolean_t call_notify = _gf_false;
@@ -204,12 +219,10 @@ rpc_clnt_ping_cbk (struct rpc_req *req, struct iovec *iov, int count,
{
timespec_now (&now);
timespec_sub (&local->submit_time, &now, &delta);
- latency_msec = delta.tv_sec * 1000 + delta.tv_nsec / 1000000;
+ latency_usec = delta.tv_sec * 1000000UL +
+ delta.tv_nsec / 1000UL;
- this->client_latency = latency_msec;
- gf_log (THIS->name, GF_LOG_DEBUG,
- "Ping latency is %" PRIu64 "ms",
- latency_msec);
+ _update_client_latency (frame, (double)latency_usec);
if (req->rpc_status == -1) {
unref = rpc_clnt_remove_ping_timer_locked (local->rpc);