Leap second day today

в 6:35, , рубрики: leap second, ntp, ntpd, секунда координации, системное администрирование, метки: , , ,

Leap second day today

В предыдущем посте я уже затрагивал тему секунды координации и подготовки к ней. Так как сегодня тот самый день, когда она будет внесена, я хотел бы пройтись по этой теме еще раз, чтобы напомнить о том, как убедиться в том, что эта ситуация будет корректно обработана. Добро пожаловать под кат.

И так, корректно сконфигурированные Stratum 1 ntp-сервера уже несколько часов рассылают соответствующие анонсы, соответственно, ситуация уже «устаканилась», и теперь при диагностике вашего ntp-сервера или клиента вы получите ясную картину.

Проверка анонса

В первую очередь, проверим, что ваше программное обеспечение корректно получило и обработало анонс секунды координации. Самым универсальным способом будет анализ ntp-трафика, используя, например, tcpdump. В результате вы увидите что-то такое:


11:56:41.692324 IP (tos 0xb8, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 76)
    192.168.134.4.123 > 192.168.134.86.123: NTPv3, length 48
        Server, Leap indicator: +1s (64), Stratum 1 (primary reference), poll 4s, precision -21
        Root Delay: 0.000000, Root dispersion: 0.000000, Reference-ID: GPS^@
          Reference Timestamp:  3550020995.728319585 (2012/06/30 11:56:35)
          Originator Timestamp: 3550021001.680305123 (2012/06/30 11:56:41)
          Receive Timestamp:    3550021001.692303419 (2012/06/30 11:56:41)
          Transmit Timestamp:   3550021001.692318439 (2012/06/30 11:56:41)
            Originator - Receive Timestamp:  +0.011998336
            Originator - Transmit Timestamp: +0.012013342

Обратите внимание на Leap indicator: — если все хорошо, то в этом поле будет написано "+1s".
Если же вы используете классический ntpd, то можете проверить его состояние выполнив ntpq -c rv — наличие в ответе leap_add_sec или leap=01 означает, что все OK.
Ошибки в данном случае могут быть вызваны не очень удачным выбором ntp-серверов для синхронизации. К сожалению, с выбором легко ошибиться. Среди 13 наиболее известных российских Stratum 1 серверов на данный момент только 7 корректно анонсируют секунду координации.

Краткий обзор российских Stratum 1 ntp-серверов

Сервер Наличие анонса на момент написания поста
ntp.aas.ru -
ntp.ab2b.ru +
time.bakulev.ru -
ntp.ix.ru -
ntp.mobatime.ru -
ntp0.ntp-servers.net +
ntp1.ntp-servers.net +
ntp2.ntp-servers.net +
ntp.sonur.ru -
ntp1.vniiftri.ru +
ntp2.vniiftri.ru +
ntp3.vniiftri.ru +
ntp4.vniiftri.ru -

Прошу использовать указанные выше сервера в соответствии Rules of Engagement и частными условиями предоставления услуг этих серверов.

Проверка ядра

Если у вас unix-подобная операционная система, стоит проверить, смог ли ntpd «донести» до ее ядра информацию о том, что в конце суток будет лишняя секунда. Дело в том, что ntpd может донести эту информацию до ядра, если используется kernel time discipline, то есть набор вызовов ntp_*.
В случае же, если вы запустили ntpd с ключем -x, указали директивой tinker step step равный 0 или больший 0,5 с, или же явно запретили kernel time discipline директивой disable kernel, kernel time discipline не будет использоваться, и лишняя секунда в сутках для ядра будет сюрпризом.
Проверить это можно запустив ntpdc -c kern или ntptime:


$ ntpdc -c kern
pll offset:           2.7e-08 s
pll frequency:        23.073 ppm
maximum error:        0.001501 s
estimated error:      0 s
status:               2011  pll ins nano
pll time constant:    3
precision:            1e-09 s
frequency tolerance:  500 ppm

$ /usr/sbin/ntptime
ntp_gettime() returns code 1 (INS)
  time d3990b27.8eedaa5c  Sat, Jun 30 2012 12:20:39.558, (.558314918),
  maximum error 2001 us, estimated error 0 us
ntp_adjtime() returns code 1 (INS)
  modes 0x0 (),
  offset 0.026 us, frequency 23.073 ppm, interval 1 s,
  maximum error 2001 us, estimated error 0 us,
  status 0x2011 (PLL,INS,NANO),
  time constant 3, precision 0.001 us, tolerance 500 ppm,

Ключевым моментом здесь является наличие флага ins.

Автор: timothyz

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js