Red Hat Training

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

16.4. デバイスコントローラーの設定

ゲスト仮想マシンのアーキテクチャーによっては、一部のデバイスバスは複数回表示され、仮想デバイスのグループは仮想コントローラーに関連付けられています。通常、libvirt は、明示的な XML マークアップを必要とせずに、自動的にこのようなコントローラーを推測できますが、場合によっては仮想コントローラー要素を明示的に設定する方が良い場合があります。

図16.15 仮想コントローラーのドメイン XML の例


  ...
  <devices>
    <controller type='ide' index='0'/>
    <controller type='virtio-serial' index='0' ports='16' vectors='4'/>
    <controller type='virtio-serial' index='1'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x0a' function='0x0'/>
    </controller>
    ...
  </devices>
  ...
各コントローラーには必須の属性 <controller type> があり、これは次のいずれかになります。
  • ide
  • fdc
  • scsi
  • sata
  • usb
  • ccid
  • virtio-serial
  • pci
<controller> 要素には必須の属性 <controller index> があります。これは、バスコントローラーが発生した順序を表す 10 進数の整数です (<address> 要素のコントローラー属性で使用されます)。<controller type ='virtio-serial'> には、追加のオプション属性 (ports および vectors) が 2 つあります。これは、コントローラーを介して接続できるデバイスの数を制御します。
<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 の例を以下に示します。

図16.16 USB コントローラーのドメイン XML の例

   
     ...
  <devices>
    <controller type='usb' index='0' model='ich9-ehci1'>
      <address type='pci' domain='0' bus='0' slot='4' function='7'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci1'>
      <master startport='0'/>
      <address type='pci' domain='0' bus='0' slot='4' function='0' multifunction='on'/>
    </controller>
    ...
  </devices>
  ...
   

PCI コントローラーには、以下の値を持つオプションの model 属性があります。
  • pci-root
  • pcie-root
  • pci-bridge
  • dmi-to-pci-bridge
暗黙的な PCI バスを提供するマシンタイプの場合、index='0' を使用する pci-root コントローラーは自動追加され、PCI デバイスを使用する必要があります。pci-root にはアドレスがありません。PCI ブリッジは、model='pci-root' が提供する 1 つのバスに収まらないデバイスが多すぎる場合、または 0 を超える PCI バス番号が指定されている場合に自動追加されます。PCI ブリッジは手動で指定することもできますが、そのアドレスには、指定されている PCI コントローラーが提供する PCI バスのみが表示されるようにしてください。PCI コントローラーインデックスにギャップがあると、設定が無効になる場合があります。以下の XML サンプルは、<devices> セクションに追加できます。

図16.17 PCI ブリッジのドメイン XML の例


  ...
  <devices>
    <controller type='pci' index='0' model='pci-root'/>
    <controller type='pci' index='1' model='pci-bridge'>
      <address type='pci' domain='0' bus='0' slot='5' function='0' multifunction='off'/>
    </controller>
  </devices>
  ...
暗黙的な 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 デバイスに配置されます。

図16.18 PCIe (PCI express) のようなドメイン XML

   
     ...
  <devices>
    <controller type='pci' index='0' model='pcie-root'/>
    <controller type='pci' index='1' model='dmi-to-pci-bridge'>
      <address type='pci' domain='0' bus='0' slot='0xe' function='0'/>
    </controller>
    <controller type='pci' index='2' model='pci-bridge'>
      <address type='pci' domain='0' bus='1' slot='1' function='0'/>
    </controller>
  </devices>
  ...
   

以下の XML 設定は、USB 3.0 / xHCI エミュレーションに使用されます。

図16.19 USB3/xHCI デバイスのドメイン XML の例

   
     ...
  <devices>
    <controller type='usb' index='3' model='nec-xhci'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x0f' function='0x0'/>
    </controller>
  </devices>
    ...