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 のこのセクションのコンポーネントは以下のとおりです。
要素 | 説明 |
---|---|
<cpu> | これは、ゲスト仮想マシンの CPU 要件を説明するためのメインコンテナーです。 |
<match> | ゲスト仮想マシンに仮想 CPU を提供する方法を指定する場合は、この要件を満たす必要があります。トポロジーが <cpu> 内で唯一の要素である場合は、match 属性を省略できます。match 属性に使用できる値は、以下のとおりです。
match は省略可能で、デフォルトは exact になります。 |
<モード> | このオプション属性を使用すると、ゲスト仮想マシンの CPU を、ホストの物理マシンの CPU にできるだけ近づけるように設定できます。mode 属性に使用できる値は、以下のとおりです。
|
<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 ファイルに記載されています。各機能要素の意味は、ポリシー属性により異なります。この属性は、次のいずれかの値に設定する必要があります。
|
23.12.1. 指定した CPU の機能セットの変更
CPU モデルには固有の機能セットがありますが、個々の機能コンポーネントは機能ごとに許可または禁止することができるため、CPU のより個別化された設定が可能となります。
手順23.1 CPU 機能の有効化と無効化
- 開始するには、ゲスト仮想マシンをシャットダウンします。
- virsh edit [domain] を実行して、ゲスト仮想マシンの設定ファイルを開きます。
<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>
- 変更が完了したら、設定ファイルを保存して、ゲスト仮想マシンを起動します。
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
が割り当てられます。