■クライアント時刻の構成を確認する
contosoW1 というホスト名を持つ Windows ベースのクライアント コンピューターから
クライアント構成を確認する場合は、次のコマンドを実行します。
<Windows コマンド プロンプト>
w32tm /query /computer:contosoW1 /configuration
このコマンドの出力には、クライアントに設定されている W32Time 構成パラメーターが
一覧表示されます。
Windows Server 2016 以降、 時刻同期アルゴリズム の機能強化により、
コメント要求 (RFC) 仕様との整合性がサポートされます。
そのため、複数のピアを指すローカル タイム クライアントを設定する場合は、
3 つ以上のタイム サーバーを準備することをお勧めします。
タイム サーバーが 2 つのみの場合は、NtpserverUseAsFallbackOnly フラグ (0x2) を
指定して、いずれかの優先順位を下げます。
たとえば、ntpserver.contoso.com より clock.adatum.com を優先したい場合は、
次のコマンドを実行します。
<Windows コマンド プロンプト>
w32tm /config /manualpeerlist:”ntpserver.contoso.com,0x8 clock.adatum.com,0x2″ /syncfromflags:manual /update
また、次のコマンドを実行し、出力内の NtpServer の値を読み取ることもできます。
<Windows コマンド プロンプト>
reg query HKLM\SYSTEM\CurrentControlSet\Services\W32Time\Parameters
■コンピューターのクロック リセットを構成する
w32tmコンピューターの時計をリセットするために、まずCurrentTimeOffset、Phase Offsetとも
呼ばれる現在の時刻とコンピューターの時計の時刻との間のオフセットが確認され、
オフセットがMaxAllowedPhaseOffset 値未満であるかどうかが特定されます。
・CurrentTimeOffset ? MaxAllowedPhaseOffset:
クロック レートを使用してコンピューターの時計を徐々に調整します。
・CurrentTimeOffset > MaxAllowedPhaseOffset:
コンピューターの時計をすぐに設定します。
クロック レートを使用してコンピューターのクロックを調整するには、
w32tmPhaseCorrection値を計算します。
このアルゴリズムは、Windows のバージョンによって異なります。
・Windows Server 2016 以降のバージョン:
PhaseCorrection_raw = (CurrentTimeOffset) ÷ (16 × PhaseCorrectRate × pollIntervalInSeconds)
MaximumCorrection = (CurrentTimeOffset) ÷ (UpdateInterval ÷ 100)
PhaseCorrection = min(PhaseCorrection_raw, MaximumCorrection)
・Windows Server 2012 R2 以前のバージョン:
PhaseCorrection = (CurrentTimeOffset) ÷ (PhaseCorrectRate × UpdateInterval)
Windows のすべてのバージョンで、同じ最終方程式を使用して PhaseCorrection が確認されます。
PhaseCorrection ? SystemClockRate ÷ 2
※注意
次のオペレーティング システムは、KB5006744 以降の累積的な更新プログラムを
適用するため、Windows Server 2016 以降のバージョンの数式を使用します。
・Windows Server 2025
・Windows Server 2022
・Windows Server 2019 バージョン 1809
・ウィンドウズ11
・Windows 10 バージョン 1809
これらの数式では、 PhaseCorrectRate、 UpdateInterval、 MaxAllowedPhaseOffset、
SystemClockRate はクロック ティック単位で測定されます。
Windows システムでは、1 ミリ秒は 10,000 クロック ティックです。
レジストリで MaxAllowedPhaseOffset 値を構成できます。
ただし、レジストリ パラメーターは、クロック ティックではなく秒で測定されます。
SystemClockRate値とpollIntervalInSeconds値 (秒単位) を表示するには、
コマンド プロンプト ウィンドウを開き、次のコマンドを実行します:
w32tm /query /status /verbose。
このコマンドは、次の行のような出力を生成します。
<出力>
Leap Indicator: 0(no warning)
Stratum: 1 (primary reference – syncd by radio clock)
Precision: -23 (119.209ns per tick)
Root Delay: 0.0003538s
Root Dispersion: 0.0100002s
ReferenceId: 0x00000000 (unspecified)
Last Successful Sync Time: 5/23/2023 7:51:39 PM
Source: VM IC Time Synchronization Provider
Poll Interval: 6 (64s)
Phase Offset: -0.0000013s
ClockRate: 0.0156250s
State Machine: 2 (Sync)
Time Source Flags: 3 (Authenticated Hardware )
Server Role: 0 (None)
Last Sync Error: 0 (The command completed successfully.)
Time since Last Good Sync Time: 15.7344985s
出力では、ポーリング間隔はクロック ティックと秒単位で一覧表示されます。
式では、秒単位で測定された値が使用されます (かっこ内の値)。
出力には、クロック レートが秒単位で一覧表示されます。
クロック ティックで SystemClockRate 値を計算するには、次の式を使用します。
(value in clock ticks) = (value in seconds) × 1,000 × 10,000
この数式では、次の変換要因を使用します。
・1 秒は 1,000 ミリ秒です。
・DateTime.Ticks プロパティの説明に従って、1 ミリ秒は Windows システムで
10,000 クロック ティックに相当します。
例えば次が挙げられます。
・SystemClockRateが 0.0156250 秒の場合、数式によって生成される値は
156,250 クロック ティックです。
・延長すると、5 分が 5 × 60 × 1000 × 10000 = 3,000,000,000
クロック ティックになります。