Red Hat Training

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

第8章 KVM ゲストの管理

仮想化には、ゲスト仮想マシンで時間を維持するのにさまざまな課題があります。
  • 割り込みは常に同時に提供され、すべてのゲスト仮想マシンにインスタンス化できません。これは、仮想マシンの割り込みが真の割り込みがないためです。代わりに、ホストマシンによってゲスト仮想マシンに挿入されます。
  • ホストは別のゲスト仮想マシンまたは別のプロセスを実行している可能性があります。したがって、割り込みでは通常必要な正確なタイミングが常に可能であるとは限りません。
正確な時間を維持せずにゲスト仮想マシンは、セッションの有効性、移行、その他のネットワークアクティビティーは正しいタイムスタンプに依存するため、ネットワークアプリケーションとプロセスと競合する可能性があります。
KVM は、準仮想化クロック(kvm-clock)を持つゲスト仮想マシンを提供することで、これらの問題を回避します。ただし、ゲストのマイグレーションなど、時間に影響を与えた可能性のあるアクティビティーを試みる前に、タイミングをテストすることが重要です。
重要
上記の問題を回避するには、ネットワークタイムプロトコル(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 の設定」および 『 Red Hat Enterprise Linux 7 システム管理者のガイド』の「 ntpd を使用した NTP の設定」を参照してください。

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

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

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

定数時間 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 のホストへの移行によって生じる場合があります。ディープスリープの状態は TSC を停止できます。ディープの C 状態を使用するカーネルがカーネルブートに processor.max_cstate=1 を追加するのを防ぎます。この変更を永続化するには、/etc/default/grubファイルの GRUB_CMDLINE_LINUX キーの値を編集します。たとえば、各ブートの緊急モードを有効にする場合は、以下のようにエントリーを編集します。
GRUB_CMDLINE_LINUX="emergency"
GRUB 2 ブートメニューに複数のパラメーターを追加する際と同様に、GRUB_CMDLINE_LINUX キーには複数のパラメーターを指定できることに注意してください。
cpufreqconstant_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 が適切に機能するには、ホストとゲストのどちらも RHEL 7.5 以降をオペレーティングシステム(OS)として使用する必要があります。
PHC デバイスを有効にするには、ゲスト OS で以下を行います。
  1. 再起動後に ptp_kvm モジュールを読み込むように設定します。
    # echo ptp_kvm > /etc/modules-load.d/ptp_kvm.conf
  2. /dev/ptp0 クロックを chrony 設定への参照として追加します。
    # 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
    

このページには機械翻訳が使用されている場合があります (詳細はこちら)。