省電力機能で、仮想環境の時刻同期にご用心

2011年の夏真っ最中。まだまだ暑い日が続きます。
一年で一番昼が長いのは、夏至(6月20日くらい)ですが、その夏至を過ぎ、冬至に向かって昼が
短くなっているのに 8 月って 6 月よりも昼が長いように感じます。
さて、この夏の節電対応でサーバー管理は大変です。
そこで、OS やハードウェア(CPU や BIOS)の省電力モードを使ったりすることがあるかもしれませんが、
仮想環境の時刻同期という面で少しネタがありますので、紹介しておきます。(MS サポートの S さん、ありがとう)

一般的に Windows サーバーの時刻同期は

  • ドメインコントローラーは、外部の NTP サーバーと時刻同期をするように設定する
  • メンバーサーバーは、ドメインコントローラーとの時刻同期機能にお任せする
  • スタンドアローンサーバーは、外部の NTP サーバーと時刻同期をするように設定する

だと思います。最近は仮想環境で構築することが多いと思いますが、Hypervisor 型の仮想環境(Hyper-V も)では、
クロック割り込みをエミュレーションして発生させるために時刻が遅れやすいという特性があります。

ゲストOSの時刻を発生させる仕組み

そこで、Hyper-V では、統合サービスの一部で、「時刻の同期」機能を提供しています。

統合サービス

この時刻の同期機能は、「Hyper-V Time Synchronization Service」というサービスで実装されていて

  • Hyper-V の子パーティションに対して、想定されるゲスト OS の時刻遅れを補正する
  • ゲスト OS の時刻が遅れた場合に親パーティションの時刻と同期する

というものです。なお、子パーティションに、つまり、ゲスト OS をドメインコントローラーにする場合には、
統合サービスの「時刻の同期」は無効にして、外部の NTP サーバーとの時刻同期を行うようにします。
その際、同時間隔を短めに設定する必要があります。

そして、気を付けないといけないのは、CPU & BIOS の省電力機能です。これが何気にやっかいものです。
簡単な絵を描いてみました。

省電力とACPI_1

ご存じのとおり、C-3 ステート以上では、CPU のクロックが停止します。

Hypervisor が C-3 になった場合ですが、BIOS の多くは、C-3 を C-6 にリマッピングするため、
仮想 CPU は停止し、タイマーも停止します。
ただ、Hyper-V では、デフォルトで C-3 ステートは無効になっているので、通常は止まることはありません。

省電力とACPI_2

やっかいなのが、Hypervisor が C-2 ステートになった場合です。
BIOS によっては、C-2 ではなく、C-3 にリマッピングするものがあります。
これが曲者で、Hypervisor から見ると、C-2 であるにも関わらず、CPU が C-3 になっているため、
いつまで経っても、タイマー割り込みが来ないことになってしまい、 時刻がどんどんと遅れていくことに。
CPU のクロックが停止してしまえば動きようがないので、どうにもならないです。

この夏は、少しでも省電力にということで、ハードウェアの省電力機能を使おうとするかもしれませんが
自分が使っているサーバー機のハードウェアが持っている省電力機能は、どのようなものなのか、
きちんと確認しておいた方が良さそうです。

参考情報

ちなみに、今日は立秋です。

コメントを残す

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

WordPress.com ロゴ

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

Twitter 画像

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

Facebook の写真

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

Google+ フォト

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

%s と連携中

%d人のブロガーが「いいね」をつけました。