Red Hat Training

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

14.16.3. ホスト物理マシンのプールに対応するための互換性のある CPU モデルの決定

1 台のホスト物理マシンに搭載されている CPU 機能を確認できるようになりました。次の手順は、ゲスト仮想マシンに公開するのに最も適した CPU 機能を判断することです。ゲスト仮想マシンを別のホスト物理マシンに移行する必要がないことが分かっている場合は、ホスト物理マシンの CPU モデルを変更せずにそのまま渡すことができます。仮想化データセンターには、すべてのサーバーで 100% 同一の CPU が保証されるように設定されている場合があります。ここでも、ホスト物理マシンの CPU モデルは、変更せずにそのまま渡すことができます。ただし、より一般的なケースは、ホストの物理マシン間で CPU にバリエーションがある場合です。この混合 CPU 環境では、最も低い公共分母の CPU を決定する必要があります。これは完全に単純なものではないため、libvirt はこのタスクの API を提供します。libvirt が、ホストの物理マシンの CPU モデルをそれぞれ説明する XML ドキュメントの一覧を提供している場合、libvirt は、これらを CPUID マスクに内部的に変換し、その共通部分を計算して、CPUID マスクの結果を XML CPU 説明に戻します。
以下は、virsh capabilities の実行時に、libvirt が基本的なワークステーションの機能として報告する内容の例になります。

図14.3 ホストの物理マシンの 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 コマンドを使用してランダムサーバーと比較します。

図14.4 ランダムなサーバーから 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.xmlvirsh cpu-baseline コマンドを実行します。 # virsh cpu-baseline both-cpus.xml を実行すると、以下が行われます。

図14.5 複合 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>
この複合ファイルでは、共通する要素が示されます。共通していないものはすべてコメントアウトする必要があります。