仮想マシンの限界 〜Linuxゲストの時計が狂う!?〜 |システム/アプリケーション統合|トピックス|Computerworld

CW_Welcomeバナー

header_cwr_head_mid_fl_logo

CW_ADJUST_ウルトラバナー

CW_ウルトラバナー_Topics02

CW_ウルトラバナー_Topics04

CW_ウルトラバナー_Topics05

CW_ウルトラバナー_Topics06

CW_ウルトラバナー_Topics07

CW_ウルトラバナー_Topics08

システム/アプリケーション統合

RSS
【仮想化の教室 第3回】

仮想マシンの限界 〜Linuxゲストの時計が狂う!?〜

仮想化技術のすべてをここで学べる!
(2009年07月15日)

 今回は、Linuxゲストを仮想マシン内で実行する場合の「システム時計の問題」を例に、仮想化テクノロジーの限界、特にホスト型の仮想マシンモニタ(VMM)の限界について解説する。

こんな都市伝説はご存じ? 「仮想マシン内のLinuxゲストは時間の進み方が違う…」

 数年前、「仮想マシン内でLinuxゲストを実行すると、システム時刻が異常に早く(あるいは遅く)進む」という現象が話題になった。ちょうどLinuxカーネル2.6を採用したディストリビューションが登場したころの話だ。

 状況は多少緩和されているが、特にホスト型のVMM環境においては、現在でも付きまとう問題だ。そして、これは特定の仮想化テクノロジーの問題というわけではなく、仮想マシン環境共通の問題でもある。この問題に関するマイクロソフトとヴイエムウェアの技術情報は、次のWebサイトで公開されている。

The system time runs too fast on a Linux-based virtual machine that is hosted in Virtual Server 2005 R2

Clock in a Linux Guest Runs More Slowly or Quickly Than Real Time

 この問題の主な原因は、Linuxにおけるシステム時刻の管理方法と、時刻補正アルゴリズムにある。Linuxカーネルは「RTC(リアルタイムクロック)」から時刻を読み出して起動したあと、「TSC(Time Stamp Counter)」というタイマー割り込みをカウントするアルゴリズムで時刻を管理している。

 カーネル2.4までは100Hz(1秒間に100回)だったタイマー割り込みが、カーネル2.6では10倍の1,000Hzに変更された。SMP(Symmetric Multi-Processor)カーネルの場合はさらに頻繁で、1,000Hz×(プロセッサ数+1)の間隔でタイマー割り込みが発生する。オーバーヘッドの大きいホスト型VMMでは、1,000Hzという割り込みを処理しきれずに、取りこぼしが発生してしまう。

 Linuxカーネルは、プロセッサがビジー状態のときにタイマー割り込みに取りこぼしが発生しても、時刻がずれないような時刻補正アルゴリズムを持つが、不幸にも仮想マシン環境ではこの時刻補正がうまく機能しない。

 その結果、実際の時刻よりも1分間に10秒以上も早く時計が進んだり、逆に遅れたりしてしまうことがあるのだ(画面1)。

画面1● Virtual Server 2005 R2 SP1の仮想マシンで動くFedora Core5。どんどんシステム時刻が先に進む(筆者の環境では1分当たり12秒程度)

記事詳細テキストバナー

ページの先頭へ戻る