テレホンJJY を利用して Linux BOX の内蔵時計を合わせる(工事中)


あなたの Linux BOX の内蔵時計は合っていますか?私のは、合っていません。 NFS マウント上のファイルとか、結構困ります。特に make したときは、悲惨 です。職場では、 netdate というコマンドを cron で、定期的に起動して、 時間合わせを行うことで幸せになることが出来ました。 また、この時に基準にしているマシンは、NTP を利用して、時間合わせをしている ので、結果的に私の管理している Linux BOX の時計も JST に対して±1秒以内 で合っているようで、ちょっと嬉しいです。

そこで、自宅の複数の Linux BOX も、netdate で、時間同期を取ることにした のですが、この際だから、日本標準時に対しても±1秒程度で合っている 状態を実現したいと思ったわけです。

そこで、どのようなシステムがあるか物色していたのですが、その時見付けた のが、ここで紹介する、「電話回線による標準時供給システム(愛称:テレホン JJY)」です。これがどのようなシステムか詳しく知りたい方は、
郵政省 通信総合研究所 周波数標準課
のホームページをどうぞ、色々とありますよ。

私が、テレホンJJY に興味を持ったのは、必要なのは、普通のモデムが一台で、 他に特別なハードウェアを用意する必要が無いという点です。また、ppp で、 接続、NTP で時間合わせなら、他にも沢山実行している人がいそうで、 つまらないなぁと・・・・あと、遅いアナログ回線で、ダイヤルアップ 接続して NTP ってのも何だかなぁと言うのもありますけど。

何はともあれやってみよう!と言うわけで、テレホンJJY にアクセスしてみ ました。色々試してみたところ、だいたい、満足のいく結果になりました。
テレホンJJYサービス自体の能力としては、0.001 秒で同期できる能力がある ようですが、時間合わせプログラムをユーザープロセスとして実装する限り どんなに頑張っても、0.02 秒辺りが限度のように思えます。短い期間(10秒程度) テレホンJJY とLinux BOX の内蔵時計の時間差を計測したときのばらつきは、 比較的負荷の少ない状態で、私のマシンの場合±0.02秒程度ありました。 そして、そのばらつきは、見事に 0.01秒の倍数になってました。 実際に検証はしていませんが、これは多分 "/usr/src/linux/include/asm-i386/param.h" の "#define HZ 100" に拠るものだと思いますが、どうでしょう?
実際には必要ないけど、どうせなら出来るところまで、追求してみよう と思ったのですが、ある限度を越えると技が必要だと分かったので、 今回は、自分の能力を考えて、ほどほどでやめておくことにしました。

現在作成中のプログラムでは、±0.1秒の同期は余裕で出来ていると思います。 ただ、検証する手段を持っていませんが。今私が予定しているのは、一日一回、 cron で実行して時間合せを行う事で、この一日の間に、私のPC の時計は 2秒 以上もずれているんですから、十分すぎるほどの精度です。

気になるのは電話代ですが、東京都小金井市から兵庫県相生市間ですので、 一回に 40秒ほど 接続していなくてはならないので、一回 50円、月に 1,500 円といった感じ でしょうか?因に、接続時間 40秒のうち、30秒くらいが、モデムの ネゴシエーションとログイン認証だったりするのが、ちょっと悔しいです。

結局、定期的ではなく、ppp でダイヤルアップ接続をする毎に、NTP または、 netdate のほうが、経済的ではないだろうか?と言うのが、今回の結論か? でも、一応作ったので、この時間合せプログラムはプログラムは、このページから ダウンロードできるようにしたいと思います。

---------------------------------------------------------------
以上、随分昔に書いたっきり、ほっといていましたが、せっかくですので、 実際に作ってみたプログラムを置いておきますので、興味のある方は 持っていってください。
teljjy990117.tar.gz (6795bytes)

ソースファイルは EUC で日本語コメントが入っていますので、日本語に 対応できるエディタ(例えば mule )で、編集してください。
"teljjy/teljjy.c" は、是非目を通して、必要に応じて修正して下さい (特にモデムの初期化コマンド、使用するシリアルポートのデバイス名等)。
あとは、make して下さい。 make install なんて当然ありません。
teljjy というバイナリが出来上がればそのまま実行します。ただし、 シリアルポートにアクセスする権限のあるユーザーで実行する必要があります。 また、テレフォンJJY から得られた時刻に、コンピュータの時刻を合わせる ためには、root で実行する必要があります。
-debug というオプションをつけて実行すると、通信内容の一部が表示されて うるさいですが、どこでうまく行かないか調べるのに有効です。テレフォンJJY のホストが、SHIFT JIS の漢字コードを送ってくる関係上、-debug オプション を使用するときは、SHIFT JIS の扱える端末を使用した方が良いでしょう (例えば kterm -km sjis )。
"test/prtime.c" は、テスト用プログラムで、現在時刻を表示する ものです。実際に時刻があっているか時報を聞きながらチェックする時 に利用してください。常用するには CPU への負荷が大きくて、良くないです。 コンパイルは cc -o prtime prtime.c などとして下さい。


このページに関する、ご意見、感想、苦情はこちらまで 松本 徳真 / matsu@netfort.gr.jp