Seconde Intercalaire NTP : leap second, smear et retour d'expérience

Par Richard DEMONGEOT | 20 avril 2026 | Temps de lecture : 12 min

La seconde intercalaire (en anglais leap second) est l'un des mécanismes les plus subtils et les plus redoutés du protocole NTP. Depuis 1972, elle compense le lent ralentissement de la rotation terrestre pour maintenir UTC en phase avec le temps astronomique UT1. Pour un opérateur de serveurs NTP, chaque événement a été une répétition de crise : 24 heures d'alerte, un plan de bascule, et des logs à scruter pendant les 48 heures suivantes.

Cette page couvre ce que tout opérateur ou administrateur NTP doit comprendre : l'origine du mécanisme, l'historique des 27 secondes intercalaires ajoutées depuis 1972, la façon dont NTP les signale, les deux approches concurrentes (step et smear), le comportement de chrony et ntpd, et l'échéance d'abolition votée en 2022.

1. Pourquoi la Terre nous oblige à ajouter des secondes

UTC (Temps Universel Coordonné) est défini depuis 1972 comme le compte des secondes SI émises par un ensemble d'horloges atomiques. UT1, lui, est le temps défini par la rotation réelle de la Terre, mesuré par interférométrie VLBI sur des quasars lointains. Les deux divergent parce que la Terre ralentit : frottement des marées, redistribution des masses internes, interactions noyau-manteau. Sur le long terme, UT1 prend du retard sur UTC d'environ 1 à 2 ms par jour en moyenne — une seconde accumulée tous les 12 à 24 mois.

L'IERS (International Earth Rotation Service) surveille cette dérive et, quand elle approche 0,9 seconde, publie un « Bulletin C » annonçant une seconde intercalaire six mois à l'avance. L'événement prend place au choix le 30 juin ou le 31 décembre à 23:59:59 UTC : la seconde 23:59:60 est insérée (très rare cas d'une minute à 61 secondes), puis 00:00:00 du jour suivant.

2. Les 27 secondes intercalaires depuis 1972

De 1972 à fin 2016, 27 secondes intercalaires ont été ajoutées. Toutes positives. Les cinq dernières, qui sont aussi celles vécues par l'infrastructure RDEM :

Date UTCJour local FranceNombre total depuis 1972
2005-12-31 23:59:601er janvier 2006 à 00:59:6023
2008-12-31 23:59:601er janvier 2009 à 00:59:6024
2012-06-30 23:59:601er juillet 2012 à 01:59:6025
2015-06-30 23:59:601er juillet 2015 à 01:59:6026
2016-12-31 23:59:601er janvier 2017 à 00:59:6027

Depuis le 1er janvier 2017, la différence TAI − UTC est restée fixée à 37 secondes. Aucune seconde intercalaire n'a été ajoutée depuis 9 ans — un record historique dû à l'accélération inattendue de la rotation terrestre.

3. Comment NTP signale une seconde intercalaire (Leap Indicator)

Le protocole NTP (RFC 5905) réserve les deux bits de poids fort du premier octet du paquet au champ Leap Indicator (LI). Quatre valeurs possibles :

Valeur LISignificationUsage
00Aucun avertissementFonctionnement normal (99,9 % du temps)
01La dernière minute du jour aura 61 secondesAnnoncé 24 h avant l'ajout d'une seconde
10La dernière minute du jour aura 59 secondesAnnoncé pour un retrait (jamais utilisé à ce jour)
11Horloge non synchronisée (alarme)Équivalent de stratum 16

Quand un serveur Stratum 1 reçoit l'information (via son refclock GPS/DCF77, ou par fichier leap-seconds.list signé par le NIST), il commence à propager LI=01 dans ses réponses 24 heures avant l'échéance. Les clients chrony et ntpd lisent ce bit à chaque poll, et planifient l'insertion locale.

4. Step vs smear : deux écoles

Quand 23:59:60 arrive, il faut choisir ce qui se passe côté système :

4.1 Approche step (insertion d'une seconde 23:59:60)

Conforme à la norme : le noyau insère une vraie minute à 61 secondes. C'est le comportement par défaut de chrony et ntpd avec leapsecmode=system/step sur Linux. Avantage : l'horloge reste strictement alignée sur UTC. Inconvénient : deux timestamps identiques consécutifs, et toute application qui fait timespec.tv_sec - previous peut obtenir 0, ce qui casse les timers à base de secondes.

4.2 Approche smear (étalement)

Popularisée par Google en 2011 : plutôt qu'un saut d'une seconde, on ralentit l'horloge de quelques ppm sur une fenêtre de 20 à 24 heures autour de l'événement. Chaque tick dure 1.000011574 s au lieu de 1.0 s exactement — la seconde est absorbée progressivement. Avantage : aucun timestamp non monotone, aucun timer cassé. Inconvénient : pendant la fenêtre de smear, l'horloge est jusqu'à 0,5 seconde décalée d'UTC, ce qui peut être visible depuis une source externe non-smearée.

4.3 Qui fait quoi en 2026

OpérateurApprocheFenêtre
Google (time.google.com)Smear24 h autour de minuit UTC
AWS (time.aws.com)Smear24 h autour de minuit UTC
Facebook / MetaSmear (linéaire 18 h)18 h centré sur l'événement
Cloudflare (time.cloudflare.com)Step (conforme)
NIST / time.nist.govStep
NTP Pool (pool.ntp.org)Variable selon l'opérateur
RDEM Systems (ntp.rdem-systems.com)Step (conforme RFC)

5. chrony : leapsecmode, smoothtime, leapsectz

leapsecmode a quatre valeurs, et le smearing n'en fait pas partie — c'est une directive distincte, smoothtime, qui décrit ce que le serveur sert à ses clients, pendant que leapsecmode décrit ce qu'il fait de sa propre horloge. Confondre les deux, c'est ce que faisait cette page.

# /etc/chrony/chrony.conf

# Mode recommandé pour un serveur Stratum 2+ en production :
# déléguer au noyau Linux l'insertion de la seconde
leapsecmode system

# Alternative 1 : step d'une seconde appliqué par chronyd lui-même
# leapsecmode step

# Alternative 2 : correction progressive par slew
# leapsecmode slew

# Alternative 3 : aucune correction de l'horloge locale
# leapsecmode ignore

# Pour tester sans attendre le prochain événement : fichier de liste leap
leapsectz right/UTC
leapseclist /usr/share/zoneinfo/leap-seconds.list

Le smearing est autre chose, et se configure à côté. La documentation de chrony donne cette combinaison, et explique pourquoi la première ligne est nécessaire : sans elle, le step de l'horloge locale remettrait le lissage à zéro.

# Smear : étaler la seconde sur ce que le serveur SERT
leapsecmode slew
maxslewrate 1000
smoothtime 400 0.001024 leaponly

leaponly limite le lissage aux événements leap : les écarts et dérives ordinaires ne sont pas lissés. Avec smoothtime 400 0.001024, la seconde est absorbée sur environ dix-sept heures : la fréquence monte jusqu'à 400 ppm puis redescend, et l'aire sous cette rampe vaut la seconde à rattraper. Pendant la fenêtre, l'horloge servie s'écarte progressivement d'UTC, au maximum d'une demi-seconde — c'est l'ordre de grandeur des fenêtres de 24 h employées par Google et AWS.

6. ntpd : leapfile, tinker step, kernel mode

ntpd (référence ou ntpsec) lit le fichier leap-seconds.list maintenu par le NIST :

# /etc/ntp.conf

# Fichier de référence signé, mis à jour par l'IERS/NIST
leapfile /usr/share/zoneinfo/leap-seconds.list

# Comportement par défaut : step d'une seconde conforme
# Désactiver si besoin avec :
# tinker step 0

# Pour bénéficier du mode noyau Linux sur sync :
# enable kernel

Le fichier leap-seconds.list doit être mis à jour régulièrement — il expire 6 mois après son émission. Automatisez via cron :

0 3 * * 1 wget -q -O /usr/share/zoneinfo/leap-seconds.list https://data.iana.org/time-zones/data/leap-seconds.list

7. Ce que RDEM a observé depuis 2005

Retour d'expérience opérateur. Notre infrastructure NTP tourne en continu depuis 2005 et a traversé cinq secondes intercalaires (2005, 2008, 2012, 2015, 2016). Les observations qui reviennent à chaque événement, peu importe l'année :
  • La veille : nos serveurs Stratum 1 commencent à annoncer LI=01 à 00:00:00 UTC (24 heures avant). C'est le moment d'éviter les déploiements importants. Les clients bien configurés propagent ensuite l'annonce en cascade.
  • L'instant T : à 23:59:60 UTC, les Stratum 1 insèrent la seconde via leur noyau. Les Stratum 2 qui les suivent l'appliquent dans les secondes qui suivent, avec un offset transitoire mesurable sur 30 à 120 secondes.
  • Les 24 h suivantes : les logs remontent quelques faux positifs « clock stepped » sur des clients mal synchronisés. Les applications les plus fragiles à surveiller ont toujours été les bases de données (corruption d'index temporel rare mais documentée chez PostgreSQL pre-9.6 et MySQL pre-5.6) et les tâches cron à cadence seconde.
  • Les clients IoT : systématiquement les moins propres. Une partie des appareils grand public ignorent LI et se resynchronisent brutalement après coup — le fameux saut visible d'une seconde dans le rendu d'une horloge Wi-Fi le 1er janvier au matin.
  • Le tooling : chronyc tracking et ntpq -c rv restent les seules commandes indispensables pendant l'événement. Guardez un terminal ouvert dessus entre 23:59:00 et 00:02:00 UTC.

L'événement 2016-12-31 est celui qui nous a le plus marqué : c'est le dernier à date et celui où les outils grand public (smartphones, box internet) avaient le mieux convergé vers un comportement correct. L'écosystème est plus mûr qu'en 2005 ou 2008, où nous devions encore expliquer à des clients ce qu'était LI=01 dans leurs logs.

8. Préparer le prochain événement

Même sans annonce à l'horizon, maintenir la capacité à gérer un leap second fait partie de l'hygiène NTP :

  1. Vérifier le fichier leap-seconds.list sur chaque serveur : head /usr/share/zoneinfo/leap-seconds.list doit montrer une date d'expiration dans le futur.
  2. Tester le mode leap sur un serveur de staging en injectant manuellement un fichier leap avec une date proche : les logs doivent montrer l'anticipation correcte.
  3. Documenter la politique (step ou smear) pour chaque segment d'infrastructure, et s'assurer qu'un même client ne mélange pas les deux en amont.
  4. Auditer les applications critiques : toute logique qui fait if (new_ts == old_ts) ou assert ts_diff > 0 doit être revue.
  5. Planifier une fenêtre d'observation autour de la date annoncée si un événement est déclenché. La probabilité actuelle d'un leap second d'ici 2035 reste faible mais non nulle.

9. L'abolition de 2035 : quoi anticiper

En novembre 2022, la 27e Conférence Générale des Poids et Mesures (CGPM) a voté la résolution qui abolit la seconde intercalaire d'ici 2035. Le texte prévoit :

  • Maintenir le mécanisme jusqu'en 2035 au plus tard.
  • Élargir la tolérance UTC − UT1 actuelle (0,9 s) à une valeur significativement plus grande (non encore fixée — 100 s est évoqué, qui donnerait un événement d'ajustement tous les 100 à 200 ans).
  • Laisser le temps aux opérateurs de télécommunications, de navigation satellitaire et de finance de migrer leurs chaînes.

Pour NTP, cela ne change rien au protocole — le champ Leap Indicator reste en place pour les archives et les systèmes legacy. Simplement, son activation deviendra exceptionnelle puis nulle. Les implémentations chrony et ntpd continueront à supporter le mécanisme pour des raisons de compatibilité pendant plusieurs décennies.

Ressources et références

Questions fréquentes

Qu'est-ce qu'une seconde intercalaire en NTP ?

Une seconde intercalaire (leap second) est une seconde supplémentaire ajoutée à UTC pour compenser le ralentissement progressif de la rotation de la Terre. Quand la différence entre UTC (temps atomique) et UT1 (temps astronomique) approche 0,9 seconde, l'IERS annonce une correction. NTP signale l'événement 24 heures à l'avance via deux bits dans le champ « Leap Indicator » (LI) du paquet : 01 pour ajouter une seconde, 10 pour en retirer une (jamais utilisé en pratique).

Combien y a-t-il eu de secondes intercalaires depuis 1972 ?

27 secondes intercalaires ont été ajoutées entre 1972 et fin 2016. Toutes ont été positives (l'ajout d'une seconde) ; aucune soustraction n'a été nécessaire. La dernière est intervenue le 31 décembre 2016 à 23:59:60 UTC. Depuis, la rotation terrestre s'est étonnamment accélérée et aucune seconde intercalaire n'a été ajoutée. La résolution CGPM de novembre 2022 prévoit l'abolition du système d'ici 2035.

Qu'est-ce que le leap smear ?

Le leap smear (« étalement de la seconde intercalaire ») est une technique alternative au saut d'une seconde brutal. Au lieu d'une minute à 61 secondes, l'horloge est ralentie très légèrement sur une fenêtre de 20 à 24 heures autour de l'événement, absorbant la seconde progressivement. Google (depuis 2011) et AWS utilisent cette approche avec une fenêtre de 24 heures. L'avantage : les applications ne rencontrent jamais de timestamp non monotone. L'inconvénient : pendant la fenêtre, l'horloge s'écarte jusqu'à 0,5 seconde de l'UTC officielle.

Comment chrony gère-t-il les secondes intercalaires ?

La directive 'leapsecmode' de chrony 4.x a quatre valeurs, et elle ne décrit que l'horloge locale du serveur : (1) 'system' (défaut) délègue au noyau Linux, qui recule l'horloge d'une seconde à 00:00:00 UTC ; (2) 'step' fait appliquer le saut par chronyd lui-même ; (3) 'slew' corrige progressivement ; (4) 'ignore' n'applique aucune correction. Le smearing n'est pas une valeur de 'leapsecmode' : c'est la directive 'smoothtime', qui porte sur l'heure SERVIE aux clients. La documentation de chrony recommande de les combiner ainsi : 'leapsecmode slew', 'maxslewrate 1000', 'smoothtime 400 0.001024 leaponly' — la première ligne est nécessaire, sinon le step de l'horloge locale remet le lissage à zéro.

La seconde intercalaire va-t-elle disparaître ?

Oui. La 27ème Conférence Générale des Poids et Mesures (CGPM) a voté en novembre 2022 l'abolition de la seconde intercalaire d'ici 2035. La tolérance actuelle de 0,9 seconde entre UTC et UT1 sera élargie à une valeur significativement supérieure (non encore fixée). Pour NTP, cela signifie que l'indicateur LI restera dans le protocole mais ne sera plus activé en routine. Les opérateurs doivent continuer à supporter le mécanisme pour les archives et les systèmes qui ne seront pas migrés.