Index: sys/sys/ktr.h =================================================================== --- sys/sys/ktr.h (revision 238497) +++ sys/sys/ktr.h (working copy) @@ -75,6 +75,7 @@ #define KTR_INET6 0x10000000 /* IPv6 stack */ #define KTR_SCHED 0x20000000 /* Machine parsed sched info. */ #define KTR_BUF 0x40000000 /* Buffer cache */ +#define KTR_LATENCY 0x80000000 /* latency measurements */ #define KTR_ALL 0x7fffffff /* Trace classes to compile in */ Index: sys/kern/kern_clocksource.c =================================================================== --- sys/kern/kern_clocksource.c (revision 238512) +++ sys/kern/kern_clocksource.c (working copy) @@ -347,12 +347,13 @@ getnextevent(struct bintime *event) static void timercb(struct eventtimer *et, void *arg) { - struct bintime now; + struct bintime now, delta; struct bintime *next; struct pcpu_state *state; #ifdef SMP int cpu, bcast; #endif + uint64_t musec; /* Do not touch anything if somebody reconfiguring timers. */ if (busy) @@ -363,7 +364,11 @@ timercb(struct eventtimer *et, void *arg) next = &state->nexttick; } else next = &nexttick; - binuptime(&now); + binuptime(&now); + delta = now; + bintime_sub(&delta, &state->nextevent); + musec = ((uint64_t)1000000 * (uint32_t)(delta.frac >> 32)) >> 32; + CTR1(KTR_LATENCY, "intr delta: %lu", musec); if (periodic) { *next = now; bintime_add(next, &timerperiod); /* Next tick in 1 period. */