Red Hat Training

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

23.12. CPU モデルとトポロジー

このセクションでは、CPU モデルの要件を説明します。すべてのハイパーバイザーには、ゲストにデフォルトで表示される CPU 機能に関する独自のポリシーがあることに注意してください。KVM によりゲストに提示される CPU 機能のセットは、ゲスト仮想マシンの設定で選択された CPU モデルによって異なります。qemu32qemu64 は基本的な 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 は省略可能で、デフォルトは exact になります。
<モード> このオプション属性を使用すると、ゲスト仮想マシンの CPU を、ホストの物理マシンの CPU にできるだけ近づけるように設定できます。mode 属性に使用できる値は、以下のとおりです。
  • custom - CPU がゲスト仮想マシンにどのように表示されるかを説明します。mode 属性が指定されていない場合のデフォルト設定です。このモードでは、ゲスト仮想マシンを起動しているホストの物理マシンがどのホストの物理マシンであっても、永続ゲスト仮想マシンが同じハードウェアを認識できるようになります。
  • host-model - ホストの物理マシンの CPU 定義を capabilities XML からドメイン XML にコピーするためのショートカット。CPU 定義はドメインの起動直前にコピーされるため、同じ XML を異なるホストの物理マシンで使用することも、各ホストの物理マシンがサポートする最適なゲスト仮想マシンの CPU を提供することもできます。match 属性および任意の機能要素は、このモードでは使用できません。詳細は、libvirt アップストリームの Web サイト を参照してください。
  • host-passthrough このモードでは、ゲスト仮想マシンから見える CPU は、libvirt 内のエラーの原因となる要素を含め、ホストの物理マシン CPU とまったく同じです。このモードのデメリットは、ゲストの仮想マシン環境を異なるハードウェアで再生できないため、このモードを使用する場合は十分注意して行うことが推奨されます。model 要素および feature 要素はこのモードでは使用できません。
<model> ゲスト仮想マシンが要求する CPU モデルを指定します。利用可能な CPU モデルとその定義のリストは、libvirt の データディレクトリーにインストールされている cpu_map.xml ファイルを参照してください。ハイパーバイザーが、正確な CPU モデルを使用できない場合、libvirt は、CPU 機能のリストを維持しながら、ハイパーバイザーが対応する最も近いモデルに自動的にフォールバックします。オプションの fallback 属性を使用すると、この動作を禁止できます。この場合、対応していない CPU モデルを要求するドメインを起動しようとすると失敗します。フォールバック属性で対応している値は、allow (デフォルト) と forbid です。オプションの vendor_id 属性を使用すると、ゲスト仮想マシンが認識するベンダー ID を設定できます。ちょうど 12 文字の長さである必要があります。設定しない場合は、ホスト物理マシンのベンダー iID が使用されます。一般的な値は、AuthenticAMD および GenuineIntel です。
<vendor> ゲスト仮想マシンが要求する CPU ベンダーを指定します。この要素がないと、ゲスト仮想マシンは、ベンダーに関係なく、指定された機能と一致する CPU で実行します。サポートされているベンダーのリストは、cpu_map.xml を参照してください。
<topology> ゲスト仮想マシンに提供される仮想 CPU に対して要求されるトポロジーを指定します。ソケット、コア、およびスレッドには、それぞれゼロ以外の値を 3 つ指定する必要があります。つまり、CPU ソケットの合計数、ソケットごとのコア数、およびコアごとのスレッド数です。
<機能> 選択した CPU モデルが提供する機能を微調整するために使用する、ゼロ以上の要素を含むことができます。既知の機能名のリストは、cpu_map.xml ファイルに記載されています。各機能要素の意味は、ポリシー属性により異なります。この属性は、次のいずれかの値に設定する必要があります。
  • force - 仮想マシンがホスト物理マシンの CPU で実際に対応しているかどうかに関係なく、仮想マシンを強制的に対応させます。
  • require - この機能がホストの物理マシンの CPU で対応していない場合は、ゲスト仮想マシンの作成に失敗することを指示します。これはデフォルト設定です。
  • optional - この機能は仮想 CPU で対応していますが、ホストの物理マシン CPU で対応している場合に限ります。
  • disable - これは仮想 CPU では対応していません。
  • forbid - この機能がホストの物理マシンの CPU でサポートされていると、ゲスト仮想マシンの作成に失敗します。

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

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

手順23.1 CPU 機能の有効化と無効化

  1. 開始するには、ゲスト仮想マシンをシャットダウンします。
  2. virsh edit [domain] を実行して、ゲスト仮想マシンの設定ファイルを開きます。
  3. <feature> または <model> 内のパラメーターを変更して、属性値 '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 例 2 CPU 機能の有効化または無効化

    		         
    <!--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 ノードを指定します。cpus は、ノードの一部である CPU または CPU の範囲を指定します。memory は、ノードメモリーを kibibytes (1024 バイトのブロック) で指定します。各セルまたはノードには、0 から始まる昇順で cellid または nodeid が割り当てられます。