Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Linux clock_gettime(CLOCK_MONOTONIC) strange non-monotonic behavior

Tags:

linux

gcc

clock

Folks, in my application I'm using clock_gettime(CLOCK_MONOTONIC) in order to measure the delta time between frames (a typical approach in gamedev) and from time to time I'm facing a strange behavior of clock_gettime(..) - returned values occasionally are not monotonic (i.e prev. time is bigger than current time).

Currently, if such a paradox happens I simply skip the current frame and start processing the next one.

The question is how can this be possible at all? Is it a bug in Linux POSIX implementation of clock_gettime? I'm using Ubuntu Server Edition 10.04 (kernel 2.6.32-24, x86_64), gcc-4.4.3.

like image 999
pachanga Avatar asked Sep 07 '10 09:09

pachanga


1 Answers

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.

like image 169
Dmitry Yudakov Avatar answered Oct 05 '22 05:10

Dmitry Yudakov