NTP w32tm Debug

Die Hauptaufgabe des TimeService ist Kerberos sicherzustellen, wobei eine Genauigkeit von 5 Minuten ausreicht. Der Windows TimeService ist nicht für high accuracy environments geeignet. Braucht man eine garantiert genauere Zeit, kommt man um den Einsatz von 3rd Party Zeitgebern nicht herum

‚MaxAllowedPhaseOffset’=0x0000012C

entspricht 300 Sekunden  (default für Domain Clients, 1 für non Domain Clients). Sollte diese Abweichung erreicht und erkannt werden, erfolgt ein sofortiger hard reset, ohne eine stufenweise Annäherung.

http://blogs.technet.com/askds/archive/2007/10/23/high-accuracy-w32time-requirements.aspx

Das Einschalten des w32tm debuggings

w32tm /debug /enable /file:c:\w32debug\w32time.log /size:10000000 /entries:0-116
    • auf C: einen Ordner w32debug erstellen
    • „size“ definiert die Grösse des files in Bytes, hier 10MB
    • „entries“ gibt die Detailtiefe wieder (0-300)

jetzt werden 3 Registry Einträge unter HKLM\SYSTEM\CurrentControlSet\Services\W32Time\Config erstellt

    • REG_SZ FileLogEntries
    • REG_SZ FileLogName
    • REG_DWORD FileLogSize
w32tm /debug /disable # deaktiviert das debugging

Das File wird erzeugt, bleibt aber leer bis der Service (Windows Time) restartet wird.
Die Zeit innerhalb des Logs bezieht sich immer auf UTC, spirch Deutsche Sommerzeit -2h, Winterzeit -1h

ein Beispiel aus dem Log:

‚FrequencyCorrectRate’=0x00000004
‚PhaseCorrectRate’=0x00000001
‚UpdateInterval’=0x00007530

 

zu sehen ist der Offset via w32tm /stripchart. Der erste Wert -57,50 steigt noch auf -57,52, dann erfolgt die Korrektur.

 

CurrentTimeOffset / (PhaseCorrectRate * UpdateInterval) < SystemClockRate /2 Diese Formel ermittelt ob die Zeit graduell (PhaseCorrectRate), oder dies nicht mehr aussreichend ist, und schneller (FrequencyCorrectRate) angepasst werden muss.  Solange also die aktuell abweichende Zeit geteilt durch 30.000 (UpdateIntervall) mal 1 (PhaseCorrectRate ) kleiner ist als die halbe SystemClockRate (156000 clock ticks / 2) und die 5 Minuten nicht überschritten werden (MaxAllowedPhaseOffset) wird graduell angepasst.

57,52 / (1*30.000) < 156.000 / 2
575200000 / 30000 < 78000
19173 < 78000
 

Rechnung ist Wahr, von dem her wird die Uhr schrittweise langsam zurückgesetzt Zu bedenken ist auch, das Funktionen die SystemClockRate anpassen können (timeBeginPeriod). Es kann daher durchaus geschehen das eine Anpassung einer Abweichung von +/- 10 Sekunden schneller geschieht, als bei evtl. 60 Sekunden eines anderen Systems.

MinPollInterval’=0x0000000A
MaxPollInterval’=0x0000000F

Diese Werte sind in binär hoch hex Sekunden. Minimum ist also 1024 Sekunden (17 Minuten). Maximum ist 32768 Sekunden (9 Stunden).  Das sind Standardwerte für Domain und non- Domain Clients, Domain Controller setzen ein Min/Max von 6 und 10. Diese Werte sind fix und nur über die Registry editierbar.

Clock Ticks

Parameter werden meist in Sekunden oder Clock Ticks angegeben

  • 1 minute = 60 sec
  • 1 sec = 1000 ms
  • 1 ms = 10,000 clock ticks unter Windows

3 minuten sind 3*60*1000*10000 = 1800000000 Clock Ticks

ClockDispln

mit der ClockDispln wird gegen das Auswandern der Zeit gegengehalten. Erfolgt ein erneutes Polling wird erneut berechnet ob via FrequencyCorrectRate oder PhaseCorrectRate gearbeitet wird, oder evtl. ein hard reset zu erfolgen hat.

Holger Wache

Holger Wache