[précédent] [Résumé] [Copyright] [Table des matières] [suivant]

Réglage fin de l'horloge sur un système linux - Chapitre 3
Méthodologie détaillée


En fait, il suffit de procéder à plusieurs étapes pour pouvoir transformer le plus humble des 386SX en horloge présentant une dérive de l'ordre du dixième de seconde par jour.

Pour utiliser hwclock, il est préférable de passer par /dev/rtc et d'avoir intégré la gestion de l'horloge RTC[8]

Je vous conseille d'enregistrer les modifications que vous faites à tout ce qui à trait à l'horloge dans un fichier pour pouvoir essayer de réparer les dégats en cas de fausse manipulation. Par ailleurs, enregistrer via adjtimex -u -l=/var/log/clocks.log les ajustements que vous faites vous aidera à corriger une dérive de long terme qu'il serait malcommode de circonvenir par les moyens détaillés ici.[9]


3.1 Mise au point sur les commandes

adjtimex n'a d'influence que sur l'horloge système.[10]

hwclock est la seule façon d'affecter l'horloge CMOS.

Les deux commandes utilisent le fichier /etc/adjtime.

Les options --systohc et --hctosys de hwclock permettent, respectivement, de copier l'horloge système dans l'horloge CMOS et de faire la manipulation inverse : CMOS vers système. Elles permettent par ailleurs de fixer la même heure pour les 2 horloges à quelques micro-secondes près.

Evitez d'utiliser date --set pour régler l'heure système.


3.2 Etalonner l'horloge CMOS avec hwclock

Il peut sembler paradoxal de passer un temps important à régler l'horloge CMOS alors que l'horloge système est plus précise mais, cela est nécessaire pour deux raisons. Tout d'abord cela permet d'affiner la précision de l'horloge système en ayant un moyen commode de déterminer les bonnes valeurs de «tick» et «freq» et d'autre part, le circuit qui gère l'horloge CMOS est aussi responsable du signal 100 Hz qui sert de base à l'horloge système. Donc la connaissance acquise sur l'horloge CMOS est directement utile pour régler la fréquence de l'horloge système. Enfin, cet étalonnage précis de l'horloge CMOS va permettre de conserver l'heure avec précision lors des arrêts ou «reboot» de la machine.

Pour le détail syntaxique des commandes je vous renvoie à Plan d'action, section 2.2. Je vais détailler ici le "qu'est ce qu'on fait" et le "pourquoi on le fait" plutôt que le "comment" puisque les pages man répondent déja fort complètement à cette dernière question.

Passons maintenant au détail et à la justification des manipulations proposées.


3.2.1 Premier jour

L'installation de hwclock est très probablement déja faite sur votre système car il fait partie de util-linux. Par contre adjtimex a moins de chance d'être installé par défaut. L'option --debug de hwclock n'est pas nécessaire, c'est juste que j'ai trouvé intéressant de voir comment le système s'y prend.

Si vous ne savez pas accéder au réglage de l'heure via le BIOS, c'est sans importance, cette étape n'est pas indispensable, elle n'est là que pour éviter des gags possibles si jamais la dérive indiquée dans /etc/adjtime était par trop délirante. Normalement en respectant l'ordre proposé pour les manipulations même si vous débutiez avec une dérive de 3 jours par jour (!) vous obtiendrez quand même une bonne précision en une semaine.

La commande hwclock a un double but : le premier est bien évidemment de synchroniser l'horloge CMOS sur l'horloge de référence, le deuxième est de créer le fichier /etc/adjtime s'il n'existait pas déja. La valeur de dérive[11] est très probablement irréaliste. Ce qui nous intéresse ici, c'est la deuxième ligne qui enregistre le moment (en seconde depuis le 1/1/1970 à 0h00) ou l'heure a été réglée pour la dernière fois.

Si vous n'avez pas su régler l'horloge CMOS via le BIOS, votre heure système est alors fausse, réglez la donc avec hwclock --hctosys --utc


3.2.2 Deuxième jour

Du strict point de vue de l'obtention d'une horloge précise, les manipulations indiquées pour le deuxième jour ne servent à rien ! Elles ne sont là que pour éviter de laisser les deux horloges diverger à cause d'une valeur inexploitable de la dérive. On peut en fait les faire au bout de quelques heures, le but étant simplement de déterminer l'ordre de grandeur de la dérive quotidienne et de prendre une mesure corrective si cette dérive est vraiment importante.[12]

La commande adjtimex finale ne sert qu'à enregistrer les valeurs courantes des divers paramètres liées aux horloges[13]


3.2.3 Septième jour

C'est là que tout se passe !

On règle de nouveau l'horloge CMOS grace à l'horloge de référence. Cela à pour conséquence de mettre à jour l'horloge CMOS bien sur mais aussi et, c'est ce qui nous intéresse, la dérive est déterminée avec une bonne précision.[14]

On profite de ce que l'horloge CMOS vient d'être mise à l'heure pour régler l'horloge système. La partie la plus longue du réglage est faite[15] ; l'horloge CMOS est étalonnée et elle est à l'heure puisqu'on vient de la régler. Elle va donc pouvoir nous servir d'horloge de référence pour la suite des opération. En effet, même si elle a une dérive importante, on peut grace à elle déterminer l'heure de référence : la deuxième ligne de /etc/adjtime nous indique quand elle a été réglée et la dérive quotidienne est indiquée dans ce même fichier. Ces deux éléments et le temps écoulé depuis qu'elle a été réglée (ce dernier étant obtenu grace à l'horloge système) permette de calculer l'heure de référence.


3.3 Régler l'horloge système avec adjtimex

L'horloge système peut se régler très finement (de l'ordre du millionème de seconde de dérive par jour) grace au paramêtres «tick» et «freq». Notre objectif est maintenant de déterminer ces valeurs afin que l'horloge système évolue à la même vitesse que l'horloge CMOS corrigée de sa dérive quotidienne. Il y a, au moins, deux stratégies possible pour arriver à ce résultat. La première est de copier la méthode employée pour régler l'horloge CMOS : attendre suffisament longtemps pour connaître la dérive quotidienne. La deuxième est de se servir de l'horloge CMOS comme étalon.

Voici pourquoi j'ai préféré la seconde méthode :

L'inconvénient est que si vous vous êtes planté pour l'horloge CMOS, vous allez provoquer la même erreur pour l'horloge système.

La commande adjtimex -u -c=22 -i=100 vous permet d'obtenir 20 valeurs de ces paramêtres. Les nombres 22 et 100 dans cette commande n'ont rien de scientifiquement déterminés, ils ont été choisis sur les critères suivants :

Je vous déconseille d'utiliser adjtimex -a à la place, en effet celui ci ne retient qu'une valeur (la dernière) et non la moyenne des valeurs obtenues.


[précédent] [Résumé] [Copyright] [Table des matières] [suivant]
Réglage fin de l'horloge sur un système linux
v. : 0.9, le 22 septembre 1999
Laurent PICOULEAU lcrpic@a2points.com