あなたの 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