Em várias plataformas de produção, observamos sintomas que parecem sugerir que a hora do dia está saltando periodicamente para frente ou para trás. Os saltos são tipicamente em torno de 1 segundo, geralmente cancelam (pulam para frente e para trás muito em breve) e acontecem cerca de 50 vezes por dia. Esse desvio é mais perceptível durante períodos de pico de uso de aplicativos e durante períodos de altas operações de E / S de disco, como backups diários. Esses desvios estão afetando nosso aplicativo confidencial em tempo real.
Os sistemas são servidores Oracle Netra X4250 e Netra X4270 executando o SLES 11SP2 com o kernel 3.0.58-0.6.6 padrão.
$ cat /sys/devices/system/clocksource/clocksource0/available_clocksource
tsc hpet acpi_pm
$ cat /sys/devices/system/clocksource/clocksource0/current_clocksource
tsc
Desativamos o NTP , mas isso não teve nenhum efeito nos desvios. Existem ferramentas que medem o desvio do relógio da hora do dia? Como podemos evitar isso?
Essas são plataformas de produção e não podemos recriar o problema em nossos laboratórios; portanto, minha capacidade de experimentar é limitada. Se deixado por conta própria, escreverei uma ferramenta para medir a deriva e, talvez, experimente uma fonte de relógio HPET .
ntpdate(8)
ountpd(8)
).Respostas:
As únicas ferramentas que eu conheço são as ferramentas NTP que devem ser suficientes. Na verdade, você não precisa configurar o ntpd para sincronizar com uma determinada fonte de relógio; basta usar a
-d
opçãontpdate
para buscar o deslocamento calculado.Exemplo:
-d
é a opção de depuração que o NTP funciona sem realmente tocar no relógio do sistema.Não estou muito surpreso que você não consiga reproduzir isso em ambientes de desenvolvimento / teste, pois provavelmente é apenas devido ao relógio do hardware. Se você tiver suporte de hardware com alguém, eu tentaria reparar suas máquinas. Uma possibilidade é trocar uma das máquinas de desenvolvimento por essa máquina de produção, consertar os sistemas anteriores do PROD e reintroduzi-la como uma máquina de desenvolvimento para substituir a que está no PROD agora.
Além disso, mudar a fonte do relógio de hardware é tudo o que você pode fazer. Se você não pode ou não pode fazer a troca, eu sugiro que você siga a rota hpet. Você pode testar se a alteração da fonte do relógio interfere nos serviços do sistema e, em seguida, implantá-la na produção como um elogio.
fonte
tsc
é baseado na CPU, portanto, faz sentido que uma atividade mais alta da CPU desencadeie um problema com o relógio do hardware. Se o hpet for rápido o suficiente para você, talvez seja necessário tentar, fazer manutenção ou fazer a troca. Essas são as únicas opções que posso ver para você.Uma solução é usar
HPET
Consulte também Temporizador de eventos de alta precisão
Para defini-lo como parâmetro de inicialização, use
Em hardware mais antigo,
TSC
era frequentemente instável e desabilitado pelo kernel.fonte
Escrevi uma ferramenta mais detalhada para correlacionar medições de relógio com sintomas de latência exibidos por nosso aplicativo. Essa ferramenta parece descartar o que eu suspeitava anteriormente como jitter no relógio da hora do dia do Linux.
Para encurtar a história, minha hipótese inicial era inválida. Mas eu aprendi muito sobre os relógios Linux com as respostas e os links, então obrigado a todos que responderam!
fonte
O relógio não deve ser monótono, a menos que alguém o mude? Saltos para trás não devem ser possíveis. Deve haver algo definindo o relógio - um trabalho cron ou outro daemon (por exemplo, uma chamada para
hwclock --adjust
). Lembro-me de que o próprio ntp atualiza as estatísticas do desvio e o compensa rotineiramente e, se você não executar o ntp por um longo período de tempo e obter um grande deslocamento, ele perde tempo por dias depois, se você não redefinir/etc/adjtime
. Você pode ter algo assim configurado - algo que reajuste o tempo periodicamente (e provoca saltos).ntp
é realmente destinado a combater esse problema.fonte