ceptro.br

Centro de Estudos e Pesquisas em Tecnologia de Redes e Operações
Observatório Nacional CGI.br NIC.br

NTP.br

Ir para o conteúdo

O Tempo

Voltar

O que é o tempo?

É difícil buscar uma definição precisa de tempo. Consideremos dois eventos, um ocorrendo depois do outro. Para entender o conceito de depois podemos recorrer à causalidade: vamos supor que o primeiro evento tenha provocado o segundo, então podemos dizer certamente que o segundo evento ocorre depois do primeiro. Façamos então a pergunta: " Quanto o segundo evento ocorre depois do primeiro?". A resposta é a quantidade que costumamos chamar de tempo, ou, mais precisamente, de intervalo de tempo. Essa quantidade pode ser medida por um dispositivo chamado relógio. O relógio trabalha de forma contínua fornecendo indicações instantâneas, que podemos chamar de momentos. Então, o primeiro evento ocorre em um momento, digamos m1 e o segundo ocorre em outro momento, digamos m2. O intervalo de tempo entre os dois eventos, que vamos chamar de t, é: t=m2-m1.

Consideremos para fins práticos, então, que tempo é o intervalo entre dois eventos, ou o momento indicado pelo relógio. O tempo é medido em segundos, que é uma unidade do SI (Sistema Internacional de Unidades). Historicamente o segundo era medido com base no dia solar médio (1/86400 do dia solar médio), mas a rotação da Terra é bastante imprecisa. Então, em 1954, definiu-se o segundo com base na rotação da Terra em torno do Sol (1/31.556.925,9747 do tempo que levou a Terra a girar em torno do Sol à partir das 12h de 04/01/1900). Contudo, a rotação da Terra em torno do Sol também é imprecisa.

Desde 1967 o segundo é definido com base na medição de relógios atômicos, como:

"O segundo é a duração de 9.192.631.770 períodos da radiação correspondente à transição entre dois níveis hiperfinos do estado fundamental do átomo de césio 133."

Voltar

As escalas de tempo.

As escalas de tempo podem ser definidas como sistemas de ordenamento de eventos. Pode-se entendê-las também como convenções sobre a forma de medir e representar o tempo. As escalas não podem ser ambíguas, devem ser estáveis e homogêneas.

Existem diversas escalas de tempo. As mais importantes no contexto do NTP são:

Diferença em relação ao UTC Sem horário de Verão No horário de Verão
UTC-2 Ilhas de Fernando de Noronha, Trindade, Martin Vaz, Penedos de São Pedro e São Paulo e o Atol das Rocas. Ilhas de Fernando de Noronha, Trindade, Martin Vaz, Penedos de São Pedro e São Paulo e o Atol das Rocas. Estados da região Sudeste e Sul, Goiás e o Distrito Federal.
UTC-3 Estados da região Nordeste, Sudeste, Sul, além do Distrito Federal, Goiás, Tocantins, Amapá e Pará. Estados da região Nordeste, Tocantins, Amapá, Pará, Mato Grosso e Mato Grosso do Sul.
UTC-4 Estados de Roraima, Rondônia, Mato Grosso, Mato Grosso do Sul, Amazonas e Acre. Estados de Roraima, Rondônia, Amazonas e Acre.

Voltar

A Hora Legal Brasileira e o papel do ON

O Tempo é padronizado em todo mundo através da escala de Tempo Atômico Internacional (TAI), baseada em dados provenientes de um conjunto mundial de relógios atômicos (aproximadamente 250 relógios atômicos em 50 países). Constitui-se de um acordo internacional aceito como referência de tempo em conformidade com a definição atual do segundo. O TAI é mantido pelo Bureau International des Poids et Mesures (BIPM), na França. A estabilidade do TAI é monitorada e avaliada através de um algoritmo que estabelece um grau de ponderação aos diversos relógios dos países que contribuem para sua formação e que enviam ao BIPM os dados sobre seus padrões de tempo primários. A escala de tempo atômico TAI é estável, não acompanhando as irregularidades da rotação da Terra.

Para fins práticos é preciso ter uma escala de tempo que estivesse em sincronismo com a rotação da Terra e para isso foi estabelecido o Tempo Universal Coordenado (UTC). O UTC acompanha o tempo atômico internacional (TAI), diferindo deste por um número inteiro de segundos denominados ‘segundos intercalados’ (leap seconds). A Divisão Serviço da Hora (DSHO) do Observatório Nacional (ON) tem como objetivos a Geração, Distribuição e Conservação da Hora Legal Brasileira (HLB), conforme Legislação Brasileira, bem como realizar Pesquisa e Desenvolvimento no campo da metrologia de Tempo e Freqüência. Deste modo a DSHO mantém sob sua guarda os padrões nacionais de tempo e frequência que são a base da Rastreabilidade Metrológica Brasileira. Ao nível internacional a rastreabilidade dos padrões nacionais e da HLB é estabelecida com o BIPM.

Voltar

A importância da sincronização.

Uma importante propriedade do tempo é sua monotonicidade, que significa que o tempo sempre avança. Essa parece ser uma propriedade simples, óbvia e fácil de ser mantida, mas de fato não é. Relógios implementados em software, como é o caso dos relógios utilizados pelos diversos Sistemas Operacionais, podem ser facilmente ajustados, intencionalmente ou não, para representar um tempo no passado.

Diferentes softwares e aplicações podem ser sensíveis a problemas relativos à sincronização do tempo de formas diversas. Dentre os possíveis problemas com a sincronização, podemos considerar:

Quando se trata de um computador isolado a exatidão em relação à uma referência de tempo como a hora legal brasileira não é tão importante. Nesse caso o mais importante é manter a monotonicidade do tempo. Além disso, eventuais ajustes no relógio devem ser, sempre que possível, graduais. Saltos no tempo, mesmo de alguns poucos segundos, para o futuro podem ser ruins, e para o passado, desastrosos.

Como exemplos de aplicações afetadas pelo tempo pode-se citar:

É importante também do ponto de vista de segurança de redes que os relógios dos computadores estejam sincronizados. Investigações relacionadas a incidentes de segurança tornam-se impossíveis caso os servidores envolvidos e os diversos arquivos de log discordem entre si em relação às estampas de tempo dos eventos.

Em fim, diferentes softwares e aplicações são sensíveis ao tempo e à sincronização entre as entidades envolvidas de forma diversa. Para algumas aplicações exatidão da ordem de segundos pode ser suficiente. Para outras, é necessário manter os relógios com diferenças na ordem dos milisegundos entre si e em relação à referência legal. Propriedades como a monotonicidade, resolução e precisão dos relógios, que serão detalhadas adiante, também são importantes. O NTP, se corretamente utilizado, é capaz de garantir as propriedades necessárias ao relógio do computador para o bom funcionamento das aplicações.

Voltar

Como os relógios de computadores trabalham.

Os relógios de computadores, como quaisquer outros relógios, são baseados em 3 dispositivos:

O oscilador é um dispositivo que gera eventos cíclicos a uma taxa constante, chamada de freqüência. Normalmente os osciladores dos computadores são baseados em cristais de quartzo.

O contador acumula os ciclos gerados pelo oscilador, geralmente utilizando-se de interrupções de hardware, convertendo-os em unidades de medida conhecidas, como segundos, minutos, horas. Cada valor do contador é chamado de estampa de tempo, ou timestamp.

A "visualização" ou leitura é feita através de rotinas de software.

Voltar

Propriedades importantes dos relógios.

OBS: nas definições abaixo utiliza-se o comando ntpq da distribuição do NTP para exemplificar o acesso às variaveis do sistema ligadas a cada conceito. Para mais detalhes sobre essa ferramenta, deve-se acessar a seção Utilizando.

Se um relógio de computador funciona de forma isolada sua exatidão tende a piorar com o tempo, por conta de erros sistemáticos na freqüência. O relógio atrasa ou adianta conforme o tempo passa. Um relógio típico de computador, se funcionando livremente, pode adiantar-se ou atrasar-se desde alguns segundos até cerca de 1 minuto por semana.

Para garantir uma melhor exatidão, a alternativa é disciplinar o relógio em relação à fontes de tempo e freqüência mais confiáveis, o que pode ser feito com o NTP. Disciplinar o relógio signifca que ele é sincronizado (fase) e sintonizado (freqüência) com uma fonte mais estável de tempo.

Atenção: muitas vezes se utiliza a palavra precisão, erroneamente, como sinônimo de exatidão. No contexto do NTP exatidão e precisão são coisas totalmente diferentes.

Em alguns casos é possível utilizar outras fontes de freqüência (maiores), como por exemplo o relógio da CPU, para interpolar os valores obtidos pelo relógio, conseguindo assim uma resolução melhor. Isso geralmente é chamado de granularidade do relógio. Com isso, resoluções de aproximadamente 1µs são comuns hoje. Implementações de software como o nanokernel, que hoje é parte integrante do FreeBSD e do Linux, permitem resoluções da ordem de nanosegundos.

Por precisão, entende-se geralmente o menor incremento de tempo que pode ser lido pelo computador. Pode ser um valor maior do que a resolução, já que ler o relógio é uma tarefa realizada por software e há um certo tempo e incerteza envolvidos nela. Ou pode ser menor, quando o software consegue ler o relógio mais rápido do que esse pode contar.

No contexto do NTP, precisão é o maior desses valores. Ou seja, precisão, no NTP, engloba os conceitos de precisão, resolução e granularidade vistos acima. É o menor incremento de relógio que se pode conseguir na prática em um determinado equipamento.

O NTP calcula a precisão e a armazena numa variável no formato de uma potência de 2. Ou seja, se o comando ntpq -c rl, que mostra as variáveis do sistema, retornar precision=-16, a precisão é de aproximadamente 2-16s = 15µs.

No exemplo abaixo, em que são consultadas as variáveis locais do NTP, a precisão é de 2-20s = 0,95µs:

      usuario@computador.local:~$ ntpq -c rl
      assID=0 status=0644 leap_none, sync_ntp, 4 events, event_peer/strat_chg,
      version="ntpd 4.2.2p4@1.1585-o Wed Mar 7 20:43:30 UTC 2007 (1)",
      processor="i686", system="Linux/2.6.20-16-generic", leap=00, stratum=2,
      precision=-20, rootdelay=0.459, rootdispersion=12.089, peer=39324,
      refid=200.160.7.183,
      reftime=cac0ac02.e91dfecc Wed, Oct 17 2007 14:42:58.910, poll=6,
      clock=cac0ac7a.40d41c89 Wed, Oct 17 2007 14:44:58.253, state=4,
      offset=-6.896, frequency=48.637, jitter=1.337, noise=1.627,
      stability=0.067, tai=0 

Atenção: muitas vezes se confunde a palavra precisão, atribuindo-se a ela indevidamente o conceito de exatidão. No contexto do NTP exatidão e precisão são coisas totalmente diferentes.

No contexto do NTP a dispersão (dispersion) é estimada localmente e informada pelo servidor ao cliente na troca de mensagens.

No exemplo abaixo, são consultadas as variáveis da conexão entre o computador.local e o servidor1. O servidor1 calcula a dispersão (dispersion) como sendo de 2,988ms e informa ao computador.local, que é o cliente. A dispersão para a raiz (rootdispersion) de 0,381ms é o valor estimado pelo servidor1 da dispersão acumulada até a referência primaria de tempo, no caso o sinal IRIG de um relógio atômico.

      usuario@computador.local:~$ ntpq

      ntpq> rv &1
      assID=39324 status=9614 reach, conf, sel_sys.peer, 1 event, event_reach,
      srcadr=servidor1, srcport=123, dstadr=computador.local, dstport=123,
      leap=00, stratum=1, precision=-19, rootdelay=0.000,
      rootdispersion=0.381, refid=IRIG, reach=377, unreach=0, hmode=3,
      pmode=4, hpoll=6, ppoll=6, flash=00 ok, keyid=0, ttl=0, offset=-5.484,
      delay=0.450, dispersion=2.988, jitter=0.162,
      reftime=cac0db20.22c94d0a Wed, Oct 17 2007 18:04:00.135,
      org=cac0db2a.e7dce26e Wed, Oct 17 2007 18:04:10.905,
      rec=cac0db2a.e946172a Wed, Oct 17 2007 18:04:10.911,
      xmt=cac0db2a.e9233c69 Wed, Oct 17 2007 18:04:10.910,
      filtdelay= 0.46 0.48 0.49 0.47 0.45 0.47 0.48 0.48,
      filtoffset= -5.28 -5.29 -5.33 -5.39 -5.48 -5.56 -5.62 -5.71,
      filtdisp= 0.00 0.98 1.92 2.87 3.86 4.80 5.76 6.75 

No exemplo abaixo, onde são consultadas as variáveis locais do NTP, a dispersão para a raiz (rootdispersion) é calculada como sendo de 18,547ms.

      ntpq> rl
      assID=0 status=0644 leap_none, sync_ntp, 4 events, event_peer/strat_chg,
      version="ntpd 4.2.2p4@1.1585-o Wed Mar 7 20:43:30 UTC 2007 (1)",
      processor="i686", system="Linux/2.6.20-16-generic", leap=00, stratum=2,
      precision=-20, rootdelay=0.434, rootdispersion=18.547, peer=47414,
      refid=servidor1,
      reftime=cac0eba0.695f54c0 Wed, Oct 17 2007 19:14:24.411, poll=7,
      clock=cac0ee6b.171df1b1 Wed, Oct 17 2007 19:26:19.090, state=4,
      offset=-3.372, frequency=41.693, jitter=0.791, noise=0.754,
      stability=0.021, tai=0

No contexto do NTP a variação (jitter) é estimada pelo cliente, à partir das diversas medidas de deslocamento (offset) para um determinado servidor.

      usuario@computador.local:~$ ntpq -c pe
      remote     refid  st t when poll reach delay  offset jitter
      ============================================================
      *servidor1 .IRIG. 1  u 93   128  377   0.523  0.020  0.033
      +servidor2 .GPS.  1  u 57   128  377   0.488 -0.054  0.025
      -servidor3 .IRIG. 1  u 50   128  377   5.151 -0.386  0.382
      +servidor4 .IRIG. 1  u 74   128  377   5.163 -0.360  0.55

O NTP também calcula uma variação (jitter) para o sistema como um todo, com base na variação dos servidores utilizados:

      usuario@computador.local:~$ ntpq -c rl
      assID=0 status=0644 leap_none, sync_ntp, 4 events, event_peer/strat_chg,
      version="ntpd 4.2.2p4@1.1585-o Wed Mar 7 20:43:30 UTC 2007 (1)",
      processor="i686", system="Linux/2.6.20-16-generic", leap=00, stratum=2,
      precision=-20, rootdelay=0.434, rootdispersion=18.547, peer=47414,
      refid=servidor1,
      reftime=cac0eba0.695f54c0 Wed, Oct 17 2007 19:14:24.411, poll=7,
      clock=cac0ee6b.171df1b1 Wed, Oct 17 2007 19:26:19.090, state=4,
      offset=-3.372, frequency=41.693, jitter=0.791, noise=0.754,
      stability=0.021, tai=0

No contexto do NTP, o deslocamento (offset) é medido em relação ao relógio local em milisegundos. O valor do deslocamento para o servidor escolhido como referência (servidor indicado pelo asterisco) representa o quanto o relógio local deve ser alterado para estar com o valor igual ao da referência de tempo (estrato 0).

No exemplo abaixo o relógio local deve ser adiantado 20µs.

      usuario@servidor:~$ ntpq -c pe
      remote   refid  st t when poll reach delay  offset jitter
      ==========================================================
      *server1 .IRIG. 1  u 93   128  377   0.523  0.020  0.033
      +server2 .GPS.  1  u 57   128  377   0.488 -0.054  0.025
      -server3 .IRIG. 1  u 50   128  377   5.151 -0.386  0.382
      +server4 .IRIG. 1  u 74   128  377   5.163 -0.360  0.559

O envelhecimento (ageing) de um relógio atômico de rubídio é da ordem de 5x10-11/ano, enquanto os relógios atômicos de césio modernos não apresentam envelhecimento.

Algumas referências afirmam que estabilidade (stability) é sinônimo de escorrregamento (drift). E mesmo que escorregamento (drift) e envelhecimento (ageing) são sinônimos.

Outras consideram que há diferenças entre a instabilidade originada de erros sistemáticos, causados por fatores internos ou de ambiente, e a que é originada por erros estocásticos ou aleatórios, causados principalmente pela forma de medição.

A estabilidade pode ser de curto prazo, que envolve períodos de menos de 100s. Ou de longo prazo, com estimativas para períodos maiores do que 100s.

O NTP calcula a estabilidade com base na diferença ou deslocamento da freqüência das amostras de tempo obtidas de cada servidor. Ela é medida em PPM (Partes por milhão). 1 PPM = 1x10-6.

No exemplo abaixo a estabilidade é de 0,021PPM, o que equivale a um desvio de cerca de 1,8ms por dia (0,021 x 10-6 x 1000ms/s x 60s/min x 60min/h x 24h/dia = 1,8ms/dia).

      usuario@computador.local:~$ ntpq

      ntpq> rl
      assID=0 status=0644 leap_none, sync_ntp, 4 events, event_peer/strat_chg,
      version="ntpd 4.2.2p4@1.1585-o Wed Mar 7 20:43:30 UTC 2007 (1)",
      processor="i686", system="Linux/2.6.20-16-generic", leap=00, stratum=2,
      precision=-20, rootdelay=0.434, rootdispersion=18.547, peer=47414,
      refid=servidor1,
      reftime=cac0eba0.695f54c0 Wed, Oct 17 2007 19:14:24.411, poll=7,
      clock=cac0ee6b.171df1b1 Wed, Oct 17 2007 19:26:19.090, state=4,
      offset=-3.372, frequency=41.693, jitter=0.791, noise=0.754,
      stability=0.021, tai=0

Ao sintonizar os osciladores de dois relógios, se as freqüências permanecerem constantes dali em diante, as diferenças de deslocamento também permanecerão.

Voltar