9.3. デバイスコントローラーの設定
ゲスト仮想マシンのアーキテクチャーによっては、一部のデバイスバスは複数回表示され、仮想デバイスのグループは仮想コントローラーに関連付けられています。通常、libvirt は、明示的な XML マークアップを必要とせずに、自動的にこのようなコントローラーを推測できますが、場合によっては仮想コントローラー要素を明示的に設定する方が良い場合があります。
図9.11 仮想コントローラーのドメイン XML の例
各コントローラーには必須の属性
<controller type> があり、これは次のいずれかになります。
- ide
- fdc
- scsi
- sata
- usb
- ccid
- virtio-serial
- pci
<controller> 要素には必須の属性 <controller index> があります。これは、バスコントローラーが発生した順序を表す 10 進数の整数です (<address> 要素のコントローラー属性で使用されます)。<controller type ='virtio-serial'> には、追加のオプション属性 (ports および vectors) が 2 つあります。これは、コントローラーを介して接続できるデバイスの数を制御します。Red Hat Enterprise Linux 6 は、デバイスあたり 32 を超えるベクターの使用をサポートしていないことに注意してください。よりベクトルを使用すると、ゲスト仮想マシンの移行でエラーが発生します。
<controller type ='scsi'> の場合、以下の値を持つことができる任意の属性model モデルがあります。
- auto
- buslogic
- ibmvscsi
- lsilogic
- lsisas1068
- lsisas1078
- virtio-scsi
- vmpvscsi
<controller type ='usb'> の場合、以下の値を持つことができる任意の属性model モデルがあります。
- piix3-uhci
- piix4-uhci
- ehci
- ich9-ehci1
- ich9-uhci1
- ich9-uhci2
- ich9-uhci3
- vt82c686b-uhci
- pci-ohci
- nec-xhci
注記
ゲスト仮想マシンに対して USB バスを明示的に無効にする必要がある場合は、
<model='none'> を使用できます。 .
コントローラー自体が PCI バスまたは USB バスにある場合は、オプションのサブ要素
<address> は、「デバイスのアドレスの設定」 に示したセマンティクスを使用して、コントローラーとマスターバスの正確な関係を指定できます。
オプションの sub-element
<driver> は、ドライバー固有のオプションを指定できます。現在、コントローラーのキューの数を指定する属性キューのみをサポートしています。パフォーマンスを最適化するには、vCPU の数に一致する値を指定することが推奨されます。
USB コンパニオンコントローラーには、コンパニオンとマスターコントローラーの完全なリレーションを指定するためのオプションのサブ要素
<master> があります。コンパニオンコントローラーはマスターと同じバスにあるため、コンパニオン index は等しい値になります。
使用できる XML の例を以下に示します。
図9.12 USB コントローラーのドメイン XML の例
PCI コントローラーには、以下の値を持つオプションの
model 属性があります。
- pci-root
- pcie-root
- pci-bridge
- dmi-to-pci-bridge
ルートコントローラー (
pci-root および pcie-root) には、64 ビット PCI ホールの大きさ (キロバイト単位、または pcihole64 の unit 属性で指定された単位) を指定するオプションの pcihole64 要素があります。一部のゲスト仮想マシン (Windows Server 2003) は、unit が無効になっていない限り (0 unit='0' に設定)、クラッシュを引き起こす可能性があります。
暗黙的な PCI バスを提供するマシンタイプの場合、
index='0' を使用する pci-root コントローラーは自動追加され、PCI デバイスを使用する必要があります。pci-root にはアドレスがありません。PCI ブリッジは、model='pci-root' が提供する 1 つのバスに収まらないデバイスが多すぎる場合、または 0 を超える PCI バス番号が指定されている場合に自動追加されます。PCI ブリッジは手動で指定することもできますが、そのアドレスには、指定されている PCI コントローラーが提供する PCI バスのみが表示されるようにしてください。PCI コントローラーインデックスにギャップがあると、設定が無効になる場合があります。以下の XML サンプルは、<devices> セクションに追加できます。
図9.13 PCI ブリッジのドメイン XML の例
暗黙的な PCI Express (PCIe) バスを提供するマシンタイプ (Q35 チップセットに基づくマシンタイプなど) の場合、
index='0' を使用する pcie-root コントローラーはドメインの設定に自動的に追加されます。pcie-root にはアドレスはありませんが、31 スロット (1-31 の番号) を提供し、PCIe デバイスの接続にのみ使用できます。pcie-root コントローラーを持つシステムで標準的な PCI デバイスを接続するには、model='dmi-to-pci-bridge' を持つ pci コントローラーが自動的に追加されます。dmi-to-pci-bridge コントローラーは、(pcie-root が提供するように) PCIe スロットに接続し、それ自体で 31 個の標準的な PCI スロットを提供します (これはホットプラグできません)。ゲストシステムにホットプラグ可能な PCI スロットを確保するために、pci-bridge コントローラーも自動的に作成され、自動作成された dmi-to-pci-bridge コントローラーのスロットの 1 つに接続されます。PCI アドレスが libvirt により自動決定されるすべてのゲストデバイスは、この pci-bridge デバイスに配置されます。
図9.14 PCIe (PCI express) のようなドメイン XML