O Tempo




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."




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:

  • TAI (Tempo Atômico Internacional ou Temps Atomique International): Tempo Atômico Internacional. É calculada pelo Bureau International des Poids et Mesures (BIPM) a partir da leitura de mais de 260 relógios atômicos localizados em institutos e observatórios de metrologia ao redor do mundo. No Brasil o Observatório Nacional participa da geração do TAI. Estima-se que o erro do TAI em relação a um relógio imaginário perfeito esteja em torno de 100ns por ano.

  • TUC (Tempo Universal Coordenado) ou UTC (Universal Time Coordinated): É a base para o tempo legal no mundo todo, inclusive no Brasil. O UTC acompanha o TAI, mas é disciplinado pelo período solar. Para ajustar o UTC em relação ao período solar é acrescentado ou removido um segundo sempre que necessário. Isso é chamado de segundo intercalado, ou leap second, e a necessidade de aplicar e em que data fazê-lo é determinada pela International Earth Rotation & Reference Systems Service (IERS). Assim, assegura-se que o Sol esteja exatamente sobre o meridiano de Greenwich as 12h, com um erro máximo de 0,9s. O UTC é então o sucessor do GMT (Greenwich Mean Time), que era a escala de tempo utilizada quando a definição de segundo era baseada no dia solar.

  • TA(k): Tempo Atômico. É a designação dada às escalas de tempo materializadas por um relógio atômico específico. Por exemplo, a designação TA(ONRJ) indica a escala mantida pelo Observatório Nacional no Rio de Janeiro, e que contribui na geração do TAI. TA(NIST) indica a escala mantida pelo US National Institute of Standards and Technology.

  • GPS Time: Os satélites GPS adotaram uma escala sincronizada com o UTC em 1980, mas desde então não sofreram as correções dos segundos intercalados. O GPS está adiantado em relação ao UTC 14s. Atenção aqui porque os receptores GPS normalmente apresentam o tempo em UTC, fazendo a "correção" internamente. Desconsiderando-se a questão dos segundos intercalados, o GPS (por definição) não diverge do UTC mais do que 1µs; na prática, o erro não passa de algumas dezenas de nanosegundos.

  • Tempo Local: Diferentes regiões do mundo adotam fusos horários distintos. O tempo local é uma escala de tempo baseada numa diferença em relação ao UTC, de forma a adequá-lo ao tempo solar local. No Brasil, a legislação determina os fusos em seus respectivos Estados que o adotam. A Lei n° 11.662 de 24/04/2008 e o Decreto n° 6.558 de 08/09/2008 definem:

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.



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.




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:

  • um computador, ou grupo de computadores, com o tempo diferente da hora legal;
  • um computador cujo tempo foi ajustado para o passado;
  • um grupo de computadores discordando entre si quanto ao tempo correto (isso implica que ao menos n-1 integrantes desse grupo terão o tempo diferente da hora legal, implica também que haverá computadores para os quais, tendo como referência seu relógio local, o relógio de um ou mais de seus companheiros de grupo, estará no passado).

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:

  • Sistemas de distribuição de conteúdo (www, usenet news, etc): Utilizam estampas de tempo para controlar a expiração dos documentos e o cache. Servidores com o tempo errado podem causar perda de informações ou impedir o acesso às mesmas.

  • Sistemas de arquivos (filesystems): Alguns eventos importantes como a criação e modificação de arquivos são marcados por estampas de tempo. Algumas aplicações lêem essas informações e delas dependem. Se alguma dessas datas estiver no futuro, as aplicações podem agir de forma indevida, ou mesmo deixar de funcionar por completo. Como exemplos de aplicações sensíveis a essa situação pode-se citar os sistemas de controle de versão (como o cvs), sistemas de compilação automática (make), sistemas de backup de dados e sistemas de banco de dados.

  • Agendadores de eventos: Aplicações como o cron e o at dos sistemas Unix dependem do tempo correto para funcionarem.

  • Criptografia: Muitas técnicas criptográficas fazem uso de estampas de tempo para os eventos e chaves para prevenir alguns tipos de ataques. Se os computadores envolvidos não estiverem sincronizados entre si, a autenticação e comunicação criptografada podem falhar.

  • Protocolos de comunicação e aplicações de tempo real: Essas aplicações, que incluem as Interfaces Gráficas, fazem uso de filas de eventos, timeouts, timers, e outros recursos de software ligados ao tempo. Para seu correto funcionamento é necessário garantir a monotonicidade, uma boa resolução, e a continuidade (ausência de saltos) no tempo.

  • Sistemas transacionais e bancos de dados distribuidos: Dependem de relógios exatos e muitas vezes, de sua sincronia com a hora legal. Como exemplo dessas aplicações pode-se citar o Home Banking, o Home Broker, os sistemas EDI, etc. As bolsas de valores, por exemplo, tem horários bem definidos de início e término do pregão. A Receita Federal aceita as declarações de Imposto de Renda geralmente até a meia noite da data limite para a entrega.

É 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.




Como os relógios de computadores trabalham.

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

  • um oscilador;
  • um contador;
  • e um dispositivo de leitura ou visualização.

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.




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.

  • Exatidão: (Accuracy)É quanto o relógio está próximo à referência. Ou seja, indica se o relógio está "certo" ou "errado" ou melhor: quanto o relógio está "certo" ou "errado".

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.

  • Precisão (Precision), Resolução (Resolution) e Granularidade (Granularity): Por resolução, se entende o valor do menor incremento possível do contador do relógio. A resolução de um relógio de computador é determinada pela freqüência das interrupções de hardware que fazem funcionar o contador. Os valores normalmente variam entre 100Hz e 1Khz, o que resulta em resoluções de 10ms a 1ms.

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
      
	associd=0 status=0614 leap_none, sync_ntp, 1 event, freq_mode,
	version="ntpd 4.2.6p5@1.2349-o Mon Apr 13 13:39:46 UTC 2015 (1)",
	processor="x86_64", system="Linux/3.13.0-36-generic", leap=00, stratum=2,
	precision=-22, rootdelay=9.141, rootdisp=155.934, refid=200.186.125.195,
	reftime=d934225c.0e476dff  Tue, Jun 23 2015 15:22:20.055,
	clock=d9342283.bf40eca3  Tue, Jun 23 2015 15:22:59.747, peer=59316, tc=6,
	mintc=3, offset=90.460, frequency=16.909, sys_jitter=57.893,
	clk_jitter=92.077, clk_wander=5.978

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.

  • Dispersão: (Dispersion) É o desvio ou erro estimado nas leituras do relógio. Pode ser causado por flutuações de curta duração na freqüência do oscilador, por erros de medida ocasionados por excesso de utilização do processador, latência causada por interrupções, latência na rede, etc.

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

	associd=13396 status=9424 conf, reach, sel_candidate, 2 events, reachable,
	srcadr=servidor.ntp, srcport=123, dstadr=computador.local,
	dstport=123, leap=00, stratum=2, precision=-21, rootdelay=0.168,
	rootdisp=1.724, refid=200.160.7.186,
	reftime=d93428a7.8d28dcf3  Tue, Jun 23 2015 15:49:11.551,
	rec=d93428d8.8f3b601b  Tue, Jun 23 2015 15:50:00.559, reach=377,
	unreach=0, hmode=3, pmode=4, hpoll=6, ppoll=6, headway=0, flash=00 ok,
	keyid=0, offset=8.920, delay=1.927, dispersion=2.476, jitter=25.543,
	xleave=0.761,
	filtdelay=     3.56    1.93   40.75    2.52    2.99    2.25    4.67   14.52,
	filtoffset=    6.59    8.92   30.18   17.00   23.33   31.35   39.13   58.12,
	filtdisp=      0.00    0.96    1.97    2.94    3.92    4.92    5.88    6.84

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


	associd=0 status=0614 leap_none, sync_ntp, 1 event, freq_mode,
	version="ntpd 4.2.6p5@1.2349-o Mon Apr 13 13:39:46 UTC 2015 (1)",
	processor="x86_64", system="Linux/3.13.0-36-generic", leap=00, stratum=2,
	precision=-23, rootdelay=1.273, rootdisp=38.671, refid=68.47.202.140,
	reftime=d934289c.8ea22468  Tue, Jun 23 2015 15:49:00.557,
	clock=d9342a3a.8f5888cd  Tue, Jun 23 2015 15:55:54.559, peer=13399, tc=6,
	mintc=3, offset=66.455, frequency=12.358, sys_jitter=9.020,
	clk_jitter=27.006, clk_wander=4.369

  • Variação: (Jitter) É o desvio ou erro nas leituras de relógio. Pode ser causado por flutuações de curta duração na freqüência do oscilador, por erros de medida ocasionados por excesso de utilização do processador, latência causada por interrupções, latência na rede, etc.

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

	associd=0 status=0614 leap_none, sync_ntp, 1 event, freq_mode,
	version="ntpd 4.2.6p5@1.2349-o Mon Apr 13 13:39:46 UTC 2015 (1)",
	processor="x86_64", system="Linux/3.13.0-36-generic", leap=00, stratum=2,
	precision=-23, rootdelay=1.273, rootdisp=38.671, refid=68.47.202.140,
	reftime=d934289c.8ea22468  Tue, Jun 23 2015 15:49:00.557,
	clock=d9342a3a.8f5888cd  Tue, Jun 23 2015 15:55:54.559, peer=13399, tc=6,
	mintc=3, offset=66.455, frequency=12.358, sys_jitter=9.020,
	clk_jitter=27.006, clk_wander=4.369

  • Deslocamento: (Offset ou time offset) É a diferença de tempo entre dois relógios.

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

  • Envelhecimento: (Aging ou Ageing) É a instabilidade na freqüência do oscilador causada por fatores internos. Ou seja, quanto a freqüência do relógio varia com o tempo quando os fatores externos como radiação, pressão, temperatura e umidade são mantidos constantes.

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.

  • Escorregamento: (Drift) É a instabilidade na freqüência do oscilador. Ou seja, quanto a freqüência do relógio varia com o tempo. Essa instabilidade pode ser causada por fatores externos, como variações na radiação, pressão, temperatura ou umidade e pelo envelhecimento (ageing).

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.