====== Raspberry Pi で NTP Stratum-1 Server を作る(検証編) ====== [[raspberrypi:log20140208_ntp_stratum_1|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 ログの例を以下に示します. 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 でヒストグラムを作成します. ==== マイクロ秒単位での精度検証 ==== まずは,マイクロ秒単位の精度でヒストグラムを作成してみました.結果を以下に示します. {{ :raspberrypi:histogram_loopstats_micro.csv.png?640 |}} 殆ど 1マイクロ秒未満で同期できているようです.ヒストグラムではなく±1マイクロ秒未満に入っている割合を計算すると,**2014-06-01 から 2014-12-29 までの間,88.81% は 1マイクロ秒未満で同期できていた ** ようです. [[wpja>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ナノ秒単位でヒストグラムを作成してみました. {{ :raspberrypi:histogram_loopstats_10nano.csv.png?640 |}} マイクロ秒単位の時は突出した山型分布の傾向がありましたが,10ナノ秒単位では,二山型の分布にも見えます. このヒストグラムは10ナノ秒単位なのですが,一番多いところは,±10ナノ秒未満のところです. ==== ナノ秒単位での精度検証 ==== ±10ナノ秒未満で同期している部分をナノ秒単位にしたヒストグラムを以下に示します. {{ :raspberrypi:histogram_loopstats_nano.csv.png?640 |}} 0ナノ秒で同期している時もあるようですが,個人的には俄には信じがたいです.もう少し検証が必要かもしれません. ==== どれくらいの精度を持っているか:結論 ==== 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 負荷 ==== グラフは二つ示します.一つはロードアベレージ,もう一つは CPU 利用率です. {{ :raspberrypi:chart2.png?640 |}} {{ :raspberrypi:chart2_1.png?640 |}} 負荷としては,ロードアベレージとしては低いとは言い難いですが,高いわけでもなく,十分に動けているようです. ==== トラフィック負荷 ==== 以下にグラフを示します.Zabbix のトラフィックは,eth0 全体のトラフィックであるため,純粋に NTP のトラフィックは測ることは出来ていませんが,一応でも参考に出来ると考えています. {{ :raspberrypi:chart2_2.png?640 |}} 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 からダウンロードできます. ~~DISCUSSION:off~~