Red Hat Training

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

第8章 KVM ゲストの管理

仮想化は、ゲスト仮想マシンでの時間管理にいくつかの課題を伴います。
  • すべてのゲスト仮想マシンに、割り込みを常に同時に配信することはできません。これは、仮想マシンの割り込みが割り込みが true ではないのでです。代わりに、ホストマシンによってゲスト仮想マシンに挿入されます。
  • ホストは別のゲスト仮想マシン(または別のプロセス)を実行する場合があります。そのため、通常、割り込みで必要な正確なタイミングは常に実行可能なとは限りません。
正確な時間を維持することなくゲスト仮想マシンが問題となる可能性があり、セッションの有効性、移行、その他のネットワークアクティビティーはタイムスタンプに依存して正しい状態になる可能性があります。
KVM は、準仮想化クロック(kvm-clock)でゲスト仮想マシンを提供することにより、これらの問題を回避できます。ただし、ゲストのマイグレーションなど、不正確な保持時間を維持することで影響を受ける可能性のあるアクティビティーを試みる前に、タイミングをテストすることが重要になります。
重要
上記の問題を回避するには、ネットワークおよびゲスト仮想マシンで Network Time Protocol(NTP)を設定する必要があります。Red Hat Enterprise Linux 6 以前を使用するゲストでは、NTP は ntpd サービスにより実装されます。詳細は、『Red Hat Enterprise 6 デプロイメントガイド』を参照してください
Red Hat Enterprise Linux 7 を使用するシステムでは、ntpd または chronyd サービスにより、NTP 時間同期サービスを提供できます。Chrony には、仮想マシンに関する利点があります。詳細は、『 Red Hat Enterprise Linux 7 システム管理者のガイド』の「 chrony スイートを 使用した NTP 設定」および 「 ntpd を使用した NTP の設定」セクションを参照してください。

ゲスト仮想マシンの時刻同期の mechanics

デフォルトで、ゲストは以下のようにハイパーバイザーと時間を同期します。

  • ゲストシステムが起動すると、ゲストはエミュレートされたリアルタイム Clock(RTC)から時間を読み取ります。
  • NTP プロトコルが開始したら、自動的にゲストクロックを同期します。その後、通常のゲスト操作時に NTP はゲストでクロックの調整を実行します。
  • 一時停止プロセスまたは復元プロセス後にゲストを再開すると、ゲストクロックが指定の値に同期するコマンド( virt-managerなど)が発行される必要があります。この同期は、QEMU ゲストエージェントがゲスト にインストールされ、この機能をサポートする場合に限り機能します。ゲストクロックが同期する値は通常、ホストのクロック値になります。

Constant Time Stamp Counter(TSC)

最新の Intel および AMD CPU は、一定の Time Stamp Counter(TSC)を提供します。定数 TSC のカウント頻度は、CPU コア自体が省電力ポリシーに準拠する頻度は変わることはありません。KVM ゲストのクロックソースとして TSC を使用するには、常に TSC 周波数がある CPU が必要です。

constant_tsc フラグが存在する場合は、CPU に定数 Time Stamp Counter があります。CPU に constant_tsc フラグがあるかどうかを確認するには、以下のコマンドを実行します。
$ cat /proc/cpuinfo | grep constant_tsc
出力を指定すると、CPU には constant_tsc ビットがあります。出力がない場合は、以下の手順に従います。

Constant Time Stamp Counter のないホストの設定

定数の TSC 周波数のないシステムは、仮想マシンのクロックソースとして TSC を使用できないため、追加の設定が必要です。電源管理機能は正確な時間を維持するため、ゲスト仮想マシンを KVM で時間を正確に維持できるように無効にする必要があります。

重要
これらの手順は、AMD リビジョン F CPU のみを対象としています。
CPU に constant_tsc ビットがない場合は、電源管理機能をすべて無効にします。各システムには、時間を維持するために使用するタイマーが複数あります。TSC はホストで安定していません。これは、CPUfreq の変更、ディープ C 状態、またはより高速な TSC のホストへの移行によって引き起こされたことにあります。ディープ C スリープ状態は TSC を停止できます。 カーネルがディープ C 状態を使用しないため、カーネル起動に processor.max_cstate=1 を追加します。この変更を永続的にするには、/etc/default/grubファイルの GRUB_CMDLINE_LINUX キーの値を編集します。たとえば、起動ごとに緊急モードを有効にする場合は、以下のようにエントリーを編集します。
GRUB_CMDLINE_LINUX="emergency"
GRUB 2 ブートメニューに複数のパラメーターを追加する際と同様に、GRUB_CMDLINE_LINUX キーには複数のパラメーターを指定できることに注意してください。
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. ホスト全体の時刻同期

KVM ゲスト内の仮想ネットワークデバイスは、ハードウェアのタイムスタンプに対応していないため、NTP や PTP などのネットワークプロトコルを使用するゲストのクロックを同期することが難しくなります。
ゲストの同期がより正確になる必要がある場合は、NTP または PTP を使用してホストのクロックとハードウェアのタイムスタンプを同期し、ゲストをホストに直接同期させることが推奨されます。Red Hat Enterprise Linux 7.5 以降では、仮想 PTP ハードウェアクロック(PHC)を提供します。これにより、ゲストはホストにサブマイクロ秒の精度に同期できます。
重要
PHC が適切に機能するには、ホストとゲストの両方がオペレーティングシステム(OS)として RHEL 7.5 以降を使用している必要があることに注意してください。
PHC デバイスを有効にするには、ゲスト OS で以下を実行します。
  1. 再起動後に ptp_kvm モジュールを読み込みます。
    # echo ptp_kvm > /etc/modules-load.d/ptp_kvm.conf
  2. chrony 設定への参照として /dev/ptp0 クロックを追加します。
    # echo "refclock PHC /dev/ptp0 poll 2" >> /etc/chrony.conf
  3. chrony デーモンを再起動します。
    # systemctl restart chronyd
  4. ホストとゲストの時刻同期が正しく設定されていることを確認するには、ゲストで 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