Red Hat Training

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

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

このセクションでは、CPU モデルの要件について説明します。すべてのハイパーバイザーには、どの CPU 機能ゲストをデフォルトで認識させる独自のポリシーがあります。KVM がゲストに提示する CPU 機能セットは、ゲスト仮想マシン設定内で選択される CPU モデルによって異なります。qemu32 および qemu64 は基本的な CPU モデルですが、他のモデル(追加機能を含む)が利用可能です。各モデルとそのトポロジーは、ドメイン XML の以下の要素を使用して指定されます。

図23.14 CPU モデルおよびトポロジーの例 1

<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>

図23.15 CPU モデルおよびトポロジーの例 2

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

図23.16 CPU モデルおよびトポロジーの例 3

<cpu mode='host-passthrough'/>
CPU モデルまたは機能に制約がない場合、以下のような単純な CPU <要素を使用できます>

図23.17 CPU モデルおよびトポロジーの例 4

<cpu>
   <topology sockets='1' cores='2' threads='1'/>
</cpu>

図23.18 PPC64/PSeries CPU モデルの例

<cpu mode='custom'>
   <model>POWER8</model>
</cpu>

図23.19 aarch64/virt CPU モデルの例

<cpu mode='host-passthrough'/>
ドメイン XML の本項のコンポーネントは以下のとおりです。

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

要素 説明
<cpu> これは、ゲスト仮想マシンの CPU 要件を記述するメインコンテナーです。
<match> 仮想マシンの CPU がそれらの要件に一致する方法を指定します。トポロジーが <cpu> 内の唯一の要素である場合、match 属性は省略できます。match 属性で使用可能な値は次のとおりです。
  • minimum: 指定した CPU モデルおよび機能は、要求される CPU の最小ものを記述します。
  • exact: ゲスト仮想マシンに提供される仮想 CPU は、仕様と完全に一致します。
  • strict: ホストの物理マシン CPU が完全に仕様と一致しない限り、ゲスト仮想マシンは作成されません。
match 属性を省略でき、default は exact になることに注意してください。
<mode> このオプションの属性を使用すると、ゲスト仮想マシンの CPU を可能な限り、ホストの物理マシン CPU に近づく設定を簡素化することができます。mode 属性で使用可能な値は次のとおりです。
  • custom: ゲスト仮想マシンに CPU が提示される方法を説明しています。これは、モード属性が指定されていない場合のデフォルト設定です。このモードでは、ゲスト仮想マシンが起動するホストの物理マシンに関係なく、同じハードウェアで同じハードウェアが確認できます。
  • host-model - ホスト物理マシンの CPU 定義を機能 XML からドメイン XML にコピーするショートカットです。ドメインを起動する前に CPU 定義をコピーするため、各ホストの物理マシンに対応する最適なゲスト仮想マシンを提供する一方で、同じ XML をホスト物理マシンでも使用できます。match 属性と 機能要素は、このモードでは使用できません。詳細は、libvirt アップストリーム Web サイト を参照してください。
  • このモードでは、ゲスト仮想マシンに表示される CPU は、libvirt 内のエラーが発生する要素など、ホストの物理マシン CPU と同じです。このモードの欠点は、ゲスト仮想マシンの環境は異なるハードウェアで再現できないことです。したがって、このモードを使用すると、細心の注意を払ってください。model 要素と feature 要素はこのモードでは許可されません。
<model> ゲスト仮想マシンが要求する CPU モデルを指定します。利用可能な CPU モデルとその定義の一覧は、libvirt のデータディレクトリーにインストールされている cpu_map.xml ファイルにあります。ハイパーバイザーが正確な CPU モデルを使用できない場合は、CPU 機能の一覧を維持しつつ、libvirt は自動的にハイパーバイザーがサポートする閉じたモデルにフォールバックします。任意のフォールバック属性を使用するとこの動作を修正できます。サポートされていない CPU モデルを要求するドメインを開始しようとすると失敗します。fallback 属性でサポートされる値は allow (デフォルト)および forbid です。オプションの vendor_id 属性を使用して、ゲスト仮想マシンによって確認されるベンダー ID を設定できます。厳密に 12 文字の長さにする必要があります。設定されていない場合には、ホスト物理マシンのベンダー iID が使用されます。一般的な許容値は AuthenticAMD および GenuineIntel です。
<vendor> ゲスト仮想マシンにより要求される CPU ベンダーを指定します。この要素がない場合、ゲスト仮想マシンは、ベンダーに関係なく、指定された機能に一致する CPU で実行されます。サポートされるベンダーの一覧は cpu_map.xml を参照してください。
<topology> ゲスト仮想マシンに提供される仮想 CPU の要求されたトポロジーを指定します。ソケット、コア、およびスレッドには、ゼロ以外の値(CPU ソケットの合計数)、ソケットごとのコア数、コアごとのスレッド数をそれぞれ指定する必要があります。
<feature> 選択した CPU モデルが提供する機能を微調整するのに使用されるゼロ以上の要素を含めることができます。既知の機能名の一覧は、cpu_map.xml ファイルにあります。各 feature 要素の意味は、policy 属性によって異なります。この値は以下のいずれかに設定する必要があります。
  • force: ホストの物理マシン CPU が実際にサポートしているかどうかに関わらず、仮想の使用を強制的にサポートします。
  • require: この機能は、ホストの物理マシンの CPU でサポートされなければ、ゲスト仮想マシンの作成に失敗することを示します。これはデフォルトの設定です。
  • オプション: この機能は仮想 CPU でサポートされていますが、ホストの物理マシンの CPU でサポートされている場合に限ります。
  • disable: これは仮想 CPU ではサポートされません。
  • forbid: 機能がホストの物理マシン CPU でサポートされていると、ゲスト仮想マシンの作成に失敗します。

23.12.1. 指定した CPU の機能セットの変更

CPU モデルには継承された機能セットがありますが、個別の機能コンポーネントは機能ごとに機能上で許可するか、または禁止することができます。これにより、CPU のさらに個別化された設定が可能になります。

手順23.1 CPU 機能の有効化および無効化

  1. 開始するには、ゲスト仮想マシンをシャットダウンします。
  2. virsh edit [domain] コマンドを実行して、ゲスト仮想マシンの設定ファイルを開きます。
  3. <機能またはモデル内の <> パラメーターを変更して 、属性値「allow」を追加して強制的に機能を許可するか 、または「forbid」を使用して>、この機能のサポートを拒否します。

    図23.20 CPU 機能の有効化または無効化の例

    		      
    <!-- original feature set -->
    <cpu mode='host-model'>
       <model fallback='allow'/>
       <topology sockets='1' cores='2' threads='1'/>
    </cpu>
    
    <!--changed feature set-->
    <cpu mode='host-model'>
       <model fallback='forbid'/>
       <topology sockets='1' cores='2' threads='1'/>
    </cpu>
    

    図23.21 CPU 機能の有効化または無効化用の 2 の例

    		         
    <!--original feature set-->
    <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>
    
    <!--changed feature set-->
    <cpu match='exact'>
        <model fallback='allow'>core2duo</model>
        <vendor>Intel</vendor>
        <topology sockets='1' cores='2' threads='1'/>
        <feature policy='enable' name='lahf_lm'/>
      </cpu>
    
  4. 変更が完了したら、設定ファイルを保存し、ゲスト仮想マシンを起動します。

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

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

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


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

各セル要素は、NUMA セルまたは NUMA ノードを指定します。CPU は、ノードの一部である CPU の CPU または範囲を指定 します。memory は kibibytes でノードメモリーを指定します(1024 バイトのブロック)。それぞれのセルまたはノードに 0 から始まる順序を増やすため 、セル または ノードが割り当てられます。