目次
Raspberry Pi で NTP Stratum-1 Server を作る(検証編)
Raspberry Pi で NTP Stratum-1 Server を作る.と言うタイトルの記事で,Raspberry Pi を使って NTP Stratum 1 構築記録を記載しています.
この NTP Stratum 1 サーバは,その後,pool.ntp.org に参加し,2014年12月末で約6ヶ月経過しました.
ここで一度,この Raspberry Pi NTP Stratum 1 サーバが,どの程度実用的なのかを考えるために,以下の観点で検証してみます.
- どれくらいの精度を持っているか.
- pool.ntp.org に参加してどれくらいのCPU負荷,トラフィック負荷になっているか.
どれくらいの精度を持っているか.
精度を調べるために,リファレンスサーバ(GPS)との時間差を調べてみます.
http://www.ntp.org/ntpfaq/NTP-s-trouble.htm#Q-TRB-MON-STATFIL によれば,ntpd の loopstats ログの第3番目がそのオフセットのようです.
ntpd の loopstats ログの例を以下に示します.
- loopstats
57020 7.407 -0.000000121 -24.621 0.000004441 0.003173 4 57020 23.407 -0.000000214 -24.621 0.000000742 0.002968 4 57020 39.407 -0.000000042 -24.621 0.000004961 0.002776 4 ...
この検証では,loopstats は 2014-06-01 から 2014-12-29 までを検証します. (2014-12-30 のデータも少しだけ入っています)
リファレンスサーバとのオフセットを視覚的に確認するために,loopstats の offset でヒストグラムを作成します.
マイクロ秒単位での精度検証
まずは,マイクロ秒単位の精度でヒストグラムを作成してみました.結果を以下に示します.
殆ど 1マイクロ秒未満で同期できているようです.ヒストグラムではなく±1マイクロ秒未満に入っている割合を計算すると,2014-06-01 から 2014-12-29 までの間,88.81% は 1マイクロ秒未満で同期できていた ようです.
Network_Time_Protocol によると,Stratum 1 は誤差±1マイクロ秒未満との事で,この結果を見る限り,100% とは行きませんが,88%以上は NTP Statum-1 の要件を満たしていると考えます.Raspberry Pi は, NTP Stratum 1 専用設計では当然ありませんが,それでも 88% は NTP Stratum-1 の要件を満たしていると言えるのはすごいと考えています.
10ナノ秒単位での精度検証
次に,±1マイクロ秒未満で同期している部分の中から,10ナノ秒単位でどれくらいの精度を持っているかを調べます.マイクロ秒単位と同様に,10ナノ秒単位でヒストグラムを作成してみました.
10ナノ秒単位にしたのは,いきなり1ナノ秒単位にすると,ヒストグラムが広がりすぎてしまうと考えたので,まずは10ナノ秒単位でヒストグラムを作成してみました.
マイクロ秒単位の時は突出した山型分布の傾向がありましたが,10ナノ秒単位では,二山型の分布にも見えます.
このヒストグラムは10ナノ秒単位なのですが,一番多いところは,±10ナノ秒未満のところです.
ナノ秒単位での精度検証
どれくらいの精度を持っているか:結論
Raspberry Pi での NTP Stratum-1 Server は,100% とは行かないが,88% 以上 NTP STratum 1 の要件を果たす.
pool.ntp.org に参加してどれくらいのCPU負荷,トラフィック負荷になっているか.
この NTP Strasum 1 サーバは,ntp.netfort.gr.jp と言うホスト名で pool.ntp.org に参加しています.
http://www.pool.ntp.org/ja/scores/60.56.214.78 にアクセスすることで,現在のスコアが分かります.
2014-12-30 現在のスコアは 20.0 満点のようです.
また,この ntp.netfort.gr.jp は,Zabbix で運用監視しています.
ここでは,Zabbix のグラフから,pool.ntp.org に参加した場合のCPU負荷,トラフィック負荷を調べてみます.
なお,この NTP Stratum 1 サーバの Zabbix 監視は 2014-12-01 から開始したので,おおよそ1ヶ月間の記録になります.
CPU 負荷
トラフィック負荷
以下にグラフを示します.Zabbix のトラフィックは,eth0 全体のトラフィックであるため,純粋に NTP のトラフィックは測ることは出来ていませんが,一応でも参考に出来ると考えています.
http://www.pool.ntp.org/ja/join.html によると,
分かりやすく言えば、少なくとも384~512kbpsの(双方向の)帯域幅が必要と言うことです。
上記の帯域幅が必要だとの事で,Outgoing の平均が 273.85Kbps なので,記載の帯域幅よりは平均としては低いです.
しかし,最大で 7Mbps ほどの帯域が使われているようです.これは Zabbix Agent プログラムを NTP Stratum 1 に送り,何度か設定した時?と考えていますが定かではありません.
CPU負荷,トラフィック負荷:結論
これまでの結果を見る限りでは,CPU負荷,トラフィック負荷ともに,Raspberry Pi で十分に対応できる処理量だと考えています.
考察
NTP の精度は,ntpd の loopstats に頼っています.つまり ntpd の自己申告をそのまま信用しています.
よって,loopstats の読み方の間違いや,ntpd の不具合?によっては,実際の精度は異なるかもしれません.
そもそも,この様な場合には,異なる機器(測定器)で精度を測るべきでしょう.しかし私個人は,これ以外に精度を測ることが出来る機器を持っていません.
また,この NTP Stratum-1 Server は,いきなり1台で pool.ntp.org に参加しています.私見ですが,このいきなり1台での参加であるため,精度が落ちているのかも知れないと考えています.
教科書的には,NTP Stratum-1 の下に Stratum-2 をぶら下げて,pool.ntp.org に参加させるならば Stratum-2 を参加させるべきなのでしょう.それは pool.ntp.org 参加の際に考えたのですが,以下の点から,Stratum-1 としてそのまま pool.ntp.org に参加することにしました.
- Stratum-2 を導入しなければならない.ありていに言えばもう1台 Raspberry Pi を用意しなければならない.
用意できなくはないが,私の Raspberry Pi は何かしら実験用途に使っており,本音を言えばケチりたい. - 仮に Stratum-2 を導入したとして,そこで理屈として精度は落ちる.
精度が落ちたものを公開するよりは,なるべく高い精度を持っている時刻サーバを公開するほうが社会的に良いのではないか?
6ヶ月間の記録を見ると,このサーバは,100% NTP Stratum-1 の要件は果たせていませんが,しかし,Raspberry Pi NTP Stratum-1 Server は,pool.ntp.org に直接参加しながらでも88%は Stratum-1 の要件を果たしているのは,すごい事だと考えています.
Raspberry Pi を使うことで,低価格ながら,個人としては十分に実用的な NTP Stratum-1 サーバが運用できていると考えています.
検証データ
検証に用いたデータ(loopstatsやヒストグラム生成用のスクリプト) は,https://www.netfort.gr.jp/~tosihisa/raspberrypi_ntp_stratum1_loopstats_2014.tar.bz2 からダウンロードできます.