web-dev-qa-db-ja.com

w32tm / stripchartを使用して、2つのWindowsホストの時間変動を判断することは現実的ですか? 2つのホストの時間変動を発見するより良い方法は?

w32tm.exeのオプションstripchartを使用して、2つのホストの時間変動を(非常に小さな誤差範囲内で)判断することは実行可能ですか? w32tm.exestripchart関数は、Windows Timeサービス自体が使用するアルゴリズムとは別のものであることに注意してください。

そうでない場合、いくつかの代替方法は何ですか?

おかげで、

マット

6
mbrownnyc

あなたの最初の質問に対する答えは、「はい、w32tm.exe(Windows Time)は2つのネットワークホストの時間変動を非常に小さな誤差範囲(相対条件)で測定できます。」です。

2番目の質問への答えは、「はい、2つのホスト間の時間変動を測定するより良い方法があります。Microsoftはそのように言っています here 。彼らはあなたに [〜#〜] nist [ 〜#〜] は、おそらくw32tm.exeよりも優れている他のソフトウェア(およびハードウェア)の全リストを示しています。Microsoftは明らかにw32tm.exeをサポートしていないため、それらの多くは確かにそうです。超高精度ツール。」

Windows Time(およびw32tm.exe)はRFC 1305(NTPv3)に準拠しており、ネットワーク遅延の補正が含まれています。 ソース および ソース 。ネットワーク遅延の補正は、ネットワークタイムプロトコルの非常に基本的な機能の1つです。 (NTPv3が使用するMarzulloのアルゴリズムを参照してください。)

あなたの質問について私を苛立たせているのは、高精度があなたにとって非常に重要であるということですが、あなたはあなたが必要とする正確な精度についてのヒントを与えません。 1秒? 1ミリ秒? 1ナノ秒?汎用コンピュータは、プロセッサが受信するクロック割り込みの周波数にバインドされたクロック分解能を備えています。これは、通常32.768で動作する水晶発振器によって制御されますKHz(2の累乗))ただし、温度、電圧などの影響を受けます。通常のWindowsマシンのHALは、デフォルトで、リアルタイムクロックを15.6ミリ秒ごと、つまり1秒あたり約64回起動するように構成します。ただし、RTC 1msまで下げ、ソフトウェアを介して15.6ミリ秒のタイムスライスをさらに高性能なアプリケーション用のさらに小さなスライスに分割することもできます。それにもかかわらず、NTPタイムスタンプ自体は64ビット符号なしの固定小数点数なので、理論的には約232ピコ秒の精度の制限がありますが、Windows Timeの実装はそれに近づきません。WindowsTimeはNTP精度-6を表示し、 t最新の最も優れたNTP=アルゴリズムの一部をサポートしているため、実際にはおそらくn 1つのハードウェアクロック刻み、またはプラスまたはマイナス16ミリ秒よりも厳しい精度を確実に生成します。

汎用オペレーティングシステムは、特に実行中のスレッドが常にプリエンプトされるユーザーモードでタイムキーピングアルゴリズムが実装されている場合、特別に優れたクロックではありません。高精度の時計は高価です。

clockres

上の図は、システムのクロック割り込みの頻度です。クロック割り込み(32ビットWindowsのIRQL 28および64ビットWindowsのIRQL 13)であっても、プロセッサ間割り込みなどのより高い割り込みによって優先され、正確な時間の計算が延期される可能性があります。ナノ秒。

NTPに戻ります。

w32tm /stripchart /computer:10.0.1.8は、あるWindowsマシンと別のWindowsマシンの間の時間差をテストするための完全に有効な方法です。これは、前述のようにNTPv3に準拠していることを意味するネットワーク遅延を考慮しています。しかし、私の言葉をそれに取ってはいけません。 Wiresharkトレースでトランザクションを確認できます(w32tm.exeからWindowsに送信されたクライアントパケットNTPサーバー):

Wireshark NTP

Microsoftは、Windows Timeを使用して1秒未満の精度を保証していません。製品が機能するためにサポートする必要がないためです。ただし、これは、w32tm.exeが1秒未満の精度を維持できないことを意味するものではありません。

trulyがこれよりも正確な時間を必要とする場合、わずかに使用するNTPの別の実装で、余分なミリ秒または10の精度を求める可能性があります。アルゴリズムは異なりますが、本当により正確な時間が必要な場合は、個人的にはNTP=を推奨しません。セシウムクロックをマシンに直接配線し、プリエンプティブオペレーティングシステムを使用しません。 。

編集5/2/2017:上記の情報は古く、Windows Server 2016以降には必ずしも適用されません。マイクロソフトは、後のオペレーティングシステムでWindows Timeの精度を大幅に改善しました。

6
Ryan Ries

w32tm.exestripchartアカウント(またはその方法)は、レイテンシとジッターを考慮しています。代わりに、私は ntpメーリングリストのスレッド を見つけました ユーザーに指示しました レイテンシとジッターを測定する3つの追加のソリューションに:

0
mbrownnyc