diff options
Diffstat (limited to 'libglusterfs/src')
-rw-r--r-- | libglusterfs/src/glusterfs/common-utils.h | 32 | ||||
-rw-r--r-- | libglusterfs/src/latency.c | 3 |
2 files changed, 33 insertions, 2 deletions
diff --git a/libglusterfs/src/glusterfs/common-utils.h b/libglusterfs/src/glusterfs/common-utils.h index d605beae46..c998d515fa 100644 --- a/libglusterfs/src/glusterfs/common-utils.h +++ b/libglusterfs/src/glusterfs/common-utils.h @@ -1219,4 +1219,36 @@ gf_time(void) return time(NULL); } +/* Return delta value in microseconds. */ + +static inline double +gf_tvdiff(struct timeval *start, struct timeval *end) +{ + struct timeval t; + + if (start->tv_usec > end->tv_usec) + t.tv_sec = end->tv_sec - 1, t.tv_usec = end->tv_usec + 1000000; + else + t.tv_sec = end->tv_sec, t.tv_usec = end->tv_usec; + + return (double)(t.tv_sec - start->tv_sec) * 1e6 + + (double)(t.tv_usec - start->tv_usec); +} + +/* Return delta value in nanoseconds. */ + +static inline double +gf_tsdiff(struct timespec *start, struct timespec *end) +{ + struct timespec t; + + if (start->tv_nsec > end->tv_nsec) + t.tv_sec = end->tv_sec - 1, t.tv_nsec = end->tv_nsec + 1000000000; + else + t.tv_sec = end->tv_sec, t.tv_nsec = end->tv_nsec; + + return (double)(t.tv_sec - start->tv_sec) * 1e9 + + (double)(t.tv_nsec - start->tv_nsec); +} + #endif /* _COMMON_UTILS_H */ diff --git a/libglusterfs/src/latency.c b/libglusterfs/src/latency.c index 15b397c379..8ec89093d4 100644 --- a/libglusterfs/src/latency.c +++ b/libglusterfs/src/latency.c @@ -30,8 +30,7 @@ gf_update_latency(call_frame_t *frame) if (!(begin->tv_sec && end->tv_sec)) goto out; - elapsed = (end->tv_sec - begin->tv_sec) * 1e9 + - (end->tv_nsec - begin->tv_nsec); + elapsed = gf_tsdiff(begin, end); if (frame->op < 0 || frame->op >= GF_FOP_MAXVALUE) { gf_log("[core]", GF_LOG_WARNING, "Invalid frame op value: %d", |