Azure ゲストOSの時刻同期について


Azure ゲストOSの時刻同期がどうなっているのか気になったので少し調べて見ました。
例によってRDP接続して中をのぞいてみます。

コマンドプロンプトで、「w32tm /query /configuration」コマンドを実行すると、時刻同期設定に関わる情報を得る事が出来ます。
まず、TimeProviderとして、「Ntp Client」と「VM IC Time Provider」が存在する事が確認できます。

image

「Ntp Client」の設定は、Windowsの標準的な設定となっており、NTPサーバ(NtpServer)として「time.windows.com」が設定されており、同期間隔(SpecialPollInterval)は「604800秒(7日間)」となっています。

さて、「VM IC Time Provider」とは何者でしょうか?
仮想化 TechCenter 「ヒント: Hyper-V 仮想化環境におけるゲスト OS の時刻同期について」によりますと、ホストOSの時刻を、ゲストOSに同期する為の機構のようです。

イベントログを確認しますと、下記の様に「The time service is now synchronizing the system time with the time source VM IC Time Synchronization Provider.」と出ていますので、ホストOS(Azure Fabric Controllerかな?)と同期している事が確認できました。

image

なお、同期に関する条件等は下記の様に書かれています。

Hyper-V 仮想化環境におけるゲスト OS の時刻同期の動作について説明します。

Hyper-V 仮想化環境では、統合サービスの機能の 1 つとして “時刻の同期” を提供しており、統合サービスをインストールしたゲスト OS では既定で有効になっています。

この機能は、物理システムである Hyper-V ホストが持つ時刻に、仮想システムであるゲスト OS の時刻を同期させるためのものですが、ホストとゲストの時刻を常に同じにすることを目的とはしていません。

Hyper-V では、ゲスト OS の時刻を進めるための Clock tick を Hypervisor 内でエミュレートしております。このため、Hypervisor の負荷が高い場合など、ゲスト OS が Clock tick を失う可能性があります。Clock tick を失うことによってゲスト OS は時々時刻を進められなくなるため、Hypervisor 型の仮想化環境におけるゲスト OS は総じて時刻が遅れやすい状態にあります。

これは Hyper-V に限らず、Clock tick をエミュレートする Hypervisor 型の仮想化環境における実装上の制限になります。

統合サービスの “時刻の同期” は、この実装上の制限に対処するために提供されるものであるため、基本的にゲスト OS の時刻が”遅れている” 場合にのみ、無条件に Hyper-V ホスト との時刻同期を行います。

Hyper-V 統合サービスの “時刻の同期” を有効にしている場合、次のような動作を行います。

  • ゲスト OS の時刻が、ホスト OS の時刻より 5 秒以上、遅れている場合
    強制的に時刻同期を行います。
  • ゲスト OS の時刻が、ホスト OS の時刻より 5 秒未満ずれている場合
    NTP Time Provider から Time sample を提供します。時刻同期を行うかどうかは NTP (w32time) に委任します。
    (Hyper-V 統合サービスの “時刻の同期” は、VM IC Time Synchronization Provider という名前の NTP Time Provider を提供します)
  • ゲスト OS の時刻がホスト OS の時刻より 5 秒以上進んでいる場合
    時刻同期を行いません。厳密な意味において時刻同期が必要なゲスト OS は、NTP など、他の時刻同期機構を利用する必要があります。
    また統合サービスの “時刻の同期” は、他の時刻ソース (他の NTP サーバー) 参照環境と共存が可能なように実装されています。

    つまり、少なくとも5秒程度の誤差は見込んでおかないといけないという事でしょう。
    しかしながら、同期するとはいえホストOSの時刻の正確さも定かではありませんし、誤差が許されないシステムもあるでしょうから、自ら積極的に時刻同期を行う必要があると思われます。

    方法例としては、レジストリの同期間隔(SpecialPollInterval)を短く変更したり、「w32tm /resync」をこまめに発行するなどが挙げられると思います。

    いずれの方法を取るにしても、StartUpTask等を用いた永続化やスケジュール設定等が必要になるかと思われます。

    広告

    コメントを残す

    以下に詳細を記入するか、アイコンをクリックしてログインしてください。

    WordPress.com ロゴ

    WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

    Twitter 画像

    Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

    Facebook の写真

    Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

    Google+ フォト

    Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

    %s と連携中