Domanda

La gente, nella mia applicazione sto usando clock_gettime(CLOCK_MONOTONIC) al fine di misurare il tempo delta tra fotogrammi (un approccio tipico gamedev) e di tanto in tanto io sono di fronte uno strano comportamento di clock_gettime(..) - valori restituiti a volte non sono monotona (vale a dire prec. tempo di è più grande del tempo corrente).

Attualmente, se un tale paradosso avviene semplicemente saltare il frame corrente e avviare l'elaborazione successiva.

La domanda è: come può essere possibile a tutti? Si tratta di un bug nell'implementazione di Linux POSIX di clock_gettime? Sto utilizzando Ubuntu Server Edition 10.04 (kernel 2.6.32-24, x86_64), gcc-4.4.3.

È stato utile?

Soluzione

man clock_gettime dice:

  

CLOCK_MONOTONIC_RAW (a partire da Linux 2.6.28; Linux-specifico)

     

Simile a CLOCK_MONOTONIC, ma fornisce l'accesso a un tempo grezzo basata su hardware che non è soggetto ad aggiustamenti NTP.

Dato CLOCK_MONOTONIC_RAW non è oggetto di rettifiche di NTP, immagino CLOCK_MONOTONIC potrebbe essere.

Abbiamo avuto problemi simili con Redhat Enterprise 5.0 con 2.6.18 del kernel e alcuni specifici del processore Itanium. Non siamo riusciti a riprodurlo con un altro processore sullo stesso sistema operativo. E 'stato fissato in RHEL 5.3 con un po' più recente kernel e alcune patch RedHat.

Altri suggerimenti

appare come un'istanza di

commit 0696b711e4be45fa104c12329f617beb29c03f78
Author: Lin Ming <ming.m.lin@intel.com>
Date:   Tue Nov 17 13:49:50 2009 +0800

timekeeping: Fix clock_gettime vsyscall time warp

Since commit 0a544198 "timekeeping: Move NTP adjusted clock
multiplier to struct timekeeper" the clock multiplier of vsyscall is updated with
the unmodified clock multiplier of the clock source and not with the
NTP adjusted multiplier of the timekeeper.

This causes user space observerable time warps:
new CLOCK-warp maximum: 120 nsecs,  00000025c337c537 -> 00000025c337c4bf

qui per una patch. Questo è stato incluso nella 2.6.32.19, ma potrebbe non essere stata backport dal team Debian (?). Si dovrebbe controllare.

Prova CLOCK_MONOTONIC_RAW.

Certo suona come un insetto per me. Forse si dovrebbe riferire in di Ubuntu bug tracker .

E 'un bug di Linux. No ajustment in un orologio monotona può farlo andare all'indietro. Stai usando un kernel molto vecchio e una distribuzione molto vecchio.

Edit: Sei sicuro è necessario saltare il telaio? Se si chiama clock_gettime ancora una volta, che cosa succede?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top