夏休みの自由研究をしています(^ ^)

題材はNTPサーバです。
NTPサーバって、今ではWindowsなんかでも普通に参照して時計合わせに使われていますが(知らない人も多いかも)、このNTPサーバのトラフィック増加を狙った攻撃もあるそうです。
以前よりGPSを使ってStratum 1のNTPサーバを構築できることは知っていましたが、チャレンジしてみましたよ♪

今回はテスト用のNTPサーバを3台用意しています。

  • NTPサーバ1はGPSのPPS信号とNMEAのデータをGPIOから直接取り込んでいるRaspberry Pi。Linuxのkernelにパッチを当ててGPIOを直接見ています。
  • NTPサーバ2はGPSのPPS信号とNMEAのデータをRS-232Cから取り込んでいるFreeBSD。
    HPのMicroServerという小さなサーバ機にシリアルカードを追加&PPS信号対応の為にkernelは作り直した9.3Rです。
  • NTPサーバ3は普通に立ち上げたRaspberry Pi。NTPの参照先はNICTさんです。

それぞれ5分に1回、cronでntpqコマンドを実行して、offset値をMRTGで表示させています。5分ごとのデータ収集なので、その間のバースト的なズレはあるかもしれませんが、NTPが落ち着くのに5分以上かかるので変化があるかないかは分かるでしょう。

まずはどの程度ズレるのかを比べます。MRTGではマイナス値が表示できないそうで、3mSecのオフセットをかけています。この図だと、3mSecを基準に±3mSecが見える事になりますね。

これ以降の画像はクリックで拡大表示されます。

まずはGPSを利用したRaspberry Pi
20140808_ntp-1

GPS利用のFreeBSD
20140808_ntp-5

NICTさんを見ているRaspberry Pi
20140808_ntp-3

GPSを利用したStratum 1の上記2台は、LAN内に存在しますから伝送に伴うDeleyはないので有利と言えば有利ですが、やはり安定していますね。
NICTさんを見ているRaspberry Piは時々3mSec以上ズレるみたいです。

次にズレ幅を表示させてみました。以下の図はズレ具合に応じて縦軸が変わっていますのでご注意ください。

GPS利用のRaspberry Pi
20140808_ntp-2

GPS利用のFreeBSD
20140808_ntp-6

NICTさんを見ているRaspberry Pi
20140808_ntp-4

ズレ幅を見てもらうと分かると思いますが、直接GPIOを見ているRaspberry Piは5分平均で見てもまず1μSecずれる事がありません。nSecな世界ですね(^ ^)
FreeBSD機はシリアルボードの割り込みが関係している様な気もしますが、それでも100μSecを超える事は稀です。これなら一般的な利用であれば十分な精度ではないでしょうか?ネットワーク等の負荷に対しても、Raspberry Piよりパワーのあるサーバ機ですから、そうそう大きくズレる事は無いと思います。
※この測定中に結構コンパイルをしたりしてCPUの負荷は掛けてみましたが特に問題なかったようです。
NICTさんは5mSec程度ズレる事があるみたいです。NICTさんのNTPサーバ(これ、ASICだったかな?で組んだ専用機です)の問題と言うより、ネットワークの負荷要因が大きいでしょうね。それでも一般的な利用では全然問題ないかと。
追記:NICTさんのNTPサーバはFPGAで組まれていました。こういうのらしいです。

ある程度のクライアントがある企業等のネットワークで、トラフィックを低減する為にローカルなNTPサーバを立てている場合もあるかもしませんが、ちょっと手を加えればStratum 1で構築できるのですから良いかもしれません。例えばリースアップする様なサーバ機にOSとNTP関係をインストールしてGPSをつなげばあなたの環境でもStratum 1♪
とは言え、GPSユニットを含めてお店で買ってきてポンッという訳にはいかないので、ちょっとだけハードルは高いかも(^ ^)
※例えば、GPSモジュールだったら格安ですけれどサーバ機とつなぐのにはシリアルのレベルコンバータが必要だったりしますよね。でも、一番はGPSのアンテナを設置できる場所からサーバまでの距離ですかね?簡単に手に入るGPSユニットの完成品でもケーブル長は数mでしょう。これを伸ばす仕掛けもあるんですけれど、秘密!!(いや、とっても簡単なんですけれどね?)
※ちなみに、ここまで来るのに3ヶ月程試行錯誤しました?(笑) 1度同期しても数時間とか数日で同期が外れるとか。原因が分かれば大したことじゃないのですけれどね?(^ ^)
→ 色々と実験された方々のレポートが上がっていますけれど、構築手順でちょっとな?と思われるものもあったという事です(^ ^)/
※Raspberry Piのセルフコンパイルでkernelを作ると1晩かかる(何かしくじるともう1晩)な世界が嫌で、IntelなLinuxでARMなRaspberry Piのクロスコンパイル環境も作ってみたり・・・とか!色々収穫が大きかったですね?

グラフを見ると、面白い事があります。1週間ほど前の金曜日に、GPSを見ているRaspberry PiとFreeBSDの両方とも数百μSec程ズレる事があったんです。GPSモジュールは別ですし、なんで2台一緒にズレたのかは不明。NICTさんはソースがGPSじゃなかったはずなので、ひょっとしたらGPSの衛星側で何かあったのかもしれないですね(^ ^)