Red Hat Training

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

20.40. ゲスト仮想マシンの CPU モデル設定

20.40.1. はじめに

すべてのハイパーバイザーには、ゲスト仮想マシンがデフォルトで CPU の確認内容について独自のポリシーがあります。一部のハイパーバイザーは、ゲスト仮想マシンで利用可能な CPU ホストの物理マシン機能を判別しますが、QEMU/KVM は、qemu32 または qemu 64 という名前の一般的なモデルを持つゲスト仮想マシンを表示します。これらのハイパーバイザーは高度なフィルタリングを実行し、すべての物理 CPU をいくつかのグループに分類し、ゲスト仮想マシンに提示される各グループのベースライン CPU モデルを 1 つ持つようにします。このような動作により、ホストの物理マシン間で、ゲスト仮想マシンの安全な移行が可能になります。すべての物理 CPU が同じグループに分類する物理 CPU がある場合、libvirt は通常ポリシー自体を実行しません。上位レイヤーが独自の必要なポリシーを定義するメカニズムを提供する代わりに、libvirt は通常ポリシー自体を実行しません。CPU モデル情報の取得方法および適切なゲスト仮想マシンの CPU モデルの定義方法を理解し、ホストの物理マシン間でゲスト仮想マシンの移行が正常に実行されるようにします。ハイパーバイザーは、ハイパーバイザーがリリースされた後に作成された機能および機能はエミュレートされない可能性があることに注意してください。

20.40.2. ホストの物理マシン CPU モデルについて

virsh capabilities コマンドは、ハイパーバイザー接続およびホストの物理マシンの機能を記述する XML ドキュメントを表示します。表示される XML スキーマが拡張され、ホストの物理マシンの CPU モデルに関する情報が提供されるようになりました。CPU モデルの記述に関する課題の 1 つは、すべてのアーキテクチャーが機能を公開する方法が異なることです。QEMU/KVM および libvirt は、CPU モデル名文字列を組み合わせたスキームと名前付きフラグのセットを使用します。
libvirt には、既知の CPU モデルの全データベースリストが含まれることは実際的ではありません。したがって、libvirt にはベースラインの CPU モデルが小さいリストになります。これは、実際のホストの物理マシン CPU で最も大きな CPUID ビットを共有するものを選択し、名前付き機能として残りのビットを一覧表示します。libvirt は、ベースライン CPU に含まれる機能を表示しないことに注意してください。最初に不具合のように表示される可能性がありますが、本セクションで説明されているように、実際にはこの情報を知る必要はありません。

20.40.3. VFIO IOMMU デバイスのサポートの判別

virsh domcapabilities コマンドを使用して VFIO のサポートを判別します。出力例を参照してください。

図20.3 VFIO のサポートの判別


# virsh domcapabilities

[...output truncated...]

<enum name='pciBackend'>
        <value>default</value>
        <value>vfio</value>

[...output truncated...]

20.40.4. ホスト物理マシンのプールを集約する、互換性のある CPU モデルの決定

1 つのホストの物理マシンに含まれる CPU 機能を確認することができるので、次のステップとして、ゲスト仮想マシンに最も適した CPU 機能を判断することができます。ゲスト仮想マシンを別のホストの物理マシンに移行する必要がないことが分かっている場合、ホストの物理マシンの CPU モデルを変更せずに渡すことができます。仮想データセンターには設定セットがあり、すべてのサーバーに 100% 同一 CPU が設定されることを保証することができます。ホスト物理マシンの CPU モデルは、変更せずにそのまま渡すことができます。ただし、より一般的なケースとして、ホストの物理マシンの CPU にはバリエーションがあります。この混合型の CPU 環境では、最も低い最も低い denominator CPU を決定する必要があります。これは完全に単純ではないので、libvirt はこのタスクに API を提供します。libvirt が XML ドキュメントのリストを提供している場合には、それぞれホストの物理マシンの CPU モデルを記述するため、libvirt はそれらの CPUID マスクを内部で変換し、CPUID マスク結果を XML CPU 記述に変換します。
virsh 機能が実行されると、libvirt が基本ワークステーションのケイパビリティーとして報告する例を以下に示します

図20.4 ホスト物理マシンの CPU モデル情報の取得


<capabilities>
  <host>
    <cpu>
      <arch>i686</arch>
      <model>pentium3</model>
      <topology sockets='1' cores='2' threads='1'/>
      <feature name='lahf_lm'/>
      <feature name='lm'/>
      <feature name='xtpr'/>
      <feature name='cx16'/>
      <feature name='ssse3'/>
      <feature name='tm2'/>
      <feature name='est'/>
      <feature name='vmx'/>
      <feature name='ds_cpl'/>
      <feature name='monitor'/>
      <feature name='pni'/>
      <feature name='pbe'/>
      <feature name='tm'/>
      <feature name='ht'/>
      <feature name='ss'/>
      <feature name='sse2'/>
      <feature name='acpi'/>
      <feature name='ds'/>
      <feature name='clflush'/>
      <feature name='apic'/>
    </cpu>
 </host>
</capabilities>
これで、別のサーバーとの比較を、同じ virsh capabilities コマンドと比較します。

図20.5 ランダムサーバーから CPU 記述を生成します。


<capabilities>
  <host>
    <cpu>
      <arch>x86_64</arch>
      <model>phenom</model>
      <topology sockets='2' cores='4' threads='1'/>
      <feature name='osvw'/>
      <feature name='3dnowprefetch'/>
      <feature name='misalignsse'/>
      <feature name='sse4a'/>
      <feature name='abm'/>
      <feature name='cr8legacy'/>
      <feature name='extapic'/>
      <feature name='cmp_legacy'/>
      <feature name='lahf_lm'/>
      <feature name='rdtscp'/>
      <feature name='pdpe1gb'/>
      <feature name='popcnt'/>
      <feature name='cx16'/>
      <feature name='ht'/>
      <feature name='vme'/>
    </cpu>
    ...snip...
この CPU の記述が以前のワークステーション CPU の説明と互換性があるかどうかを確認するには、virsh cpu-compare コマンドを使用します。
縮小されたコンテンツは、virsh-caps-workstation-cpu-only.xml という名前のファイルに保存され、virsh cpu-compare コマンドはこのファイルで実行できます。
# virsh cpu-compare virsh-caps-workstation-cpu-only.xml
Host physical machine CPU is a superset of CPU described in virsh-caps-workstation-cpu-only.xml
この出力にあるように、libvirt は CPU が厳密に互換性がないことを正しく報告しています。これは、クライアント CPU にないサーバー CPU にはいくつかの機能があります。クライアントとサーバー間で移行できるようにするには、XML ファイルを開き、一部の機能をコメントアウトする必要があります。削除する機能を確認するには、両方のマシンの CPU 情報が含まれる both-cpus.xml で virsh cpu-baseline コマンドを実行します# virsh cpu-baseline both-cpus.xml を実行すると、以下のようになります。

図20.6 複合 CPU ベースライン


<cpu match='exact'>
  <model>pentium3</model>
  <feature policy='require' name='lahf_lm'/>
  <feature policy='require' name='lm'/>
  <feature policy='require' name='cx16'/>
  <feature policy='require' name='monitor'/>
  <feature policy='require' name='pni'/>
  <feature policy='require' name='ht'/>
  <feature policy='require' name='sse2'/>
  <feature policy='require' name='clflush'/>
  <feature policy='require' name='apic'/>
</cpu>
この複合ファイルは、どの要素も共通するかを示します。一般的ではないものはすべてコメントアウトする必要があります。

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