Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

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

仮想化には、ゲスト仮想マシンでの時間管理に関するいくつかの課題が含まれます。
  • 割り込みは、すべてのゲスト仮想マシンに常に同時に瞬時に配信されるとは限りません。これは、仮想マシンの割り込みは実際の割り込みではなく、ホストマシンによってゲスト仮想マシンに挿入されるためです。
  • ホストは、別のゲスト仮想マシンを実行している場合や、別のプロセスの場合があります。ただし、割り込みで通常必要とされる正確なタイミングは、常に可能とは限りません。
正確な時刻管理が行われていないゲスト仮想マシンでは、セッションの有効性、移行、およびその他のネットワークアクティビティーがタイムスタンプに依存して正しい状態を維持するため、ネットワークアプリケーションとプロセスで問題が発生する可能性があります。
KVM は、ゲスト仮想マシンに準仮想化クロック (kvm-clock) を提供することで、この問題を回避します。ただし、ゲストの移行など、時間管理の不正確さによって影響を受ける可能性のあるアクティビティーを試行する前に、タイミングをテストすることは依然として重要です。
重要
上記の問題を回避するには、ホストとゲスト仮想マシンで、ネットワークタイムプロトコル (NTP) を設定する必要があります。Red Hat Enterprise Linux 6 以前を使用するゲストでは、NTP が ntpd サービスにより実装されます。詳細は、Red Hat Enterprise 6 Deployment Guide を参照してください。

14.1. Constant タイムスタンプカウンター (TSC)

最新の Intel および AMD の CPU では、Constant TSC (Time Stamp Counter) が提供されます。省電力ポリシーに準拠するために、CPU コア自体の周波数が変更した場合、定数 TSC のカウント頻度は変わりません。TSC を KVM ゲストのクロックソースとして使用するには、Constant TSC 周波数の CPU が必要です。
constant_tsc フラグが存在する場合、CPU には一定のタイムスタンプカウンターがあります。CPU に constant_tsc フラグがあるかどうかを確認するには、以下のコマンドを実行します。
$ cat /proc/cpuinfo | grep constant_tsc
出力があれば、CPU には constant_tsc ビットがあります。出力が表示されない場合は、以下の手順に従ってください。

14.1.1. Constant タイムスタンプカウンターを使用しないホストの設定

TSC の周波数が一定でないシステムは、仮想マシンのクロックソースとして TSC を使用できないため、追加の設定が必要になります。電源管理機能は正確な時間管理を妨げるため、ゲスト仮想マシンが KVM で時間を正確に保持するには、無効にする必要があります。
重要
この手順は、AMD リビジョン F の CPU のみを対象としています。
CPU に constant_tsc ビットがない場合は、電源管理機能をすべて無効にします(BZ#513138)。各システムには、時間を維持するために使用するいくつかのタイマーがあります。TSC はホストで安定していません。これは、cpufreqの変更、ディープ C ステート、またはより高速な TSC を使用したホストへの移行が原因である場合があります。ディープ C のスリープ状態は、TSC を停止する可能性があります。ディープ C 状態を使用するカーネルを防ぐには、ホストの grub.conf ファイルのカーネル起動オプションに processor.max_cstate=1 を追加します。
title Red Hat Enterprise Linux (2.6.32-330.x86_64)
        root (hd0,0)
	kernel /vmlinuz-2.6.32-330.x86_64 ro root=/dev/VolGroup00/LogVol00 rhgb quiet \
   processor.max_cstate=1
/etc/sysconfig/cpuspeed 設定ファイルを編集し、cpufreq を無効にし( constant_tscのないホストでのみ必要)、MIN_SPEED 変数および MAX_SPEED 変数を利用可能な最大頻度に変更します。有効な制限は、/sys/devices/system/cpu/cpu*/cpufreq/scaling_available_frequencies ファイルにあります。