第8章 KVM ゲストのタイミング管理
- 仮想マシン内の割り込みは実際の割り込みではなく、ホストマシンがゲスト仮想マシンに挿入しているものです。このため、割り込みは常に同時かつ即時にすべてのゲスト仮想マシンに配信される訳ではありません。
- ホストは別のゲスト仮想マシンを実行していたり、別のプロセスを実行している場合もあり、したがって割り込みに通常必要となる正確なタイミングを得ることが常に可能であるとは限りません。
重要
ntpd サービスで実装されます。詳細は、『Red Hat Enterprise Linux 6 導入ガイド』を参照してください。
ntpd または chronyd サービスにより提供されます。Chrony には、仮想マシンに対していくつかの優れた点があります。詳細は、『Red Hat Enterprise Linux 7 システム管理者のガイド』の「chrony スイートを使用した NTP 設定」および「ntpd を使用した NTP 設定」の章を参照してください。
デフォルトで、ゲストは以下のようにハイパーバイザーと時間を同期します。
- ゲストシステムが起動すると、ゲストはエミュレートされた RTC (リアルタイムクロック) から時間を読み取ります。
- NTP プロトコルが開始されていると、ゲストのクロックは自動的に同期されます。それ以降、ゲストが通常の動作をしている間、NTP はゲストのクロック調整を実施します。
- ゲストが一時停止または復元プロセスの後に再起動する場合は、管理ソフトウェア (virt-manager 等) により、ゲストのクロックを特定の値に同期させるコマンドが発行される必要があります。この同期プロセスは、QEMU ゲストエージェント がゲストにインストールされ、機能をサポートしている場合に限り動作します。通常は、ホストのクロック値にゲストのクロックを同期させます。
最新の Intel と AMD の CPU は、不変タイムスタンプカウンター (TSC) を提供します。不変 TSC のカウント頻度は、たとえば CPU コア自体が節電ポリシーに従うために周波数を変更しても変わりません。不変 TSC の周波数を持つ CPU は、KVM ゲストのクロックソースとして TSC を使用するために必要です。
constant_tsc フラグが付いている場合には、CPU は Constant TSC を搭載しています。CPU に constant_tsc フラグが付いているかどうかを確認するには、以下のコマンドを実行します。
$ cat /proc/cpuinfo | grep constant_tscconstant_tsc ビットがあることになります。出力がない場合は、以下の説明に従ってください。
Constant TSC の周波数のないシステムは、仮想マシンのクロックソースに TSC を使用できず、追加設定が必要になります。電源管理機能により正確な時刻管理が妨げられるので、KVM を使用してゲスト仮想マシンの正確な時間を管理するには、この機能を無効にする必要があります。
重要
constant_tsc ビットがない場合には、電源管理機能をすべて無効にします。各システムには、時刻管理に使用する複数のタイマーがあります。TSC はホスト上では安定していません。これは、cpufreq の変化やディープ C ステート、より高速の TSC を搭載したホストへの移行などが原因となる場合があります。ディープ C スリープ状態に入ると、TSC が停止する可能性があります。カーネルがディープ C ステートを使用しないようにするには、カーネルブートに processor.max_cstate=1 を追加します。この変更を永続化させるには、/etc/default/grub ファイルの GRUB_CMDLINE_LINUX キーの値を編集します。たとえば、毎回の起動時に緊急モード (emergency mode) を有効にするには、以下のようにエントリーを編集します。
GRUB_CMDLINE_LINUX="emergency"
cpufreq を無効にするには (constant_tsc なしのホスト上の場合のみ)、kernel-tools をインストールし、cpupower.service を有効にします (systemctl enable cpupower.service)。ゲスト仮想マシンが起動されるたびにこのサービスを無効にするには、/etc/sysconfig/cpupower の設定ファイルを変更し、CPUPOWER_START_OPTS および CPUPOWER_STOP_OPTS を変更します。有効な制限については、/sys/devices/system/cpu/cpuid/cpufreq/scaling_available_governors ファイルを参照してください。このパッケージまたは電源管理およびガバナーについての詳細は、『Red Hat Enterprise Linux 7 電力管理ガイド』を参照してください。
8.1. Red Hat Enterprise Linux ゲストで必要な時刻管理パラメーター
/etc/grub2.cfg ファイルの /kernel 行の末尾に追記することで設定できます。
注記
表8.1 カーネルパラメーターの要件
| Red Hat Enterprise Linux バージョン | ゲストの追加カーネルパラメーター |
|---|---|
| AMD64 および Intel 64 システム上の 7.0 およびそれ以降 (kvm-clock を実行) | 追加のパラメーターは必要ありません |
| AMD64 および Intel 64 システム上の 6.1 およびそれ以降 (kvm-clock を実行) | 追加のパラメーターは必要ありません |
| AMD64 および Intel 64 システム上の 6.0 (kvm-clock を実行) | 追加のパラメーターは必要ありません |
| AMD64 および Intel 64 システム上の 6.0 (kvm-clock を実行せず) | notsc lpj=n |
| AMD64 および Intel 64 システム上の 5.5 (kvm-clock を実行) | 追加のパラメーターは必要ありません |
| AMD64 および Intel 64 システム上の 5.5 (kvm-clock を実行せず) | notsc lpj=n |
| 32 ビット AMD および Intel システム上の 5.5 (kvm-clock を実行) | 追加のパラメーターは必要ありません |
| 32 ビット AMD および Intel システム上の 5.5 (kvm-clock を実行せず) | clocksource=acpi_pm lpj=n |
| AMD64 および Intel 64 システム上の 5.4 | notsc |
| 32 ビット AMD および Intel システム上の 5.4 | clocksource=acpi_pm |
| AMD64 および Intel 64 システム上の 5.3 | notsc |
| 32 ビット AMD および Intel システム上の 5.3 | clocksource=acpi_pm |
注記
lpj パラメーターは、ゲスト仮想マシンが稼働する特定の CPU の loops per jiffy 値と同じ値を必要とします。この値が不明な場合は、lpj パラメーターを設定しないでください。
警告
divider カーネルパラメーターはこれまで、高い即応性要件のない Red Hat Enterprise Linux 4 および 5 ゲスト仮想マシンやゲスト密度の高いシステム上にある Red Hat Enterprise Linux 4 および 5 ゲスト仮想マシンに推奨されてきました。しかし現在は、Red Hat Enterprise Linux 4 およびバージョン 5.8 より前の Red Hat Enterprise Linux 5 バージョンを実行するゲストでこのカーネルパラメーターを使用することは推奨されていません。
divider は、タイマー割り込みの頻度を下げることでスループットを改善できます。たとえば、HZ=1000 の場合に divider が 10 に設定される (つまり、divider=10) と、期間ごとのタイマー割り込み数がデフォルト値 (1000) から 100 (デフォルト値の 1000 ÷ divider 値 10) に変わります。
divider パラメーターによる割り込みや tick recording との対話について記述されています。この不具合は Red Hat Enterprise Linux 5.8 で修正されています。ただし、Red Hat Enterprise Linux 4 またはバージョン 5.8 より前の Red Hat Enterprise Linux 5 バージョンを使用するゲストでは、依然として divider パラメーターによるカーネルパニックが発生する可能性があります。
divider パラメーターは Red Hat Enterprise Linux 6 および Red Hat Enterprise Linux 7 では有用ではないため、これらのシステム上にあるゲストはこの不具合による影響を受けません。

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.