Quando você fala sobre passar o tempo, você está geralmente falando sobre pequenas quantidades de tempo. A correção é executada com uma chamada para adjtime()
, ou no linux talvez adjtimex()
.
Na página de manual do ntpd:
-x Normally, the time is slewed if the offset is less than the step
threshold, which is 128 ms by default, and stepped if above the
threshold. This option sets the threshold to 600 s, which is
well within the accuracy window to set the clock manually.
Note: Since the slew rate of typical Unix kernels is limited to
0.5 ms/s, each second of adjustment requires an amortization
interval of 2000 s. Thus, an adjustment as much as 600 s will
take almost 14 days to complete. This option can be used with
the -g and -q options. Note: The kernel time discipline is dis‐
abled with this option.
Eu duvido que você queira esperar por uma correção de 7 horas nesta velocidade. Levaria mais de um ano. No linux adjtime em um sistema de 32 bits é efetivamente restrito a um delta de cerca de 2000 segundos. Os sistemas de 64 bits provavelmente não causam problemas, mas a velocidade na qual a alteração entraria em vigor ainda é uma preocupação.
Portanto, há um limite na implementação do Linux, e presumivelmente outros, sob o qual você obtém um 'slew' que é muito lento, mas acima disso os clocks do sistema no master e clientes serão escalonados, o que pode acontecer muito mais rápido.
Haverá também outro limite onde, se a diferença de tempo entre o mestre e o cliente for muito grande, o cliente assumirá um erro e não atualizará. Na página man do ntpd:
-g Normally, ntpd exits with a message to the system log if the
offset exceeds the panic threshold, which is 1000 s by default.
This option allows the time to be set to any value without
restriction; however, this can happen only once. If the thresh‐
old is exceeded after that, ntpd will exit with a message to the
system log. This option can be used with the -q and -x options.
Observe que a opção -g
quase certamente não está definida para um daemon. Geralmente é usado como ntpd -gq
, executado como um único no início do sistema ou manualmente, que se comporta de maneira semelhante a ntpdate
. O limite de pânico é presumivelmente configurável em tempo de compilação, portanto, verifique a página de manual do (s) seu (s) fornecedor (es) do SO.
É bastante simples escrever um programa que faça uma série de ajustes de tempo usando qualquer frequência e tamanho de ajuste que você escolher. Você pode fazer isso no mestre ntp, e ele servirá o tempo ajustado para seus clientes, mas você precisa saber qual o ajuste máximo de tamanho que os sistemas cliente aceitarão, e qual limite mínimo fará com que eles executem uma mudança muito lenta. Por segurança, você deve pesquisar as implementações do ntp nos sistemas clientes.
Se você está atualizando sistemas com características similares ao padrão ntpd no linux sem a opção -x
, então você pode usar um regime como fazer um ajuste de meio segundo a cada 5 segundos e entrar em sincronia ao longo do curso cerca de 3 dias. Fazer ajustes de sub-segundo que não cruzam um segundo limite pode ajudar a evitar coisas como acionar tarefas do cron duas vezes, mas espere que você encontre provavelmente algum tipo de efeitos colaterais.
Se você acabar em uma situação em que seus servidores não estão mais sincronizados entre si, fica mais confuso. Se possível, gostaria de monitorar as diferenças de horário e automaticamente parar de fazer as atualizações periódicas automatizadas se alguns servidores não estiverem mais acompanhando e gerar um alerta.