Passa al contenuto principale

5. Orologi Locali

Al fine di implementare un orologio locale preciso e accurato, l'host deve essere dotato di un orologio hardware composto da un oscillatore e un'interfaccia e capace della precisione e stabilità richieste. Un orologio logico viene quindi costruito utilizzando questi componenti più componenti software che regolano il tempo apparente e la frequenza in risposta ad aggiornamenti periodici calcolati da NTP o qualche altro protocollo di sincronizzazione temporale come Hellospeak [MIL83b] o il Unix 4.3bsd TSP [GUS85a]. Questa sezione descrive il modello e l'implementazione dell'orologio locale Fuzzball, che include disposizioni per la regolazione precisa del tempo e della frequenza e può mantenere il tempo entro 15 ns e la frequenza entro 0,3 ms al giorno. Il modello è adatto per l'uso con oscillatori al quarzo compensati e non compensati e può essere adattato agli oscillatori a frequenza di rete. Un riepilogo delle caratteristiche di questi e altri tipi di oscillatori può essere trovato nell'Appendice E, mentre un'analisi matematica completa del modello di orologio locale NTP può essere trovata nell'Appendice G.

È importante notare che l'implementazione particolare descritta è solo una delle molte implementazioni possibili che forniscono funzionalità equivalente. Tuttavia, è ugualmente importante notare che il modello di orologio descritto nell'Appendice G e che è la base dell'implementazione coinvolge un particolare tipo di ciclo di retroazione di controllo che è potenzialmente instabile se le regole di progettazione vengono violate. Il modello e i parametri descritti nell'Appendice G sono progettati per fornire un tempo accurato e stabile in condizioni operative tipiche utilizzando hardware convenzionale e di fronte a interruzioni nella connettività hardware o di rete. I parametri sono stati progettati per un funzionamento affidabile in una sottorete gerarchica multi-livello dove un funzionamento instabile a un livello può interrompere molti altri livelli.

5.1. Implementazione Fuzzball

L'orologio locale Fuzzball consiste in una raccolta di registri hardware e software, insieme a un insieme di algoritmi, che implementano un orologio logico che funziona come un oscillatore disciplinato e si sincronizza con una fonte esterna. Quella che segue è una descrizione dei suoi componenti e del modo di funzionamento. Si noti che tutta l'aritmetica è in complemento a due intero e tutti gli spostamenti "<<" e ">>" sono aritmetici (riempimento del segno per gli spostamenti a destra e riempimento di zero per gli spostamenti a sinistra). Si noti inoltre che x << n è equivalente a x >> -n.

I componenti principali dell'orologio locale sono il registro dell'Orologio a 48 bit e il Prescaler a 32 bit che funzionano come un oscillatore disciplinato incrementando in millisecondi rispetto alla mezzanotte nel punto di frazione. Il registro di Regolazione dell'Orologio a 32 bit viene utilizzato per regolare la fase dell'oscillatore in passi graduali per evitare discontinuità nella scala temporale indicata. Il suo contenuto è designato x nel seguito. Il registro di Compensazione dello Skew a 32 bit viene utilizzato per rifinire la frequenza dell'oscillatore aggiungendo piccoli incrementi di fase a intervalli di regolazione periodici e può compensare errori di frequenza fino a 0,01% o ±100 ppm. Il suo contenuto è designato y nel seguito. Il contatore Watchdog a 16 bit e il registro di Conformità a 32 bit vengono utilizzati per determinare la validità, nonché per stabilire la larghezza di banda PLL e l'intervallo di polling (vedere Appendice G). Il contenuto del registro di Conformità è designato z nel seguito. Il registro di Regolazione PPS a 32 bit viene utilizzato solo quando è disponibile un segnale di impulso per secondo (PPS) e viene utilizzato per regolare l'orologio.

5.2. Aggiustamenti di Fase Graduali

Il registro di Regolazione dell'Orologio viene utilizzato per regolare la fase dell'orologio locale in passi graduali. Ad ogni interruzione dell'orologio, il contenuto x del registro di Regolazione dell'Orologio viene aggiunto al registro Prescaler:

Prescaler <- Prescaler + TICK + x

Poiché x può essere un intero positivo o negativo, l'operazione sopra varia la frequenza dell'orologio locale. Ad ogni cambio di secondo, il registro di Regolazione dell'Orologio viene aumentato o diminuito di CLOCK.ADJUST (tipicamente 8), che ha l'effetto di aumentare o diminuire la frequenza dell'orologio e di conseguenza diminuire o aumentare il tempo per regolare l'orologio. Nel caso in cui l'offset residuo sia inferiore a CLOCK.MAX (tipicamente 128 ms), la frequenza dell'orologio viene regolata di una quantità minore e l'epoca dell'orologio viene regolata di una quantità proporzionale all'offset residuo.

5.3. Aggiustamenti di Fase a Passi

Quando la grandezza della correzione supera CLOCK.MAX (tipicamente 128 ms), viene eseguito un aggiustamento a passi. L'aggiustamento a passi viene utilizzato quando il tempo dell'orologio locale differisce significativamente dal tempo di riferimento, come dopo un riavvio o quando è richiesta una correzione a causa di un cambio di fuso orario. In un aggiustamento a passi, l'orologio viene impostato direttamente sul nuovo tempo, e tutte le stime in corso di frequenza e conformità vengono reinizializzate.

Il contatore Watchdog viene reimpostato a zero ogni volta che il registro di Regolazione dell'Orologio viene aggiornato. Se il contatore raggiunge il valore CLOCK.HOLDTC (tipicamente 2048 s o circa 34 minuti), il registro di Regolazione dell'Orologio viene reimpostato a zero. Questo fornisce isteresi e impedisce l'uso di dati di offset obsoleti.

5.4. Problemi di Implementazione

Il particolare modello di orologio locale descritto qui e nell'Appendice G si basa su un ciclo di retroazione di secondo ordine. La costante di tempo del ciclo è relativamente lunga, dell'ordine di diverse ore, al fine di minimizzare l'effetto dei ritardi di rete transitori e massimizzare la stabilità. Di conseguenza, le modifiche nella correzione della frequenza possono richiedere tempo considerevole per completarsi, specialmente dopo un riavvio o un aggiustamento di fase a passi. Al fine di accelerare la risposta del ciclo, il registro di Regolazione dell'Orologio può essere precaricato con l'ultimo valore calcolato prima di uno spegnimento.

Nell'implementazione Fuzzball viene fornita una struttura completa di monitoraggio e controllo per esaminare tutte le variabili dell'orologio locale e controllare il funzionamento dell'orologio. Inoltre, una funzionalità speciale fornisce una visualizzazione dell'ora del giorno che indica non solo la lettura dell'orologio, ma anche la conformità e se è disponibile una fonte di sincronizzazione valida. Informazioni aggiuntive sulla progettazione e l'implementazione dell'orologio locale Fuzzball possono essere trovate in [MIL88b].

Il modello di orologio locale descritto qui è specificamente progettato per funzionare con NTP e nell'ambiente Internet. Tuttavia, ci sono molte altre possibilità che potrebbero essere più appropriate in circostanze diverse. Ad esempio, alcuni sistemi potrebbero avere accesso a un oscillatore di precisione altamente stabile su intervalli lunghi, come un oscillatore al cesio o un ricevitore GPS. In tali casi, i meccanismi di correzione della frequenza potrebbero essere non necessari o inappropriati. Inoltre, se è richiesta un'alta precisione su intervalli di un secondo circa, come per le applicazioni vocali o video, i meccanismi di correzione di fase graduale descritti qui potrebbero non fornire una precisione adeguata. In tali casi, potrebbe essere necessaria qualche forma di predittore-correttore o ciclo ad aggancio di fase per interpolare tra aggiornamenti non frequenti da NTP.

Come menzionato in precedenza, in alcune configurazioni potrebbe essere disponibile un impulso di temporizzazione di precisione distanziato a intervalli di un secondo. In tali casi, potrebbe essere appropriato utilizzare il segnale PPS per disciplinare la frequenza dell'orologio locale, utilizzando NTP per disciplinare la numerazione dei secondi, minuti, ore e giorni. Questo può fornire precisioni dell'ordine dei microsecondi fornendo comunque un tempo UTC autentico. In tali casi, è necessario prestare attenzione che la fonte di numerazione non fallisca senza intraprendere azioni appropriate per sopprimere ulteriori aggiornamenti dal segnale PPS.