20.23. KVM ゲスト仮想マシンへの複合 PCI デバイスの追加
複合機能の PCI デバイスを KVM ゲスト仮想マシンに追加するには、次のコマンドを実行します。
- virsh edit guestname コマンドを実行して、ゲスト仮想マシンの XML 設定ファイルを編集します。
<address>
要素に、multifunction='on'
属性を追加します。これにより、特定のマルチファンクション PCI デバイスに対して別の機能を使用できるようになります。<disk type='file' device='disk'> <driver name='qemu' type='raw' cache='none'/> <source file='/var/lib/libvirt/images/rhel62-1.img'/> <target dev='vda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0' multifunction='on'/> </disk>
2 つの機能を持つ PCI デバイスの場合は、XML 設定ファイルを修正して、最初のデバイスと同じスロット番号と、別の機能番号 (function='0x1' など) を持つ 2 番目のデバイスを追加します。以下に例を示します。<disk type='file' device='disk'> <driver name='qemu' type='raw' cache='none'/> <source file='/var/lib/libvirt/images/rhel62-1.img'/> <target dev='vda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0' multifunction='on'/> </disk> <disk type='file' device='disk'> <driver name='qemu' type='raw' cache='none'/> <source file='/var/lib/libvirt/images/rhel62-2.img'/> <target dev='vdb' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x1'/> </disk>
- lspci コマンドを実行します。KVM ゲスト仮想マシンからの出力は、virtio ブロックデバイスを示しています。
$ lspci 00:05.0 SCSI storage controller: Red Hat, Inc Virtio block device 00:05.1 SCSI storage controller: Red Hat, Inc Virtio block device
注記SeaBIOS アプリケーションは、BIOS インターフェイスとの互換性のためにリアルモードで実行します。これにより、利用可能なメモリーの量が制限されます。これにより、SeaBIOS は、限られた数のディスクのみを処理できるようになりました。現在、対応しているディスク数は次のとおりです。- virtio-scsi — 64
- virtio-blk — 4
- ahci/sata - 24 (6 ポートすべてが接続されている 4 つのコントローラー)
- usb-storage — 4
この問題を回避するには、仮想マシンに多数のディスクを割り当てる場合に、システムディスクの pci スロット番号が小さいことを確認してください。そのため、pci バスをスキャンすると、SeaBIOS が最初にそれを認識するようになります。ディスクごとのメモリーオーバーヘッドが小さいため、virtio-blk の代わりに virtio-scsi デバイスを使用することも推奨されます。