Ur led är Windows tiden

2005-08-30

Det råder inte något tvivel längre om att alla datorer skall ha rätt tid. Allt från att incident och spårbarheten förbättras till något så enkelt som bekvämligheten av att alltid ha rätt tid. Det råder heller inte några tvivel att NTP/SNTP (RFC1305/RFC2030) är det självklara alternativet för att synkronisera tiden. I Unix-världen har dessa tidsynkroniseringsprotokoll varit en självklar del sedan urminnes tider. I Windows-världen var det först med Windows 2000 som detta blev en implementerad del i form av W32time.

Tyvärr var implementationen av W32time förenad med olyckliga val av standardvärden. Lagom till att Windows 2003/XP såg dagens ljus ombearbetades W32time rejält vilket dessvärre medförde att en hårdkodad begränsning smög sig in som försvårat användningen.

Standard mode för W32time är symmetric-active vilket normalt inte accepteras av officiella tidservrar utan dessa förutsätter att client mode används. Detta är dock inget större problem eftersom W32time kan konfigureras om i detta avseende, även om det inte är alldeles självklart hur detta görs. Här ger Microsoft KB875424 en bra vägledning.

Värre är det med den hårdkodade begränsningen i W32time som omöjliggör användning av tidservrar med allt för god precision. Närmare bestämt så anser W32time att ett svar från en tidserver med ett precision-värde som är lägre än -30 att betrakta som skräp. Varför man har valt detta värde är fortfarande oklart. Det finns inget stöd för detta i relaterade RFC””s och det finns heller inte någon rimlig förklaring från Microsofts sida.

Precision-värdet är inget annat en tidserverns egen uppskattning om hur bra den inbyggda klockan är. Det kan ses som en sorts kvalitetsindikator och värdet används främst vid ett urval av tidservers. Värdet anges i sekunder som ett heltal med basen 2. Exempelvis motsvarar precision-värdet -30 en precision av 0,9ns (2 upphöjt i -30). Det finns färdiga förslag till källkod för hur detta kan beräknas (exempelvis precision.c på www.ntp.org).

Microsoft har under sommaren bekräftat den hårdkodade begränsningen av precision-värdet i W32time och har med undertecknads hjälp reproducerat felet. Tyvärr har de inte i skrivande stund beslutat om detta skall rättas. Om det rättas återstår det att se om det sker i form av en hotfix eller en service pack. Högst troligt är detta åtgärdat i Vista. Tills vidare återstår två alternativ för att synkronisera tiden i Windows 2003 och i Windows XP. Antingen att välja tidservers med ett lägre precision-värde eller att använda tredjepartsprodukter för tidsynkronisering.

© 2005 Thomas Nilsson, Certezza AB