こんな記事が出ていました。
Why computers still struggle to tell the time
(なぜコンピュータは今でも時間を測るのに苦しんでいるのか)
一般家庭のパソコンは、NTPでネットワーク越しに時間を取得しないと、出来の悪い腕時時計もびっくりの勢いでどんどん時間がズレていきます。
こちらの記事ではそのズレっぷりは、1ヶ月に4分も狂うとされています。
パソコンの時計は水晶の振動回数を用いて時刻を計測していますが、その回数はクリスタルの質や周囲の温度によって変化します。
As crystals age, their frequencies drift. The workload on a system can also affect a crystal’s output: the more work a system does, the hotter it gets, and the heat causes the crystal vibrations to increase in frequency.
(クリスタルの年代によって振動回数はズレます。システムの負荷も影響しますね。負荷が高いシステムは温度が高くなるので、その熱の影響で水晶の振動回数は増えてしまうのです。
たいていの場合はNTPで定期的にズレを直してあげれば事足りる話ですが、NTPではミリ秒単位のズレは許容しないといけません。システムによってはそれ以上の正確性が求められることもしばしばです。
例えば分散環境におけるサーバの時間。
GoogleはNTPの通信速度によって時間がズレることを気にして、より正確な時間を得ることに注力した結果、独自の原子時計をデータセンター毎に持つというアクロバティックな手法で各データセンターの時間の正確さを保つことにしたそうです。
Googleの最新データ分散技術が凄すぎる ―独自の原子時計を設置
ロボット工学のような精密な処理を行う場合でも、より正確な時間が求められるケースがあります。
Googleの例は大げさにしても、もっと正確な時間が欲しい場合、一般企業はどうしたら良いでしょうか。
紹介した記事では、NTPでは精度的に問題がある場合の為に、Precision Time Protocol(PTP)を紹介しています。
Precision Time Protocol (PTP), an IEEE standard for relaying the time over a network with greater accuracy than the industry standard Network Time Protocol (NTP).
(PTPはIEEE標準で定められた、NTPよりも高精度なネットワークを使ったタイムプロトコルです)
GPSに内蔵された原子時計を用いて、LAN内でより精度を持った時刻の同期をしようという規格になります。
NTPの時刻の元になっているのは原子時計です。しかしそこからネットワーク越しに時刻を反映させるまでの過程でズレがでます。
Even when checking an outside master clock, computer software will introduce additional distortions. The operating system typically digests network packets in batches, delaying time packets.
(外部のマスタークロックをチェックしても、ソフトウェアによってまずズレが起き、OSは例によって周期的にパケットを処理して遅延が起きます)
PTPを利用した場合でも、もちろん完全に正確とは言わないのですが、下記の点でメリットがあるそうです。
- マスタクロックをより頻繁に参照できる(NTPだと回数が限られているが、PTPなら毎秒参照しても良い)
- マルチキャストを用いて複数のサーバに同一のパケットを送信できる
ローカルでマルチキャストで取得するのであれば、外部のネットワークに個別に取りに行くよりは、正確さは確かに上がりそうですね。
でも、できればこうしたプロトコルで頑張るより、安価で100年くらいズレない時計でも発明されたら楽で良いなぁと怠惰なことも考えてしまいます。