NTP e NTPD Nanonúcleo

7

Eu tive algumas perguntas sobre o Nanokernel NTP, conforme explicado aqui: link

A grande questão é como esse Nanokernel consegue entregar uma precisão menor que o clock do sistema (como a precisão do ns)?

Eu tenho algumas perguntas secundárias:

  1. Se e quando essa modificação foi trazida para o linha principal do kernel Linux?
  2. Em segundo lugar, o Nanokernel parece usar uma combinação agregada do clock do CPU (em qualquer HZ que esteja definido) e um contador de ciclos de clock.

"Process cycle counter (PCC) used to interpolate microseconds or nanoseconds between tick interrupts"

Como ele usa o contador de ciclos, porque, até onde eu sei, ele não entrega uma interrupção, o Nanokernel lê continuamente o valor do registro do processador que contém o contador atual?

  1. Finalmente, o NTPD já modifica a freqüência do clock da CPU, ou apenas mantém um relógio de software onde o ajuste calculado do clock é aplicado?
por Nark 14.11.2014 / 11:14

1 resposta

2

Nota: Embora o NTP tivesse essa idéia de um nanonúcleo que poderia ser usado para consertar sistemas operacionais que não usam NTP, no Linux em particular não está neste caso. O código NTP está no próprio kernel como você alude na questão 1 .

0: How does this Nanokernel manage to deliver an accuracy less than the system clock tick (such as ns accuracy)?

Precisão maior que a precisão do tique do relógio do sistema é feita com base na precisão agregada de outro (s) computador (es) ou dispositivo (s). O tique do relógio do sistema indica com que frequência esse tique do computador é atualizado. No entanto, o número de locais de precisão é definido no software específico usado, como o SO, que muitas vezes depende dos padrões POSIX. Os padrões POSIX para algumas estruturas de tempo diminuem para uma precisão de nanossegundos, como você mencionou.

Para ver como podemos obter precisão maior que a precisão do relógio do sistema, suponha que no meu computador eu tenha conectado um dispositivo GPS ou algum tipo de relógio atômico sofisticado. Sempre que alguém me pergunta que horas são, eu apenas consultei o relógio e dei o fora.

Se o ntp estiver no kernel como é para o Linux, esta hora do dispositivo GPS, e não a hora do relógio do sistema, pode ser usada em chamadas de gettimeofday () .

Quanto ao relógio do computador, com certeza, eu comparo o tempo que recebo com o GPS ou o relógio atômico com o computador e quando ele fica mais do que um tique, arrumo para ajustá-lo usando adjtime () descrito na resposta para questionar 3.

  1. If and when was this modification brought into the main line Linux kernel?

A idéia de Nanokernel NTP foi introduzida na versão 4.0 do ntp, que remonta pelo menos a 1998. Eu acho que estava no kernel do Linux de alguma forma desde pelo menos 2.2.36. registros do github do linux informam em 1º de outubro de 2006 como quando o código ntp foi segregado em seu próprio arquivo ntp.c no núcleo. Mas é claro que está lá desde antes.

Em suma, nada disso é novo.

  1. How does it use the cycle counter, because as far as I'm aware it does not deliver an interrupt, so does the Nanokernel continuously read the processor registry value containing the current counter?

Ele usa isso como qualquer outro programa leria uma variável de programa. Quando o código que o utiliza é executado e o valor é necessário, digamos, porque ele obteve novas informações, lê a variável e a atualiza. Se alguém precisar de tempo, ele também usa esse cálculo. Então, a menos que o código tenha sido escrito de uma maneira realmente estúpida (e eu tenho certeza que não foi), não, ele não "lê continuamente o valor do registro do processador" mais do que o necessário.

  1. Finally does NTPD ever modify the CPU clock frequency, or does it just maintain a software clock where calculated clock adjustment is applied?

Ele usa a chamada de sistema adjtime () que remonta a antes de 1998 O que adjtime faz é organizar periodicamente para o contador do relógio perder um incremento para abrandar, ou para incrementar em mais de 1 para acelerar.

    
por 10.06.2015 / 12:58