Sur plusieurs plates-formes de production, nous avons observé des symptômes qui semblent suggérer que l'heure du jour saute périodiquement vers l'avant ou vers l'arrière. Les sauts durent généralement environ 1 seconde, s'annulent généralement (sautent en avant puis en arrière très peu de temps après) et se produisent environ 50 fois par jour. Cette dérive est plus visible pendant les périodes d'utilisation maximale des applications et pendant les périodes d'opérations d'E / S de disque élevées telles que les sauvegardes quotidiennes. Ces dérives affectent notre application sensible sensible en temps réel.
Les systèmes sont des serveurs Oracle Netra X4250 et Netra X4270 exécutant SLES 11SP2 avec un noyau par défaut 3.0.58-0.6.6.
$ cat /sys/devices/system/clocksource/clocksource0/available_clocksource
tsc hpet acpi_pm
$ cat /sys/devices/system/clocksource/clocksource0/current_clocksource
tsc
Nous avons désactivé NTP , mais cela n'a eu aucun effet sur les dérives. Existe-t-il des outils qui mesurent la dérive de l'heure de la journée? Comment éviter cela?
Ce sont des plates-formes de production, et nous ne pouvons pas recréer le problème dans nos laboratoires, donc ma capacité à expérimenter est limitée. Si je le laisse à mes propres appareils, j'écrirai un outil pour mesurer la dérive et peut-être expérimenterai avec une source d'horloge HPET .
ntpdate(8)
ountpd(8)
).Réponses:
Les seuls outils que je connaisse sont les outils NTP qui devraient suffire. Vous n'avez pas à configurer réellement ntpd pour qu'il se synchronise avec une source d'horloge donnée, vous pouvez simplement utiliser l'
-d
optionntpdate
pour récupérer le décalage calculé.Exemple:
-d
est l'option de débogage qui fait le travail NTP sans toucher à l'horloge système.Je ne suis pas trop surpris que vous ne puissiez pas reproduire cela dans des environnements de développement / test car cela est probablement dû à l'horloge matérielle. Si vous avez un support matériel avec quelqu'un, j'essaierais de faire réparer vos machines. Une possibilité consiste à échanger l'une des machines de développement pour cette machine de production, à réparer les anciens systèmes PROD et à la réintroduire en tant que machine de développement pour remplacer celle qui est maintenant dans PROD.
En dehors de cela, la commutation de la source d'horloge matérielle est à peu près tout ce que vous pouvez faire. Si vous ne faites pas ou ne pouvez pas faire l'échange, je vous suggère de suivre la route hpet. Vous pouvez tester si la modification de la source d'horloge perturbe les services système, puis la déployer en production en tant que grêle.
la source
tsc
est basé sur le processeur, il est donc logique qu'une activité plus élevée du processeur déclenche de toute façon un problème avec l'horloge matérielle. Si hpet est assez rapide pour vous, alors vous devrez peut-être l'essayer, faire réparer ou faire l'échange. Ce sont les seules options que je peux voir pour vous.Une solution consiste à utiliser
HPET
Voir aussi Minuterie d'événement haute précision
Pour le définir comme paramètre de démarrage, utilisez
Sur le matériel plus ancien, le
TSC
était souvent instable et était désactivé par le noyau.la source
J'ai écrit un outil plus détaillé pour corréler les mesures d'horloge avec les symptômes de latence présentés par notre application. Cet outil semble exclure ce que je soupçonnais auparavant de gigue dans l'horloge Linux.
Pour faire court, mon hypothèse initiale n'était pas valide. Mais j'ai beaucoup appris sur les horloges Linux grâce aux réponses et aux liens, donc merci à tous ceux qui ont répondu!
la source
L'horloge n'est-elle pas censée être monotone à moins que quelqu'un ne la change? Les sauts en arrière ne devraient pas être possibles. Il doit y avoir quelque chose qui règle l'horloge - un travail cron ou un autre démon (par exemple un appel à
hwclock --adjust
). Je me souviens que ntp lui-même met à jour les statistiques de dérive et les compense régulièrement et si vous ne parvenez pas à exécuter ntp pendant une longue période et à obtenir un énorme décalage, il gâche du temps pendant des jours si vous ne réinitialisez pas/etc/adjtime
. Vous pouvez avoir quelque chose comme ça mis en place - quelque chose qui réajuste périodiquement la dérive du temps (et provoque des sauts).ntp
est en fait destiné à contrer ce problème.la source