皆様、こんにちは。Windows プラットフォーム サポート担当の藤田です。
今回は、絶対 step モードで時刻同期させたくない場合の設定方法についてご案内します。
まずは、前回のおさらいもかねて Slew モードについてちょこっと説明します。
Slew モードで時刻同期するためには以下の 2 つの条件を満たす必要がありましたよね。
条件 1. NTP Client と NTP Server の時刻の差がMaxAllowedPhaseOffset で設定されている時間より小さいこと。
条件 2. AbsoluteValueOfCurrentTimeOffset/PhaseCorrectRate/UpdateInterval < System Clock Rate/2 の不等式が満たされること。
これが満たされないと、Step モードになってしまいます。
データベースのように時刻が重要な意味を持つアプリケーションにおいては、Step モードで時刻同期が行われ、時刻が過去にさかのぼるような状況になると、システムの動作に異常が発生することが懸念されます。
そこで、時刻が遡る時刻同期が発生しないように設定するための設定例を下記にご案内いたします。
上記のように、特に時刻の情報が遡ることによる問題が懸念されるサーバー機等につきましては、下記の設定をご参考に、パラメーターの調整を頂ければと存じます。
必ず Slew モードで時刻を同期させる方法・・・は、残念ながら、ありません。
このため、「これ以上時刻が進んでいた場合は時刻同期の処理を行わないようにする閾値」を指定する、MaxNegPhaseCorrection のレジストリ値を調整することで、時刻が遡る時刻同期を発生させないようにすることが可能です。
【ドメインコントローラーの場合】
ドメインコントローラー上でデータベースが運用されているシナリオは稀ですが、ここではご紹介します。
設定対象のコンピューターがシングル プロセッサの場合
****************************************
レジストリキー : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config
MaxAllowedPhaseOffset : 0x12c (300) ※ 既定の値となります
MaxPosPhaseCorrection : 0x0002a300 (172800) ※ 既定の値となります
MaxNegPhaseCorrection : 0x2 (2)
PhaseCorrectRate : 0x7 (7) ※ 既定の値となります
UpdateInterval : 0x64 (100)※ 既定の値となります
****************************************
設定対象のコンピューターがマルチ プロセッサの場合
****************************************
レジストリキー : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config
MaxAllowedPhaseOffset : 0x12c (300) ※ 既定値となります
MaxPosPhaseCorrection : 0x0002a300 (172800) ※ 既定値となります
MaxNegPhaseCorrection : 0x2 (2)
PhaseCorrectRate : 0x7 (7) ※ 既定値となります
UpdateInterval : 0x64 (100)※ 既定値となります
****************************************
SystemClockRate (シングルプロセッサでは約 10ms 、マルチプロセッサでは約 15ms) は環境によって変動することがあり、必ずしも、NTP クライアントと NTP サーバーの時刻差が 3.5 秒 / 5 秒 よりも小さければ Slew モードになるとは限りません。そこである程度の余裕を持たせる意味を含め、MaxNegPhaseCorrection を 2 秒に設定することにより、時刻が指定した時間以上進んでいる場合には、時刻修正を実施しないように設定する例をご案内しております。もちろん、パラメータを微調整することで、この範囲を変更することは可能です。
【メンバーサーバーの場合】
設定対象のコンピューターがシングルプロセッサの場合
****************************************
レジストリキー : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config
MaxAllowedPhaseOffset : 0x12c (300) ※ 既定値となります
MaxPosPhaseCorrection : 0xffffffff (4294967295) ※ 既定値となります
MaxNegPhaseCorrection : 0x78 (120)
PhaseCorrectRate : 0x1 (1) ※ 既定値となります
UpdateInterval : 0x7530 (30000)※ 既定値となります
****************************************
設定対象のコンピューターがマルチ プロセッサの場合
****************************************
レジストリキー : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config
MaxAllowedPhaseOffset : 0x12c (300) ※ 既定値となります
MaxPosPhaseCorrection : 0xffffffff (4294967295) ※ 既定値となります
MaxNegPhaseCorrection : 0xb4 (180)
PhaseCorrectRate : 0x1 (1) ※ 既定値となります
UpdateInterval : 0x7530 (30000)※ 既定値となります
****************************************
SystemClockRate は環境によって変動することがあり、必ずしも、NTP クライアントと NTP サーバーの時刻差が 150 秒 / 225 秒よりも小さければ Slew モードになるとは限りません。そこである程度の余裕を持たせる意味を含め、MaxNegPhaseCorrection を 120 秒 / 180 秒に設定することにより、時刻が指定した時間以上進んでいる場合には、時刻修正を実施しないように設定する例をご案内しております。
【WORKGROUP の場合】
WORKGROUP 環境については、いつも Step モードで時刻同期されると思ったほうが良い状態でしたよね。(前回の記事)
WORKGROUP 環境については、前回の記事の通り、MaxAllowedPhaseOffset の値のデータを変更していただく必要がございます。
例えば、ドメイン コントローラーやメンバー サーバーのように 300 に設定変更していただくなど。
そのうえで、MaxNegPhaseCorrection の値を変更していただければと存じます。
既定の状態において関連するレジストリとその値は次の通り。
MaxAllowedPhaseOffset : 1
PhaseCorrectRate : 1
UpdateInterval : 360000
例えば、メンバー サーバーの既定値に変更すると。。。150 秒 / 225 秒以内の時刻のずれであれば、Slew モードで時刻同期するようになります。
MaxAllowedPhaseOffset : 300
PhaseCorrectRate : 1
UpdateInterval : 30000
その後、MaxNegPhaseCorrection の値を変更し、120 秒 / 180 秒以上時刻がずれている場合は、時刻同期を行わないようにします。
設定対象のコンピューターがシングル プロセッサの場合
****************************************
レジストリキー : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config
MaxAllowedPhaseOffset : 0x12c (300)
MaxPosPhaseCorrection : 0xffffffff (4294967295)
MaxNegPhaseCorrection : 0x78 (120)
PhaseCorrectRate : 0x1 (1)
UpdateInterval : 0x7530 (30000)
****************************************
設定対象のコンピューターがマルチ プロセッサの場合
****************************************
レジストリキー : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config
MaxAllowedPhaseOffset : 0x12c (300)
MaxPosPhaseCorrection : 0xffffffff (4294967295)
MaxNegPhaseCorrection : 0xb4 (180)
PhaseCorrectRate : 0x1 (1)
UpdateInterval : 0x7530 (30000)
****************************************
しかし、このままでは。。。特に大きな時刻のズレが発生した場合、時刻同期しなくなってしまいます。
そこで、※SpecialPollInterval を設定することで、時刻同期の間隔を調整して、大きな時刻のずれが生じる前に時刻同期の処理を実施するように設定できます。
たとえば、1 時間に一度時刻同期を行わせたい場合は、この値を 3600 にご設定いただくことになります。
どの程度のペースでどのくらいの時刻のずれが生じるかにつきましては、お使いのハードウェアに依存しますので、環境に合わせて SpecialPollInterval の値を決定していただく必要がございます。
【設定方法】
****************************************
SpecialPollInterval の値を有効にするために、時刻同期先を指定するレジストリキーの値のデータを「NTP」を設定してください。
時刻同期先を指定するレジストリキー
-----------
レジストリキー : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Parameters
値の名前 : Type
値のデータ : NTP
-----------
SpecialPollInterval の値を使用して時刻同期させる為に、時刻同期先の IP アドレスと、フラグ (0x9) を設定してください。
NTPサーバーを指定するレジストリキー
-----------
レジストリキー : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Parameters
値の名前 : NTPServer
値のデータ : NTP サーバーの IP アドレス,0x9
-----------
SpecialPollInterval の値を設定してください。
SpecialPollInterval
-----------
レジストリキー : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpClient
値の名前 : SpecialPollInterval
値のデータ: 時刻のずれが大きくならない範囲で、間隔を指定します。
-----------
※ 特に大きな時刻のズレが発生しない環境におきましては、この SpecialPollInterval による時刻同期間隔の調整は不要です。
※ また、SpecialPollInterval を設定するNTPクライアントが Windows Vista 以降の場合以下文章番号 2638243の問題が発生する可能性もございます。
参照先のNTPサーバーの時刻が時刻が変動しやすい (SpecialPollInterval の間隔内に、5 秒以上のずれが発生する場合) などの場合は、他のパラメーターも調整して、上記の問題を回避する必要があります。
- 該当文書番号: 2638243
When
SpecialPollInterval is used as a polling interval, the Windows Time service does not correct the time if the service gets into Spike state
http://support.microsoft.com/kb/2638243/en-us
この KB に記載の現象や、時刻同期のスパイクの仕組みについては、また次回、ご紹介します!