gethrtime(3C) manual page
Table of Contents
gethrtime, gethrvtime - get high resolution time
#include
<sys/time.h>
hrtime_t gethrtime(void);
hrtime_t gethrvtime(void);
MT-Safe
gethrtime() returns the current high-resolution real time. Time
is expressed as nanoseconds since some arbitrary time in the past; it is
not correlated in any way to the time of day, and thus is not subject to
resetting, drifting, etc. via adjtime(2)
or settimeofday(3C)
. The hi-res timer
is ideally suited to performance measurement tasks, where cheap, accurate
interval timing is required.
gethrvtime() returns the current high-resolution
LWP virtual time, expressed as total nanoseconds of execution time.
gethrtime()
and gethrvtime() both return an hrtime_t, which is a 64-bit (long long)
signed integer.
The following code fragment measures the average
cost of getpid(2)
:
hrtime_t start, end;
int i, iters = 100;
start = gethrtime();
for (i = 0; i < iters; i++)
getpid();
end = gethrtime();
printf("Avg getpid() time = %lld nsec\n", (end - start) / iters);
adjtime(2)
, gettimeofday(3C)
, settimeofday(3C)
Although the
units of hi-res time are always the same (nanoseconds), the actual resolution
is hardware dependent. Hi-res time is guaranteed to be monotonic (it won’t
go backward, it won’t periodically wrap) and linear (it won’t occasionally
speed up or slow down for adjustment, like the time of day can), but not
necessarily unique: two sufficiently proximate calls may return the same
value.
Table of Contents