2013-10-14 6 views
5

Ich las NTPv4 rfc, um den von ntp verwendeten Mechanismus besser zu verstehen. So weit scheint die Grundidee einfach zu sein. Aber ich bin ein wenig verwirrt in Bezug auf wie NTP Clock Discipline works.Wie funktioniert NTP Clock Discipline?

In NTPv4 sagt es eine hybride PLL/FLL wird verwendet, um die Uhr zu disziplinieren. Meiner Meinung nach - PLL sperrt die Serverphase und passt die Client-Uhr im Aktualisierungsintervall an. FLL sperrt die Taktfrequenz und passt die Client-Uhr im Aktualisierungsintervall an.

es sagt auch die PLL besser funktioniert, wenn es mehr Netzwerk-Jitter (Latenz Spikes) ist wo FLL besser funktioniert, wenn Uhr wandern ist die Frage (verschiedene Taktfrequenzen/Drift)

ich die Verwendung von Feedback verstehen Kontrolle, um sie anzupassen und kann auch verstehen, wie sie arbeiten, aus dem Diagramm in der NTP-RFC enthalten. Aber kann jemand erklären, wie NTP die FLL/PLL-Hybrid-Uhr-Disziplin nur aus dem vom Server empfangenen Paket implementiert?

Es wäre großartig, wenn jemand nur die Logik dahinter erklären könnte.

+2

Read [Adaptive Hybrid Clock Disziplin Algorithmus für das Network Time Protocol] (http://www.eecis.udel.edu/~mills/database/papers/allan.pdf) oder [NTP Uhr Disziplin Principles] (http://www.eecis.udel.edu/~mills/database/brief/clock/clock.pdf) von David L. Mills. – Arno

+0

Ich habe versucht, beide vor dem Stellen der Frage zu lesen, aber ich konnte den Mechanismus von FLL/PLL nicht verstehen, der auf diesen Referenzen beschrieben wird. Ich denke, RFC ist einfacher zu verdauen als das Papier und die Präsentation. Hauptsächlich, weil es "Leser-wissen-warum-es-ist-dort" Mathematik verwendet. Irgendwelche anderen Vorschläge? Vielen Dank. – fadedreamz

+0

Haben Sie das Buch von Prof. Mills versucht? – dfc

Antwort

3

Beantwortung abschließend die Frage:

Wie funktioniert NTP implementiert FLL/PLL Disziplin Hybrid-Takt nur von Paket vom Server empfangen?

erfordert die 90 Seiten des Dokuments: Network Time Protocol Version 4, Reference and Implementation Guide. Ich werde versuchen, hier eine Antwort zusammenzufassen.

Kurz gesagt, der NTP-Client erhält Zeitstempel von einem oder mehreren Servern und schätzt eine Phasenkorrektur ein. Dann wird die Korrektur allmählich angewendet, um Taktsprünge zu vermeiden.

Beide PLL oder FLL kann verwendet werden, aber das Dokument sagt

PLL in der Regel besser funktioniert, wenn Netzwerk-Jitter dominiert, während ein FLL besser funktioniert, wenn Oszillator schweifen dominiert.

Im Gegensatz zu NTPv3 werden in NTPv4 PLL und FLL simultan verwendet und kombiniert.

Feedback-Steuersystem

Die Uhr Disziplin als das Rückkopplungssteuerungssystem in der Figur 1.

enter image description here gezeigt implementiert ist 1: Clock Disziplin Rückkopplungsschleife

theta_R darstellt die Referenzphase, die durch den Kombinationsalgorithmus erzeugt wird und die beste Schätzung des Systemtaktversatzes relativ zu dem Satz von Servern darstellt.

theta_c stellt die Steuerphase des Systemtakts dar, der als variabler Frequenzoszillator (VFO) modelliert wurde.

V_d ist die Phasendifferenz theta_R - theta_c

V_S wird die Ausgabe des Taktfilter-Algorithmus, der die beste Offset Proben auszuwählen.

V_c ist das vom Loop-Filter erzeugte Signal, das die PLL und die FLL wie in der zweiten Abbildung kombiniert.

enter image description here Abbildung 2: Clock Disziplin Schleifenfilter

=== aktualisieren ===

die Details Phase Um zu verstehen, Offset und Frequenz-Offset-Berechnung, müssen Sie in die Referenzimplementierung tauchen . Ein guter Punkt zu beginnen, ist die Funktion packet()

/* 
* packet() - process packet and compute offset, delay and 
* dispersion. 
*/ 

im Broadcast-Server-Modus, ist die Berechnung wie folgt

offset = LFP2D(r->xmt - r->dst); 
delay = BDELAY; 
disp = LOG2D(r->precision) + LOG2D(s.precision) + PHI * 2 * BDELAY; 

wo r die empfangene Paketzeiger ist und das System s strucure. Dann wird die clock_filter Funktion

invocked
/* 
* The clock filter contents consist of eight tuples (offset, 
* delay, dispersion, time). Shift each tuple to the left, 
* discarding the leftmost one. As each tuple is shifted, 
* increase the dispersion since the last filter update. At the 
* same time, copy each tuple to a temporary list. After this, 
* place the (offset, delay, disp, time) in the vacated 
* rightmost tuple. 
*/ 

Die clock_filter selbst invocke die clock_select Funktion, und erst danach die clock_update Funktion aufgerufen wird.

Was zu beachten ist, ist, dass diese Algorithmen mit mehreren Uhren und nicht mit nur einem Server-Takt synchronisieren. Dies führt zu einer Komplexitätsebene und der Frage Wie man mit einem Server synchronisiert? hat keine direkte Antwort, da Algorithmen zur Synchronisation mit mehreren Uhren erstellt werden.

Das SNTP-Protokoll (Simple NTP) verwendet nur eine Serveruhr, aber es gibt keine offizielle Referenzimplementierung.

+0

Mein Hauptproblem war, wie es den phase_offset & frequency_offset in Bezug auf einen Server berechnet. (Phase Teil ist was du geschrieben hast als V_d = (theata_r - theata_c). Aber wie der frequency_offset berechnet wird? Ich habe eine Idee; aber nicht sicher, ob es richtig oder falsch ist. Wie auch immer diese Antwort wird jedem helfen, NTP zu verstehen , also gj :) – fadedreamz

+0

@fadedreamz Ich habe meine Antwort aktualisiert. –

+0

@OrtomalaLokni Ich weiß in der Dokumentation sagt SNTP kann nur mit einem Server synchronisieren, aber wenn ich NTP auf Arch konfiguriert (installiert diese Woche nach dem Installationsleitfaden) führte es zu der Annahme, dass ich SNTP installiert habe; Trotzdem konnte ich mehrere Server konfigurieren.Vielleicht liegt das daran, dass es, wie Sie sagen, keine offizielle Referenzimplementierung gibt und die Linux-Implementierung mehrere Quellen zulässt? Oder vielleicht gehen sie einfach zur nächsten Quelle in der Liste, wenn es einen Fehler gibt? – Assimilater