Timekeeping & NTP in Linux

De-a lungul istoriei, au fost create dispozitive din ce în ce mai performante pentru măsurarea timpului. Vechii Egipteni foloseau obeliscuri uriașe pentru a urmări mișcarea soarelui, iar Arabii au inventat ceasurile bazate pe greutăți. Astăzi însă, ceasurile atomice au devenit principalul punct de referință în măsurarea timpului.

O mare parte din tehnologiile folosite pe scară largă depind de o măsurare cât mai precisă a timpului. Sistemul de poziționare globală (GPS) folosește mesaje ce conțin informații despre timp transmise de cel puțin 24 de sateliți ce orbitează Pământul. Numeroase alte aplicații medicale, militare și astronomice se bazează în mare măsură pe gradul de precizie cu care măsoară timpul.

Majoritatea ceasurilor atomice folosesc oscilația stărilor de energie a atomului radioactiv de Cesiu 133. Sistemul internațional de unități (SI) definește secunda ca durata a 9 192 631 770 oscilații ale atomului de Cesiu când este supus unui câmp electromagnetic.

Chiar și dispozitivele personale au nevoie de o evidență cât mai exactă a trecerii timpului. Aspecte precum fusuri orare sau variația orei de vară/iarnă nu fac decât să complice problema și, de aceea, sistemele de operare fac aceste conversii exclusiv pentru confortul utilizatorului. În realitate, dispozitivele electronice folosesc timpul universal coordonat (UTC).

Sistemele de operare compatibile POSIX (Unix, Linux, etc.) măsoară timpul ca numărul de secunde ce s-au scurs de la 1 ianuarie 1970 ora 00:00 UTC, dată numită și Unix epoch. Această valoare poartă denumirea de Unix timestamp, și poate fi obținută cu ajutorul comenzii date +%s.

Modul în care un computer personal ține evidența trecerii timpului este destul de imprecis și, fără o intervenție externă, ceasul acestuia poate suferi decalaje semnificative față de ora reală. Pentru a adresa această problemă, sistemele de operare moderne folosesc diverse mecanisme pentru a compensa, cel mai popular dintre acestea fiind Network Time Protocol (NTP).

NTP se bazează pe o ierarhie de servere numite surse de ceas. Serverele de NTP cele mai apropiate de ceasul atomic poartă denumirea de stratum 0, și oferă servicii de sincronizare numai serverelor de stratum 1. Serverele de stratum 1 sincronizează serverele de stratum 2, și tot așa, pentru un număr arbitrar de strata. Majoritatea serverelor publice de NTP sunt de stratum 2 sau mai mare.

Protocolul măsoară timpul parcurs de pachete între server și client, ajustând ceasul intern în funcție de acest delay.

Distribuțiile populare de Linux utilizează două mecanisme de sincronizare a timpului cu ajutorul NTP: ntpdate și ntpd. Primul se folosește pentru o singură sincronizare cu un server NTP și este inclus în majoritatea distribuțiilor:

$ ntpdate pool.ntp.org

Daemonul de NTP – sau ntpd – monitorizează permanent ceasul sistemului și efectuează ajustări fine în mod continuu. Instalarea ntpd în Ubuntu se face foarte ușor:

$ sudo apt-get install ntp

Acesta folosește în mod implicit serverul ntp.ubuntu.com pentru sincronizare, dar poate fi configurat să aleagă alte servere (mai apropiate geografic, de pildă). Fișierul de configurare este /etc/ntp.conf și conține numeroase opțiuni, dar cele mai importante sunt adresele serverelor:

server ntp.ubuntu.com
server pool.ntp.org

Când daemonul de NTP se inițializează, acesta contactează toate serverele declarate, compară răspunsurile între ele și îl alege drept sursă principală pe cel mai precis.

Proiectul NTP Pool (pool.ntp.org) oferă un număr mare de servere de NTP în toată lumea. Acestea sunt administrate de voluntari, care își oferă resursele propriului sistem pentru a pune la dispoziția a milioane de clienți servicii gratuite de sincronizare.