Red Hat Training

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

21.11. CPU モデルおよびトポロジー

このセクションは、CPU モデルの要件について扱います。すべてのハイパーバイザーには、ゲストがデフォルトで表示する CPU 機能についての独自のポリシーがあることに注意してください。QEMU/KVM によってゲストに提供される CPU 機能のセットは、ゲスト仮想マシン設定で選択される CPU モデルによって異なります。qemu32 および qemu64 は基本的な CPU モデルですが、他に利用できる他のモデル (追加の機能を含む) もあります。それぞれのモデルとそのトポロジーは、ドメイン XML の次の要素を使って指定されます。
<cpu match='exact'>
    <model fallback='allow'>core2duo</model>
    <vendor>Intel</vendor>
    <topology sockets='1' cores='2' threads='1'/>
    <feature policy='disable' name='lahf_lm'/>
  </cpu>

図21.13 CPU モデルおよびトポロジーサンプル 1

<cpu mode='host-model'>
   <model fallback='forbid'/>
   <topology sockets='1' cores='2' threads='1'/>
</cpu>

図21.14 CPU モデルおよびトポロジーサンプル 2

<cpu mode='host-passthrough'/>

図21.15 CPU モデルおよびトポロジーサンプル 3

CPU モデルまたはその機能への制限が設けられていない場合、以下のような単純な cpu 要素が使用される場合があります。
<cpu>
   <topology sockets='1' cores='2' threads='1'/>
</cpu>

図21.16 CPU モデルおよびトポロジーサンプル 4

ドメイン XML のこのセクションを構成するコンポーネントは以下の通りです。

表21.9 CPU モデルおよびトポロジー要素

要素説明
<cpu>この要素には、vCPU 機能セット用の全パラメーターが含まれます。
<match><cpu> 要素で表示された機能を利用可能な vCPU とどの程度一致させるかを指定します。<topology><cpu> で入れ子になっている唯一の要素である場合、match 属性を省略することができます。match 属性には以下のものがあります。
  • minimum - 記載される機能は必要最小限の要件になります。vCPU で利用可能な機能は表示されるものよりも多くある可能性がありますが、これが受け入れられる最小限のものです。最小限の要件が満たされないと、この値は失敗します。
  • exact - ゲスト仮想マシンに提供される仮想 CPU は、指定された機能に完全に一致する必要があります。一致するものがない場合、エラーが発生します。
  • strict - ホスト物理マシンの CPU が仕様に完全に一致しない場合、ゲスト仮想マシンは作成されません。
match 属性が <cpu> 要素から省略されると、デフォルトの match='exact' が使用されます。
<mode>このオプションの属性は、ゲスト仮想マシン CPU をホスト物理マシン CPU にできるだけ類似した設定を容易にするために使用できます。モード属性に使用できる属性は以下になります。
  • custom - CPU をゲスト仮想マシンに表示する方法を説明します。これは、mode 属性が指定されない場合のデフォルト設定です。このモードにより、ゲスト仮想マシンがどのホスト物理マシン上で起動されるかにかかわらず、永続的なゲスト仮想マシンに同じハードウェアが表示されるようにします。
  • host-model - これは基本的に、capabilities XML からドメイン XML にホスト物理マシンの CPU 定義をコピーするためのショートカットです。ドメインを起動する直前に CPU 定義がコピーされるので、同じ XML を異なる複数のホスト物理マシン上で使用することができます。その間、それぞれのホスト物理マシンがサポートする最適なゲスト仮想マシン CPU は依然として提供されます。match 属性も、いずれの機能要素もこのモードでは使用できません。詳細は、libvirt domain XML CPU models を参照してください。
  • host-passthrough このモードでは、ゲスト仮想マシンに表示される CPU は、libvirt 内でエラーを生じさせる要素を含め、ホスト物理マシン CPU の場合と全く同じになります。このモードの大きな短所は、ゲスト仮想マシン環境を異なるハードウェア上で再現できないことにあり、そのためこのモードは細心の注意を払って使用することが推奨されます。model または feature 要素もいずれもこのモードでは許可されません。
  • host-modelhost-passthrough の両方のモードでは、現在のホスト物理マシンで使用される実際の (host-passthrough モードの値と近似する) CPU 定義は、virDomainGetXMLDesc API を呼び出す際に VIR_DOMAIN_XML_UPDATE_CPU フラグを指定することによって決定できます。異なるハードウェアが提供されると、オペレーティングシステムの再アクティブ化を引き起こす傾向があり、かつ異なる機能を持つ複数のホスト物理マシン間で移行するゲスト仮想マシンを実行する場合は、この出力を使用して、より堅牢な移行のために XML を custom モードに書き換えることができます。
<model>ゲスト仮想マシンが要求する CPU モデルを指定します。利用可能な CPU モデルとそれらの定義の一覧は、libvirt のデータディレクトリーにインストールされた cpu_map.xml ファイルにあります。ハイパーバイザーが正確な CPU モデルを使用できない場合、libvirt は、CPU 機能の一覧を維持しつつ、ハイパーバイザーでサポートされる直近のモデルにフォールバックします。オプションの fallback 属性は、この動作を禁止するために使用できます。この場合、サポートされていない CPU モデルを要求するドメインを起動する試行は失敗します。fallback 属性のサポートされている値は、allow (デフォルト) と forbid です。オプションの vendor_id 属性は、ゲスト仮想マシンによって表示されるベンダー ID を設定するために使用できます。ID の長さは、ちょうど 12 文字分である必要があります。これが設定されていない場合、ホスト物理マシンのベンダー ID が使用されます。使用できる標準的な値は、AuthenticAMDGenuineIntel です。
<vendor>ゲスト仮想マシンが要求する CPU ベンダーを指定します。この要素がない場合、ゲスト仮想マシンは、ベンダーに関係なく、指定された機能に一致する CPU 上で実行されます。サポートされるベンダーの一覧は cpu_map.xml にあります。
<topology>ゲスト仮想マシンに提供される仮想 CPU の要求されるトポロジーを指定します。3 つのゼロ以外の値を、ソケット、コアおよびスレッドに指定する必要があります。それぞれは、CPU ソケットの合計数、1 ソケットあたりのコア数、1 コアあたりのスレッド数になります。
<feature>選択した CPU モデルによって提供される機能を微調整するために使用されるゼロまたは 1 つ以上の要素を含めることができます。既知の機能名の一覧は、CPU モデルと同じファイルにあります。それぞれの feature 要素の意味は、以下の値のいずれかに設定する必要のあるそのポリシー属性によって変わります。
  • force - 仮想マシンがホスト物理マシン CPU に実際にサポートされているかどうかにかかわらず、仮想マシンのサポートを強制します。
  • require - 機能がホスト物理マシンによってサポートされていない場合、ゲスト仮想マシンの作成が失敗することを決定します。これはデフォルトの設定です。
  • optional - この機能は仮想 CPU によってサポートされますが、サポートされるのは、ホスト物理マシン CPU によってサポートされている場合のみです。
  • disable - これは仮想 CPU によってサポートされません。
  • forbid - 機能がホスト物理マシン CPU によってサポートされている場合、ゲスト仮想マシンの作成は失敗します。

21.11.1. ゲスト仮想マシンの NUMA トポロジー

ゲスト仮想マシンの NUMA トポロジーは、<numa> 要素とドメイン XML の以下の部分を使用して指定できます。

  <cpu>
    <numa>
      <cell cpus='0-3' memory='512000'/>
      <cell cpus='4-7' memory='512000'/>
    </numa>
  </cpu>
  ...

図21.17 ゲスト仮想マシンの NUMA トポロジー

それぞれの cell 要素は NUMA セルまたは NUMA ノードを指定します。cpus は、ノードの一部である CPU または CPU の範囲を指定します。memory はノードメモリーをキビバイト単位で指定します (例: 1024 バイトのブロック)。それぞれのセルまたはノードには、0 から始まる昇順で cellid または nodeid が割り当てられます。