Linux clock_gettime(CLOCK_MONOTONIC) strange non-monotonic behavior Linux clock_gettime(CLOCK_MONOTONIC) strange non-monotonic behavior linux linux

Linux clock_gettime(CLOCK_MONOTONIC) strange non-monotonic behavior


man clock_gettime says:

CLOCK_MONOTONIC_RAW (since Linux 2.6.28; Linux-specific)

Similar to CLOCK_MONOTONIC, but provides access to a raw hardware-based time that is not subject to NTP adjustments.

Since CLOCK_MONOTONIC_RAW is not subject of NTP adjustments, I guess CLOCK_MONOTONIC could be.

We had similar problems with Redhat Enterprise 5.0 with 2.6.18 kernel and some specific Itanium processor. We couldn't reproduce it with other processor on the same OS. It was fixed in RHEL 5.3 with slightly newer kernel and some Redhat patches.


Looks like an instance of

commit 0696b711e4be45fa104c12329f617beb29c03f78Author: Lin Ming <ming.m.lin@intel.com>Date:   Tue Nov 17 13:49:50 2009 +0800timekeeping: Fix clock_gettime vsyscall time warpSince commit 0a544198 "timekeeping: Move NTP adjusted clockmultiplier to struct timekeeper" the clock multiplier of vsyscall is updated withthe unmodified clock multiplier of the clock source and not with theNTP adjusted multiplier of the timekeeper.This causes user space observerable time warps:new CLOCK-warp maximum: 120 nsecs,  00000025c337c537 -> 00000025c337c4bf

See here for a patch. This was included into 2.6.32.19, but may not have been backported by the Debian team(?). You should check it out.


Try CLOCK_MONOTONIC_RAW.