Question

Folks, dans ma demande j'utilise clock_gettime(CLOCK_MONOTONIC) afin de mesurer le temps delta entre les cadres (une approche typique gamedev) et de temps en temps, je suis face à un comportement étrange de clock_gettime(..) - valeurs retournées de temps en temps ne sont pas monotones (c.-à-prev. temps est plus grand que l'heure).

À l'heure actuelle, si le paradoxe d'un tel que je passe simplement sauter la trame en cours et commencer à traiter la suivante.

La question est de savoir comment cela peut-il être possible? Est-ce un bogue dans la mise en œuvre Linux POSIX clock_gettime? J'utilise Ubuntu Server Edition 10,04 (noyau 2.6.32-24, x86_64), gcc-4.4.3.

Était-ce utile?

La solution

man clock_gettime dit:

  

CLOCK_MONOTONIC_RAW (depuis Linux 2.6.28, Linux spécifique)

     

Tout comme CLOCK_MONOTONIC, mais donne accès à un temps basé sur le matériel brut qui ne fait pas l'objet d'ajustements NTP.

Depuis CLOCK_MONOTONIC_RAW est pas l'objet d'ajustements NTP, je suppose que CLOCK_MONOTONIC pourrait être.

Nous avons eu des problèmes similaires avec Redhat Enterprise 5.0 avec 2.6.18 noyau et certains processeurs Itanium spécifique. Nous ne pouvions pas le reproduire avec d'autres processeurs sur le même système d'exploitation. Il a été corrigé dans RHEL 5.3 avec un noyau un peu plus récent et quelques correctifs Redhat.

Autres conseils

On dirait une instance de

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

Voir pour un patch. Cela a été inclus dans 2.6.32.19, mais peut-être pas été rétroportés par l'équipe Debian (?). Vous devriez vérifier.

Essayez CLOCK_MONOTONIC_RAW.

Bien sûr, sonne comme un bug pour moi. Peut-être que vous devez le signaler dans bug tracker de Ubuntu.

Il est un bug linux. Pas ajustment dans une horloge peut monotones le faire reculer. Vous utilisez un noyau très ancien et une distribution très ancienne.

Edit: êtes-vous sûr que vous devez sauter le cadre? Si vous appelez clock_gettime à nouveau, ce qui se passe?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top