第8章 KVM ゲストのタイミング管理
- 仮想マシン内の割り込みは実際の割り込みではなく、ホストマシンがゲスト仮想マシンに挿入しているものです。このため、割り込みは常に同時かつ即時にすべてのゲスト仮想マシンに配信される訳ではありません。
- ホストは別のゲスト仮想マシンを実行していたり、別のプロセスを実行している場合もあり、したがって割り込みに通常必要となる正確なタイミングを得ることが常に可能であるとは限りません。
重要
ntpd
サービスによって実装されます。詳細は、『Red Hat Enterprise 6 Deployment Guide』を参照してください。
ntpd
または chronyd
サービスで提供することができます。仮想マシン上で Chrony を使用する利点はいくつかあります。詳細は、Red Hat Enterprise Linux 7『システム管理者のガイド』の 「chrony スイートを使用した設定」および「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_tsc
constant_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. ホスト全体の時刻同期
重要
- 再起動後にロードする
ptp_kvm
モジュールを設定します。#
echo ptp_kvm > /etc/modules-load.d/ptp_kvm.conf
- chrony 設定への参照として
/dev/ptp0
クロックを追加します。#
echo "refclock PHC /dev/ptp0 poll 2" >> /etc/chrony.conf
- chrony デーモンを再起動します。
#
systemctl restart chronyd
- ホストとゲスト時間の同期が適切に設定されたことを確認するには、ゲスト上で
chronyc sources
コマンドを使用します。以下のような出力が表示されます。#
chronyc sources
210 Number of sources = 1 MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== #* PHC0 0 2 377 4 -6ns[ -6ns] +/- 726ns
このページには機械翻訳が使用されている場合があります (詳細はこちら)。