第17章 KVM ゲストのタイミング管理

仮想化はゲストの時刻維持に対して諸々の懸念を与えます。一部の CPU がこの 不変タイムスタンプ カウンタを持っていないため、TSC (Time Stamp Counter) をクロックのソースとして使用する ゲストは 時刻維持問題に陥ります。正確な時刻維持を持たないゲストは実際の時刻よりも進んだり 遅れたりして同期から外れるため、一部のネットワークアプリケーションに深刻な影響を与えます。
KVM はゲストに para-virtualized クロックを装備することでこの問題を回避します。 別の方法として、一部のゲストはこれらのオペレーティングシステムの将来のバージョンで その時刻維持のために他の x86 クロックソースを使用する可能性があります。
今のところ、Red Hat Enterprise Linux 5.4 及びそれ以降のゲストのみが全面的に para-virtualized のクロックをサポートしています。
ゲストは、不正確なクロックとカウンタの原因で数種の問題を持つようになります:
  • クロックは正確な時刻との同期から外れて、セッションを無効にしたり ネットワークに影響したりします。
  • 遅くれるクロックを持つゲストは移行で問題を持つ可能性があります。
これらの問題は他の仮想化プラットフォーム上に存在しており、タイミングは 常にテストされるべきです。

重要

NTP (Network Time Protocol) デーモンはホストとゲスト上で稼働している必要があります。 ntpd サービスを有効にして下さい:
# service ntpd start
ntpd サービスをデフォルトのスタートアップシーケンスに追加します:
# chkconfig ntpd on
ntpd サービスを使用すると、全ての ケースでクロックのずれの効果を最低限に抑えることができるはずです。
使用している CPU が不変タイムスタンプカウンタを持つかどうかを判定

constant_tsc フラグが存在する場合は、 使用中の CPU が不変タイムスタンプカウンタを持っていることになります。 その CPU が constant_tsc フラグを持つか どうかを判定するには、以下のコマンドを実行します:

$ cat /proc/cpuinfo | grep constant_tsc
なんらかの出力が表示されると、その CPU が constant_tsc ビットを持つことになります。出力がない場合は以下の案内に 従ってください。
不変タイムスタンプカウンタ無しでホストを設定

不変タイムスタンプカウンタを持たないシステムは追加の設定を必要とします。 パワーマネジメント機能は正確な時刻維持を邪魔するため、ゲスト用にはそれを 無効にして KVM での時刻維持を保護します。

重要

これらの案内は AMD 改訂 F cpus 用のみのものです。
CPU に constant_tsc ビットが無い場合、 全てのパワーマネジメント機能 (BZ#513138) を無効にして下さい。 各システムはいくつかのタイマーで時刻を維持しています。TSC はホスト上で不安定 であり、時には cpufreq 変更、deep C 状態、又は より速い TSC を持つホストへの移行により影響を受けます。 カーネルの deep C 状態 を防止するには、ホスト上で grub.conf ファイル内のカーネルブートオプションに "processor.max_cstate=1" を追加します:
term Red Hat Enterprise Linux Server (2.6.18-159.el5)
        root (hd0,0)
        kernel /vmlinuz-2.6.18-159.el5 ro root=/dev/VolGroup00/LogVol00 rhgb quiet processor.max_cstate=1
constant_tsc の無いホスト上でのみ)cpufreq を 無効にするには、/etc/sysconfig/cpuspeed 設定ファイルの編集により、MIN_SPEED 変数と MAX_SPEED 変数を利用できる最高の周波数に変更します。 その有効な限界は /sys/devices/system/cpu/cpu*/cpufreq/scaling_available_frequencies ファイル内で見ることができます。
Red Hat Enterprise Linux ゲストで para-virtualized クロックの使用

特定の Red Hat Enterprise Linux ゲストには、追加のカーネルパラメータが 必要になります。これらのパラメータは、ゲストの /boot/grub/grub.conf ファイル内の /kernel 行の末尾にそれら自身を追記することによりセットできます。

以下の表では、そのような Red Hat Enterprise Linux のバージョンと 不変タイムスタンプカウンタを持たないシステム上のゲストで必要となるパラメータを示しています。
Red Hat Enterprise Linuxその他のゲストカーネルパラメータ
para-virtualized クロックを持つ 5.4 AMD64/Intel 64追加のパラメータは無用です
para-virtualized クロックを持たない 5.4 AMD64/Intel 64divider=10 notsc lpj=n
para-virtualized クロックを持つ 5.4 x86 追加のパラメータは無用です
para-virtualized クロックを持たない 5.4 x86divider=10 clocksource=acpi_pm lpj=n
5.3 AMD64/Intel 64divider=10 notsc
5.3 x86divider=10 clocksource=acpi_pm
4.8 AMD64/Intel 64notsc divider=10
4.8 x86clock=pmtmr divider=10
3.9 AMD64/Intel 64 追加のパラメータは無用です
3.9 x86追加のパラメータは無用です
Windows ゲストで Real-Time Clock を使用

Windows は RTC (Real-Time Clock) と TSC (Time Stamp Counter) の両方を 使用します。Windows ゲストには、TSC の代わりに、全ての時刻ソースのために 時刻維持問題を解決する Real-Time Clock を使用します。

PMTIMER クロックソース(PMTIMER は通常 TSC を使用)用に Real-Time Clock を 有効にするには、Windows のブート設定に以下の行を追加します。Windows のブート設定は boot.ini ファイル内にありますので、boot.ini ファイルに以下の 行を追加して下さい:
/use pmtimer
Windows のブートセッティングと pmtimer オプションに関する詳細情報には Windows XP および Windows Server 2003 の Boot.ini ファイルで使用可能なスイッチ オプション を参照して下さい。