Como posso medir e evitar o desvio do relógio?

14

Em várias plataformas de produção, observamos sintomas que parecem sugerir que a hora do relógio está periodicamente pulando para frente ou para trás. Os saltos são tipicamente ao redor de 1 segundo, tipicamente se cancelam (pule para frente e depois para trás muito pouco depois) e acontecem cerca de 50 vezes por dia. Esse desvio é mais perceptível durante os períodos de pico de uso do aplicativo e durante períodos de operações de E / S com disco alto, como backups diários. Essas variações estão afetando nosso aplicativo sensível em tempo real.

Os sistemas são servidores Oracle Netra X4250 e Netra X4270 executando o SLES 11SP2 com o kernel padrão 3.0.58-0.6.6.

$ cat /sys/devices/system/clocksource/clocksource0/available_clocksource
tsc hpet acpi_pm

$ cat /sys/devices/system/clocksource/clocksource0/current_clocksource
tsc

Desativamos NTP , mas isso não afetou os desvios. Existem ferramentas que medem a deriva do relógio da hora do dia? Como podemos evitar isso?

Estas são plataformas de produção e não podemos recriar o problema nos nossos laboratórios, pelo que a minha capacidade de experimentar é limitada. Se for deixado para os meus próprios dispositivos, escreverei uma ferramenta para medir o desvio e talvez experimente uma fonte de cliques HPET . / p>     

por brett 07.03.2014 / 20:00

4 respostas

8

Are there tools which measure time of day clock drift?

As únicas ferramentas que conheço são as ferramentas NTP, que devem ser suficientes. Você não tem que realmente configurar o ntpd para sincronizar com uma determinada fonte de clock, você pode apenas usar a opção -d para ntpdate para buscar o offset calculado.

Exemplo:

[davisja5@xxxadmvlm08 ~]$ ntpdate -d clock.redhat.com 2>/dev/null | egrep "^offset"
offset -0.004545
[davisja5@xxxadmvlm08 ~]$

-d é a opção de depuração que faz o NTP funcionar sem realmente tocar no relógio do sistema.

Any advice on how we can avoid this?

Não me surpreendo que você não consiga reproduzir isso em ambientes de desenvolvimento / teste, já que provavelmente é devido ao relógio do hardware. Se você tem suporte de hardware com alguém, eu tentaria consertar suas máquinas. Uma possibilidade é trocar uma das máquinas dev para esta máquina de produção, consertar os antigos sistemas PROD e reintroduzi-la como uma máquina dev para substituir a que está no PROD agora.

Além disso, mudar a fonte do clock do hardware é tudo que você pode fazer. Se você não faz ou não pode fazer a troca, eu sugiro que você faça siga a rota do hpet. Você pode testar se a mudança na fonte do relógio mexe com os serviços do sistema e, em seguida, implanta-a na produção como um granizo.

    
por 07.03.2014 / 20:51
3

Uma solução é usar HPET

Veja também Temporizador de eventos de alta precisão

Para definir como parâmetro de inicialização, use

clocksource=hpet

Em hardware mais antigo, o TSC era muitas vezes instável e foi desativado pelo kernel.

With the advent of multi-core/hyper-threaded CPUs, systems with multiple CPUs, and hibernating operating systems, the TSC cannot be relied on to provide accurate results ...

Wikipedia:Time Stamp Counter

    
por 07.03.2014 / 20:56
1

Eu escrevi uma ferramenta mais detalhada para correlacionar medições de clock com sintomas de latência exibidos pelo nosso aplicativo. Esta ferramenta parece descartar o que eu suspeitava anteriormente como jitter na hora do relógio do Linux.

Portanto, para encurtar a história, minha hipótese inicial era inválida. Mas eu aprendi muito sobre os relógios Linux a partir das respostas e links, então obrigado a todos que responderam!

    
por 12.03.2014 / 22:00
0

O relógio não é monótono a menos que alguém o altere? Saltos para trás não deveriam ser possíveis. Deve haver algo configurando o relógio - uma tarefa cron ou algum outro daemon (por exemplo, uma chamada para hwclock --adjust ). Eu lembro que o próprio ntp atualiza as estatísticas para o drift e o compensa rotineiramente, e se você não conseguir rodar o ntp por um longo tempo e obter um grande offset, ele estragará o tempo por dias se você não redefinir o /etc/adjtime . Você pode ter algo assim configurado - algo que reajusta o tempo periodicamente (e causa saltos).

ntp é, na verdade, destinado a combater esse problema.

    
por 07.03.2014 / 22:44