Re: Bug étrange NTP
Le Mon, 20 Jul 2015 10:08:07 +0200
François Boisson <user.anti-spam@maison.homelinux.net> a écrit:
> L'heure matérielle est censée se mettre à jour toutes les 11 minutes. En fait
> tout ce passe comme si la machine s'était gelée pendant ces 89,06s. On
> pourrait peut être imaginer que pour une raison ou une autre, aucune
> interruption n'ait été traitée pendant ce laps de temps. Maids ça me parait
> tiré par les cheveux. La machine est un FitPC cadencé à 499.955MHz
Autre chose qui m'incite à penser à des interruptions non traitées:
Voilà un partie du fichier de log (j'"ai une manie, je je fais des logs de
tout):
Dans l'ordre, Jour, Mois, Heure, Minutes, Seconde, Decalage avec
un autre serveur NTP, temps en secondes depuis le début de la journée
et enfin temps écoulé depuis la ligne suivante.
18 Jul 9 32 24 -0,001192 34344 317
18 Jul 9 37 41 -0,001053 34661 325
18 Jul 9 43 6 -0,000326 34986 318
18 Jul 9 48 24 89,060533 35304 314
18 Jul 9 53 38 89,06075 35618 314
18 Jul 9 58 52 89,060771 35932 318
18 Jul 10 4 10 89,061083 36250 314
18 Jul 10 9 24 89,060588 36564 315
18 Jul 10 14 39 89,060753 36879 403
18 Jul 10 21 22 -0,000297 37282 314
18 Jul 10 26 36 -0,000587 37596 314
On voit bien le souci à 09:48:24, on voit bien que malgré le décalage
de leur système, le temps écoulé entre deux enregistrements restde de l'ordre
de 325s. On voit également que lorsque j'ai remis la machine à l'heure,
il y a un décalage de l'ordre de 89s (403 - 89 = 314). Le script est un
while /bin/true; do
betises diverses
sleep 300
done
sleep appelle xnanosleep qui appelle nanosleep. La norme POSIX indique que
«Configurer la valeur de l'horloge CLOCK_REALTIME avec clock_settime() ne
doit pas avoir d'effet sur les threads bloqués attendant un service de temps
relatif basé sur cette horloge. Cela inclut la fonction nanosleep() ;
En conséquence, ces services de temps doivent expirer lorsque la durée
relative demandée est atteinte, indépendamment de l'ancienne ou
la nouvelle valeur de l'horloge. »
En clair donc, il y eu pour la machine 314s d'interruption horloge entre chaque
ligne, changement d'heure ou pas. Lorsque j'ai changé d'heure, lui faisant rattraper
les 89,06s perdus, on retrouve ces 89,06s dans l'expression du temps écoulé entre deux
mesures (314s vraies + 89s de décalage du à ma remise à l'heure). Par contre, lors
du bug, il n'y a pas de décalage dans le temps écoulé, on aurait du avoir
314-89=225 [À ce stade, je félicite les 5 qui sont encore en train de lire!]. Bref
tout ça pour dire qu'on dirait bien que la machine s'est figée 89s ou que c'est
tout comme. Vraiment mystérieux ce truc.
François Boisson
Reply to: