【Windows】「ハードウェアクロック」と「システムクロック」と「NTP 時刻同期」の関係

今回は Windows の時刻同期について解説します。Windows の時刻は「Windows Time サービス(NTP)」「システムクロック」「ハードウェアクロック(RTC, Real Time Clock, リアルタイムクロック)」の3層に分かれているので理解できていないと正確な時刻を設定できなくなる場合があります。

 

Windows Time サービスを操作するコマンドはこちらの記事を参考にしてください。

【Windows】NTPコマンド(時刻同期系コマンド)【w32tm】

 

 

 

なぜ時刻ズレが発生するのか?

コンピュータにはマザーボードがあり、このマザーボード上に「時計(ハードウェアクロック)」「バッテリー」が内蔵されています。

 

通常、コンピュータの電源を落とすとデータはすべて消えてしまいますが、マザーボード上のバッテリーが時刻を保持しています。(時刻を刻み続けています。)

 

ハードウェアクロックの精度はそれほど高くありません。

  • ハードウェアクロックの精度 ← ミリ秒

 

そのため、以下の2つの方法が取られます。

  • OS起動時にハードウェアクロック(RTC)より 1回時刻を取得し、それ以降はOSが時刻を管理する
  • OS起動時にハードウェアクロック(RTC)より 1回時刻を取得し、それ以降はNTPより正確な時刻を取得する

 

そもそも現在時刻を設定する大元のハードウェアクロックは精度が高くないので、NTP(Network Time Protocol)サーバーに定期的にアクセスして時刻同期をする前提となっているので、ハードウェアクロックの方は100%正確な時刻は要求されていません。

 

 

【例外】システム時刻が BIOS クロックに合わせて自動的に修正されることがある

OS が持つ時刻は単純なものかというといろいろな例外がありそうです。

逆に言えば、ルールはなくて何でもありと考えた方がよさそうです。

 

Windows時計とBIOS時計(RTC)の同期処理の変更について

https://social.technet.microsoft.com/Forums/windows/ja-JP/7d33c109-4d56-4420-be54-e589a890d206/windows261783533612392bios2617835336rtc123982151626399209662970212?forum=w7itprogeneralja

「NTP サーバーに対するアクティブな接続が存在しない場合、システム時刻が BIOS クロックと同期され、時刻の差異が 60 秒を超えた場合に、システム時刻が BIOS クロックに合わせて自動的に修正されます。」

【Windows】「ハードウェアクロック」と「システムクロック」と「NTP 時刻同期」の関係

 

これを素直に読むと Windows Time サービスを利用しているが、何らかの理由で NTP サーバーと通信ができない場合、システムクロックがハードウェアクロックと同期されるようです。

 もし NTP サーバーと通信ができていて正確な時刻を取得している場合は、システムクロックが修正されると直ちにハードウェアクロックに同期されるので、NTP サーバーと通信できない場合は逆のパターンになるということでしょうか。

 

 

ちなみに上のページで何度か出てくる「KB946033」ですが以下のURLがそのページになります。

 

高精度イベント タイマがサポートされている Windows Vista ベースのコンピュータで、システム時刻が BIOS 時刻と異なる場合がある

https://support.microsoft.com/ja-jp/help/946033/the-system-time-may-differ-from-the-bios-time-on-a-windows-based-compu

 

【Windows】「ハードウェアクロック」と「システムクロック」と「NTP 時刻同期」の関係

 

「HPET のハードウェアおよびリアル タイム クロック (RTC) は常に完全には正確でないため、この時刻の差異が発生します。W32Time サービスにより、システム時刻がネットワーク タイム プロトコル (NTP) サーバーと同期され、時刻の差異が随時修正されます。NTP サーバーに対するアクティブな接続が存在しない場合、システム時刻が BIOS クロックと同期され、時刻の差異が 60 秒を超えた場合に、システム時刻が BIOS クロックに合わせて自動的に修正されます。」

 

このページを読むと以下の2つの文章に分割できます。

  • NTP サーバーに対するアクティブな接続が存在しない場合、システム時刻が BIOS クロックと同期される。
  • 時刻の差異が 60 秒を超えた場合に、システム時刻が BIOS クロックに合わせて自動的に修正される。

 

しかし「時刻の差異が60秒を超えた場合」の部分の差異とは何と何なのかが不明です。

  • NTPサーバーと通信できない ← システムクロックがハードウェアクロックに同期される
  • 時刻の差異が60秒を超えた場合 ← 何と何の時刻の差異なのか明確に説明されていない

 

 

その回答らしきものが以下のページにありました。

 

Windows時計とBIOS時計(RTC)の同期処理の変更について

https://social.technet.microsoft.com/Forums/windows/ja-JP/7d33c109-4d56-4420-be54-e589a890d206/windows261783533612392bios2617835336rtc123982151626399209662970212?forum=w7itprogeneralja

 

【Windows】「ハードウェアクロック」と「システムクロック」と「NTP 時刻同期」の関係

 

「また、(WindowsTimeサービスの起動/停止状態に関わらず)KB232488に「Windows のタイム デーモンが約 1 時間に 1 回実行されます。タイム デーモンは Windows と RTC の時刻を比較します。この 2 つの時刻の差が 1 分以上の場合、Windows は RTC と一致するように時刻と日付を変更します。タイム デーモンの実行間隔を変更することはできません。」とあるので、結局のところ当方の環境だと「あるとき1分間進む」という事象が発生することになると思います。(ここは当方の推測でWindowsTimeサービスの停止時の実証データはありません)」

 

60秒以上の「時刻の差異」とは以下の2つになりそうです。

  • Windows の OS クロック(システムクロック)
  • ハードウェアクロック(RTC)

※差異は2つ以上のものが必要になるので「システムクロック」と「ハードウェアクロック」になるのは当たり前と言えば当たり前です。

 

 

 

そもそもタイムデーモンとは何者か?

ここでいきなり「タイムデーモン」という用語が出てきましたが、これは一体何者でしょうか?

単純に「タイムデーモン」イコール「Windows Time サービス」かと思いましたが、どうもそうとも言い切れないようです。

 

 

この記事も参考になります。

【詳細ロジック(求)】時刻同期について

https://social.technet.microsoft.com/Forums/ja-JP/21c25e6e-405e-43cf-8cae-dd62956f4690?forum=windowsserver2008ja

 

【Windows】「ハードウェアクロック」と「システムクロック」と「NTP 時刻同期」の関係

 

「言い過ぎな部分はありますが、Windowsでは、「未調整のシステムクロックはRTCよりも不正確」という古い実装の前提で構成されていて、したのKBからも、Windows Timeサービスが正常稼働していればシステムクロックのみを調整し、Windows Timeが正常動作していなければ、1時間に1回(条件が合致すれば)システムクロックがRTCに時刻を合わせる、という動作になるのではないでしょうか。」

 

 

 

正確に時刻同期をしなければいけない理由

システムよりになりますが、以下、正確に時刻同期をしなければいけない理由です。

  • ログのタイムスタンプがズレて障害対応が困難になる。
  • バッチ処理の起動が思わぬ時間に実行される。(0:00に設定していたのが、実際は23:59に実行され、課金処理がおかしくなる等)
  • 時刻ずれのためログイン処理で不正とみなされログインできなくなる。

 

などなど、システム全体(2台構成でも10台構成でも)で時刻を統一しておかないと、システムの処理結果(計算結果)が思いもよらない形でアウトプットされる可能性があります。

 

 

高精度イベントタイマー(HPET)とは 

HPET とは、OS ではなくマザーボードのチップセットになります。

HPET は「High Precision Event Timer」の略で「高精度イベントタイマー」と略されます。

マイクロソフトとインテルが共同で開発し2005年ごろよりパソコンで使用されています。

古い OS(Windows Vista 以前)は HPET に対応していないので、旧来通りハードウェアクロック(RTC)を利用します。

 

HPET を使用している OS(オペレーティングシステム)一覧

  • Windows Vista
  • Windows Server 2008
  • Windows 7
  • x86バージョンのMac OS X
  • バージョン2.6 の Linuxカーネル
  • FreeBSD
  • OpenSolaris

 

 

 

 

 

 

時刻同期には2つのモード(Stepモード、Slewモード)がある

時刻同期には2つのモードがあります。

「Step(ステップ)モード」「Slew(スリュー)モード」です。

ちなみに、以下英単語の意味です。

  • Step → 1歩、歩み、歩
  • Slew → たくさん、多数、大量、おびただしい数

 

 

 

Windows レジストリでの時刻同期の設定

Windows の時刻同期の設定はレジストリの値を見ることで確認することができます。

調査をした環境

■環境

  • OS:Windows Server 2016 Datacenter
  • インスタンスタイプ:t2.medium

 

ちなみにマイクロソフトによると Windows Server 2016 で時刻同期は古いバージョンの Windows と NTP の互換性を維持しながら、大幅に強化されたようです。

 

 

現在の設定はレジストリを確認するとわかります。

パスは「コンピュータ\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpClient」フォルダで、値は「SpecialPollInterval」です。

下図のように NTP のデフォルトのポーリング間隔は「86400秒」なので1日(24時間)になります。

 

 

NTPサーバーもレジストリより確認することができます。

パスは「コンピュータ\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Parameters」フォルダで、値は「NtpServer」です。

 

「169.254.169.123」は AWS の NTP サーバー(Amazon Time Sync Service)の IP アドレスです。

ちなみに Amazon Time Sync Service は、NTP を利用した時刻同期サービスで、衛星接続の原子時計を使って高精度な時刻を提供します。

しかも全リージョンで稼働中の全インスタンスで利用できます。

 

Windows の時刻設定の流れ

以下のような流れで Windows は時刻を取得・修正します。

  1. Windows OS が起動する際に、ハードウェアクロック(RTC、Real Time Clock)から現在時刻を取得します。
    →これがシステムクロック(OS が持つ時刻)となります。
  2. もし Windows OS 上で時刻を修正した場合(コマンドで時刻を設定した場合など)、もしくは時刻が修正された場合(NTPサーバーより正確な時刻を取得した場合など)は、ハードウェアクロック(RTC)に時刻を書き込みます。

 

Windows Time サービスを利用している場合と利用していない場合

上記でも記載しましたが Windows の時刻同期は、Windows Time サービス(NTP)を利用している場合と利用していない場合に動作が異なります。

■Windows Time サービスを利用していない場合

システムクロック(OSの方)が変更されると、直ちにハードウェアクロック(マザーボードの方)に反映されます。

 

■Windows Time サービスを使用している場合

NTP による時刻同期でシステムクロックが修正されると、ハードウェアクロックに直ぐに反映されます。

 

 

 

RTC の Daylight Savings Enable(DSE)が時刻をずらすことがある

  • Daylight Savings ← 夏時間、サマータイムのこと

RTC に DES の機能が搭載されている場合、突然時刻がサマータイム時刻になり、時刻がずれることがあります。

 

RTC の Daylight Savings Enable(DSE)が有効か無効かを調べる方法

「RW-Everything」というソフトウェアを使用すると、RTC の Daylight Savings Enable(DSE)が「有効」か「無効」かを調べることができます。

 

http://rweverything.com/

 

ちなみに、「RWEverything」を利用してハードウェアの情報を書き換えると最悪コンピュータを壊すことになるかもしれないので注意が必要です。

(壊れてもいい環境で実施しましょう)

 

ツールの使用に関して以下の警告を記載しています。

This utility comes with ABSOLUTELY NO WARRANTY, it allows you to modify hardware settings, this may damage your system if something goes wrong. Author will not take any responsibility about that, you are on your own risk.

 

 

 

RWEverything のインストール手順

以下、「RWEverything」のインストール手順です。

 

以下のサイトを参考にさせていただきました。

サマータイムじゃないのに「PCの時計が1時間ずれる」問題 原因判明?

https://became-free.com/daylight-savings-enable/

 

 

RWEverything のサイトより「Download」タブをクリックし最新バージョン(2018年9月現在では1.7が最新)の「RWEverything」のツールをクリックしてダウンロードします。

 

 

ダウンロードした ZIP ファイルを解凍し、フォルダの中にある「SetupRw.exe」ファイルをダブルクリックして起動します。

 

 

 

 

「セキュリティの警告」画面が表示されたら「実行」ボタンをクリックします。

【Windows】「ハードウェアクロック」と「システムクロック」と「NTP 時刻同期」の関係

 

 

 

「Next」ボタンをクリックします。

【Windows】「ハードウェアクロック」と「システムクロック」と「NTP 時刻同期」の関係

 

 

 

「Next」ボタンをクリックします。

【Windows】「ハードウェアクロック」と「システムクロック」と「NTP 時刻同期」の関係

 

 

 

「Install」ボタンをクリックします。

【Windows】「ハードウェアクロック」と「システムクロック」と「NTP 時刻同期」の関係

 

 

 

 

インストールが完了したら「Launch RW-Everything」にチェックを入れて「Finish」ボタンをクリックします。

【Windows】「ハードウェアクロック」と「システムクロック」と「NTP 時刻同期」の関係

 

 

 

 

RWEverything を使った DES(Daylight Savings Enable)設定の確認方法

以下の手順で「DES(Daylight Savings Enable)」設定を確認します。

 

RWEverything が起動したら、上のメニューより「Specific」「IO Index/Data」「CMOS – 70/71」に移動します。

【Windows】「ハードウェアクロック」と「システムクロック」と「NTP 時刻同期」の関係

 

 

 

以下のように「00,0B」の値が「02」の場合は「無効」になっています。

そのため、「02」以外の場合は、値をダブルクリックして変更し、OS を再起動することで変更を反映させることができます。

【Windows】「ハードウェアクロック」と「システムクロック」と「NTP 時刻同期」の関係

 

 

参考資料

Windows タイム サービスのしくみ
https://docs.microsoft.com/ja-jp/windows-server/networking/windows-time-service/how-the-windows-time-service-works

 

 

 

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

AlphaOmega Captcha Medica  –  What Do You See?
     
 

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください