私はDebianベースのシステムを同期するためにSNTPを使用しています。 SNTPには時計を設定する2つの方法があります。
-s, --settod Set (step) the time with settimeofday().
-j, --adjtime Set (slew) the time with adjtime().
変換方法は、検出されたオフセットがゼロになるまで小さなステップでローカルシステムクロックを調整します。ロールバックは、主に時間が逆方向の時計に誤って反応するプロセスを妨げないように実行されます。
今時計を設定するためのステップバイステップの方法です。
時間的にSNTPを完了するのにどのくらいかかりますか?
システムをポーリングし、変換がまだ進行中であるというフィードバックを提供する方法はありますか?
答え1
今時計を設定するためのステップバイステップの方法です。 SNTPが変換を完了するのにどのくらいかかりますか?
私は経験がないSNTPソリューションなので、この点で本格的なNTPと変わらないと仮定されます。前者の場合は、ステッピングの場合は128ms、ロックおよび回転の場合は500ppm(496〜512ppm)という2つのターンキー制限を使用します。これは、最大許容オフセット128msが最大スルーレート512ppmで250秒(4.17分)以内に補償されることを意味します。ただし、実際には、目標時間に近づくにつれてスルーレートが計算された周期修正率まで徐々に減少するため、少し時間がかかることがあります。
システムをポーリングし、変換がまだ進行中であるというフィードバックを提供する方法はありますか?
ストックntptime
ユーティリティをお試しください。カーネルを直接照会し、ntpd
実行されていない場合でも機能します。もちろん、内部的にadjtime()
呼び出されると仮定しますntp_adjtime()
が、わかりません。
答え2
man adjtime
.
.
.
If the adjustment in delta is positive, then the system clock is
speeded up by some small percentage (i.e., by adding a small amount of
time to the clock value in each second) until the adjustment has been
completed. If the adjustment in delta is negative, then the clock is
slowed down in a similar fashion.
したがって、カーネルは毎秒時間調整を管理し、調整サイズは呼び出しstruct
に渡される値のサイズによって異なります。adjtime(3)
興味深いことに、Linuxはadjtimex(3)
RFC1305(NTPバージョン3)ベースのアプローチを使用しています。セクション 5 では、時間差を管理する方法について詳しく説明します。