NTPD(8) FreeBSD システム管理者マニュアル NTPD(8)
名称
ntpd − Network Time Protocol (NTP) デーモン |
書式
ntpd [−aAbdgLmnPqx] [−c conffile] [−D level] [−f driftfile] [−k keyfile] [−l logfile] [−N high] [−p pidfile] [−r broadcastdelay] [−s statsdir] [−t key] [−v variable] [−V variable] |
解説 |
ntpd ユーティリティは、インターネットの標準時間サーバと同期をとって、シス テム時刻 (time of day) を設定し維持するオペレーティングシステムデーモンで す。 ntpd は、Network Time Protocol (NTP) バージョン 4 の完全な実装となっ ていますが、RFC-1305 で定義されているバージョン 3 に対する互換性も保って います。加えて、各々 RFC-1059 と RFC-1119 で定義されているバージョン 1 と バージョン 2 に対する互換性も保っています。 ntpd ユーティリティは多くの計算を 64-bit 浮動小数点演算で行ない、究極の精 度である約 232 ピコ秒を保つ必要があるときだけ、比較的扱いにくい 64-bit 固 定小数点操作を行ないます。現在の普通のワークステーションやネットワークで はこの究極の精度は達成できませんが、この精度は将来のギガヘルツ級の CPU ク ロックやギガビット LAN において必要となるでしょう。 通常、 ntpd は、起動時に設定ファイル ntp.conf(5) から読み込み、同期ソース や動作モードを決めます。また、機能が限定されますが、コマンドラインから全 ての動作を指定することにより、設定ファイルを使わずに実行することもできま す。これは、ローカルホストをブロードキャスト/マルチキャストクライアントと して設定し、全ての通信相手を、実行時にブロードキャストを待受け (listen) て決定する時には、特に有益です。 ntpd に NetInfo サポートが組み込まれている場合、デフォルトの ntp.conf(5) ファイルが読み込めず、また −c オプションによるファイルの指定もされていな いときに、 ntpd は設定を NetInfo より読み込もうとします。 ntpd の実行中は、 ntpq(8) および ntpdc(8) ユーティリティプログラムを使用 することで、さまざまな ntpd 内部変数を表示したり、設定オプションを変更し たりできます。 ntpd は起動時に umask(2) の値を調べ、もしそれが 0 ならば、 umask(2) を 022 に設定します。 以下にあげる引数が使用可能です: |
−a
認証モードを有効にします (デフォルト)。 −A −b −c conffile −d −D level −f driftfile −g −k keyfile −l logfile −L −m −n −N priority −p pidfile −P −q −r broadcastdelay −s statsdir −t key −v variable −V variable −x NTP はどのように動作するか 現代のオペレーティングシステムとハードウェアの大部分は、 time-of-year (TOY) チップを持っており、電源断の間も時刻を保持しています。マシンが起動 すると、このチップを使いオペレーティングシステムの時刻を初期化します。マ シンが NTP サーバに対して時刻同期を取った後で、オペレーティングシステムは そのチップの時刻を必要に応じ修正します。 TOY チップが存在しないか、何らか の理由で TOY チップの時刻とサーバの時刻の違いが 1000 秒より大きい場合、 ntpd は何か決定的にまずいことが生じたと仮定します。この場合に意味のある動 作は、オペレータが介在し手動で時計を設定することです。この場合、 ntpd は パニックメッセージをシステムログに出力し実行終了します。 −g フラグはこの チェックを上書きし、チップの時刻に関わらずサーバの時刻が時計に設定されま す。しかしながら、CMOS バッテリの故障やクロックカウンタの不調などのハード ウェアの故障から身を守るために、一度クロックを設定してから誤差が 1000 秒 を越えた場合、いずれにしても ntpd は実行終了します。 通常の状態では、 ntpd は、時刻が実質的に連続に推移し不連続が生じないよう に、時計を僅かな刻みで修正します。ネットワークの輻輳が著しい状態では、往 復遅延時間の変動 (jitter) が 3 秒を越え、同期距離 (これは、往復遅延時間の 半分と誤差量の項の和) が著しく大きくなる可能性があります。 128ms 以下のサ ンプルオフセットが存在しない時間間隔が 900 秒を越えないかぎり、 ntpd のア ルゴリズムでは、128ms を越えるサンプルオフセットを捨てます。オフセットが どのような値であっても、その後最初に採取されるサンプルが示す値で時計を設 定します。現実には、誤って時刻を設定し間違った警告を発生する率は、この処 理によりほとんどなくなったと言ってもいいほどに減少されます。 この動作の結果として、一度時計が設定されると、ネットワーク経路の輻輳と遅 延時間変動が極めて大きな場合であっても、 128ms を越えた変動は極めてまれに しか生じません。ときどき、特に ntpd が最初に起動したときには、誤差が 128ms を越えることがあります。ローカル時計の時刻がサーバと比べ 128 秒以上 先に進んでいる場合、これにより、逆向きの時計設定が生じることがあります。 アプリケーションによっては、この動作に耐えられないものもあるかもしれませ ん。コマンド行に −x オプションを含めている場合、時計の設定は決して行なわ れません。時刻の微調整のみを行ないます。 −x オプションを使うと決める前に、それによる問題を注意深く調査する必要があ ります。可能な最大微調整速度は 500 parts-per-million (PPM) に制限されてい ます。これは、NTP プロトコル設計とアルゴリズム設計が根拠とする正しさの原 理による結論です。結果として、ローカル時計が許容可能なオフセットに収束す るまでに長い時間を必要とする可能性があります。時計が許容可能な範囲外にあ る場合、1 秒につき約 2,000 秒が必要となります。その間は、ローカル時計は他 のネットワーク時計のどれとも一貫性はなく、このシステムは、正しく同期した ネットワーク時間を必要とする分散アプリケーションに利用することができませ ん。 上記の予防策にも関わらず、大きな周波数誤差が存在する場合に、ときどき、結 果として時間オフセットは 128ms の範囲を逸脱し、その際に、時刻設定または時 刻の微調整が必要となります。そのような時刻修正のあと、最初のサンプルも受 理可能な範囲外となるほど周波数誤差が大きいならば、 ntpd は、 ntp.drift ファイルが存在しない場合と同じ状態に入ります。この動作の意図は、周波数を 素早く補正し、通常の追跡モードに動作を戻すことにあります。最も極端な場合 (time.ien.it のことを思い出しますが) として、時刻設定/微調整による時刻補 正と、その後周波数補正とが生じることもあります。この動作は、このような場 合に、サーバを設定する際にキーワード burst を使う助けになります。 周波数の修正 動作モード デフォルトでは、 ntpd は、連続モードで動作します。このモードでは、複雑な 状態機械により決定される時間間隔で、いくつかある外部サーバのそれぞれに対 しポーリングを掛けます。状態機械は、それに付随して往復遅延時間の変動と発 振器周波数の逸脱 (wander) を測定し、ヒューリスティックなアルゴリズムを用 いて最適なポーリング間隔を決定します。通常は、ほとんどのオペレーティング システム環境で、この状態機械は 64 秒の時間間隔で開始し、状況に応じ、1024 秒まで段階的に増加させます。サーバへのアクセス集中を避けるため、微小なラ ンダム偏差も入れてあります。加えて、しばらくの間サーバが到達できない状態 になる場合には、ネットワークのオーバヘッドを減らすために、ポーリング間隔 を 1024 秒まで段階的に増加させます。 いくつかの場合では、 ntpd が連続モードで動作することが現実的でないことが あります。この場合、これまでは、普通の対応方法として、 cron(8) ジョブから ntpdate(8) プログラムを指定した時刻に実行させていましたが、このプログラム は、 ntpd が持つ信号処理、誤差チェック、緩和アルゴリズムに関する練り込み を持っていません。 −q オプションはこの目的のためにあります。このオプショ ンを設定することにより ntpd は、時計を 1 回設定した直後に実行終了します。 時計の初期設定の手順は、連続モードと同じものです。ほとんどの応用では、 server 設定コマンドで、 iburst キーワードを指定しようとすることになると思 います。このキーワードにより、メッセージが連続して矢継ぎ早に交換され、 データが整えられ、時計はおよそ 1 分間で設定されます。適当な期間、喪に服し た後に、 ntpdate(8) プログラムは引退ということになると思います。 純正の Solaris, Tru64, Linux, FreeBSD の場合がそうですが、時計周波数修正 についてカーネルサポートが利用可能な場合には、時計周波数の修正という有益 な機能が利用可能です。まず、 ntpd は、選択されたサーバに対し連続モードで 動作し、固有の時計周波数オフセットを測定し、周波数ファイルに記録します。 周波数とオフセットが定常状態になるまでに数時間掛かることもあります。その あと、 ntpd は停止し、必要に応じ単発モードで動作します。プログラム開始時 には、周波数はファイルから読み込みカーネル内周波数を初期化します。 ポーリング間隔制御 ダイアルアップサービスや従量性課金サービスなどの場合、最小間隔を数 10 分 にし、最大間隔を 1 日程度に増やすと便利かもしれません。通常の動作条件で は、時計修正ループがひとたび安定化すると、時間間隔は最小値から最大値まで 段階的に増えてゆきます。しかし、これは、修正ループが誤差を修正できる程度 まで固有時計周波数誤差が小さいことが前提です。ループの誤差補足可能範囲 は、64 秒の間隔において 500 PPM で、間隔を 2 倍にするごとに 2 の因数で減 少します。例えば、最小値 1,024 秒では、誤差補足可能範囲は 31 PPM にしか過 ぎません。固有誤差がこの値より大きい場合、ドリフトファイル (drift file) ntp.drift は、この制限以下の剰余誤差を減少させるため特別扱いせねばなりま せん。この状態が一度生じると、ドリフトファイルは自動的に 1 時間に 1 回更 新され、それ以後のデーモンの再起動の際に周波数を初期化できるようになりま す。 スーハーフィルタ(huff-n’-puff
filter) スーハーフィルタは、これらの場合に目立つ時間オフセットを補正するために設 計されました。これは、他のトラフィックが存在しないときの伝播遅延の知識に 依存します。普通の状況でこれが生じるのは業務以外の時間です。このフィルタ は、最近の時間間隔で通常は数時間測定した中で最小遅延を記憶するシフトレジ スタを保持します。遅延が厳しい状況では、このフィルタは、問題の遅延と最小 遅延の差と、オフセットの符号とを用いて問題のオフセットを補正します。この フィルタの名前は、オフセットの符号に依存した、負の補正 (ハーと吹く) と正 の補正 (プーと吹く) を表しています。 このフィルタは tinker コマンドと huffpuff キーワードにより有効にされま す。これは、 ntp.conf(5) に詳しい説明があります。 関連ファイル |
/etc/ntp.conf
デフォルトの設定ファイル名 関連項目 |
ntp.conf(5), ntpdate(8), ntpdc(8), ntpq(8) 提供されているマニュアルページに加えて、包括的なドキュメントが world wide web 上の http://www.ntp.org/ にあります。このドキュメントのスナップショッ トが HTML 形式で /usr/share/doc/ntp にあります。 |
David L. Mills, Network Time Protocol (Version 1), RFC1059. David L. Mills, Network Time Protocol (Version 2), RFC1119. David L. Mills, Network Time Protocol (Version 3), RFC1305.
バグ
ntpd ユーティリティはかなり大きくなってしまいました。巨大とは言いません が、ワークステーションで高優先度で実行する ntpd として望ましい大きさを超 えてしまいました。特に、階層数 (stratum) の大きいワークステーションより は、高負荷のプライマリサーバにあわせて、かさばる凝った特徴の多くが設計さ れているからです。 FreeBSD 10.0 August 2, 2001 FreeBSD 10.0 |