11.10. IBM Z の仮想マシンへの PCI デバイスの接続
vfio-pci
デバイスドライバーを使用すると、パススルーモードで PCI デバイスを IBM Z ホストの仮想マシンに割り当てることができます。たとえば、これにより、仮想マシンはデータベースの処理に NVMe フラッシュディスクを使用できるようになります。
前提条件
- IBM Z ハードウェアアーキテクチャーを使用するホストシステムがある。
- Linux オペレーティングシステムのターゲット仮想マシンがある。
ホストに必要な
vfio
カーネルモジュールがロードされている。# lsmod | grep vfio
このコマンドの出力には、以下のモジュールが含まれている必要があります。
-
vfio_pci
-
vfio_pci_core
-
vfio_iommu_type1
-
手順
使用するデバイスの PCI アドレス識別子を取得します。
# lspci -nkD 0000:00:00.0 0000: 1014:04ed Kernel driver in use: ism Kernel modules: ism 0001:00:00.0 0000: 1014:04ed Kernel driver in use: ism Kernel modules: ism 0002:00:00.0 0200: 15b3:1016 Subsystem: 15b3:0062 Kernel driver in use: mlx5_core Kernel modules: mlx5_core 0003:00:00.0 0200: 15b3:1016 Subsystem: 15b3:0062 Kernel driver in use: mlx5_core Kernel modules: mlx5_core
PCI デバイスを接続する仮想マシンの XML 設定を開きます。
# virsh edit vm-name
以下の
<hostdev>
設定を XML ファイルの<devices>
セクションに追加します。address
行の値を、デバイスの PCI アドレスに置き換えます。たとえば、デバイスアドレスが0003:00:00.0
の場合は、以下の設定を使用します。<hostdev mode="subsystem" type="pci" managed="yes"> <driver name="vfio"/> <source> <address domain="0x0003" bus="0x00" slot="0x00" function="0x0"/> </source> <address type="pci"/> </hostdev>
オプション: ゲストオペレーティングシステムが PCI デバイスを検出する方法を変更するには、
<zpci>
サブ要素を<address>
要素に追加することもできます。<zpci>
行では、uid
値とfid
値を調整できます。これにより、ゲストオペレーティングシステムのデバイスの PCI アドレスと機能 ID が変更されます。<hostdev mode="subsystem" type="pci" managed="yes"> <driver name="vfio"/> <source> <address domain="0x0003" bus="0x00" slot="0x00" function="0x0"/> </source> <address type="pci"> <zpci uid="0x0008" fid="0x001807"/> </address> </hostdev>
この例では、以下が適用されます。
-
uid="0x0008"
は、仮想マシンのデバイスのドメイン PCI アドレスを0008:00:00.0
に設定します。 fid="0x001807"
は、デバイスのスロット値を0x001807
に設定します。これにより、仮想マシンのファイルシステムのデバイス設定が/sys/bus/pci/slots/00001087/address
に保存されます。これらの値が指定されていない場合は、
libvirt
がこれらの値を自動的に設定します。
-
- XML 設定を保存します。
仮想マシンが実行中の場合はシャットダウンします。
# virsh shutdown vm-name
検証
- 仮想マシンを起動し、ゲストオペレーティングシステムにログインします。
ゲストオペレーティングシステムで、PCI デバイスがリストされていることを確認します。
たとえば、デバイスアドレスが
0003:00:00.0
の場合は、次のコマンドを使用します。# lspci -nkD | grep 0003:00:00.0 0003:00:00.0 8086:9a09 (rev 01)