ntpd vs. systemd-timesyncd - Como conseguir sincronização de NTP confiável?

20

Quando eu consultar o status do daemon NTP com ntpdc -c sysinfo , recebo a seguinte saída:

system peer:          0.0.0.0
system peer mode:     unspec
leap indicator:       11
stratum:              16
precision:            -20
root distance:        0.00000 s
root dispersion:      12.77106 s
reference ID:         [73.78.73.84]
reference time:       00000000.00000000  Thu, Feb  7 2036  7:28:16.000
system flags:         auth monitor ntp kernel stats
jitter:               0.000000 s
stability:            0.000 ppm
broadcastdelay:       0.000000 s
authdelay:            0.000000 s

Isso indica que a sincronização do NTP falhou. No entanto, a hora do sistema é precisa com precisão de 1 segundo. Quando eu corri meu sistema sem conexão de rede pelo mesmo período que eu fiz agora, o tempo do sistema iria desviar ~ 10s.

Esse comportamento sugere que o sistema tenha outra maneira de sincronizar o tempo. Percebi que há também systemd-timesyncd.service (com arquivo de configuração em /etc/systemd/timesyncd.conf ) e timedatectl status me dá o tempo correto:

      Local time: Thu 2016-08-25 10:55:23 CEST
  Universal time: Thu 2016-08-25 08:55:23 UTC
        RTC time: Thu 2016-08-25 08:55:22
       Time zone: Europe/Berlin (CEST, +0200)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: yes
 Last DST change: DST began at
                  Sun 2016-03-27 01:59:59 CET
                  Sun 2016-03-27 03:00:00 CEST
 Next DST change: DST ends (the clock jumps one hour backwards) at
                  Sun 2016-10-30 02:59:59 CEST
                  Sun 2016-10-30 02:00:00 CET

Então, minha pergunta é qual é a diferença entre os dois mecanismos? Um deles é obsoleto? Eles podem ser usados em paralelo? Em qual devo confiar quando quero consultar o status de sincronização do NTP?

(Note que eu tenho um sistema diferente (em uma rede diferente) para o qual ambos os métodos indicam sucesso e produzem o tempo correto.)

    
por a_guest 25.08.2016 / 11:08

2 respostas

17

systemd-timesyncd é basicamente uma pequena implementação NTP apenas para clientes, mais ou menos empacotada com versões mais recentes do systemd. É mais leve do que um ntpd completo, mas suporta apenas sincronização de horário - ou seja, ele não pode atuar como um servidor NTP para outras máquinas. Pretende substituir o ntpd para clientes.

Você não deve usar ambos em paralelo, já que, em teoria, eles poderiam escolher diferentes timeservers que tivessem um pequeno atraso entre eles, fazendo com que o relógio do sistema ficasse periodicamente "saltitante".

Para obter o status, infelizmente é necessário usar ntpdc se você usar ntpd e timedatectl se você usar timesyncd, não conheço nenhum utilitário que possa ler os dois.

    
por 25.08.2016 / 11:53
3

systemd-timesyncd não tem disciplina no relógio: o relógio não é treinado ou compensado, e o desvio do relógio interno ao longo do tempo não é reduzido. Ele possui uma lógica rudimentar para ajustar o intervalo de sondagem, mas sem disciplinar o host, ele terminará com um tempo irregular para sempre, já que o systemd-timesyncd empurra ou puxa qualquer intervalo que julgue necessário para o desvio de curto prazo. Também não é possível avaliar a qualidade da fonte de tempo remota. É improvável que você obtenha precisão muito maior que 100 ms. Isso é suficiente para dispositivos simples de usuários finais, como laptops, mas pode definitivamente causar problemas para sistemas distribuídos que querem maior precisão de tempo.

    
por 25.08.2018 / 00:26

Tags