14.8.2. 仮想マシンへの SR-IOV ネットワークデバイスの割り当て
SR-IOV ネットワークデバイスを仮想マシン(VM)に割り当てるには、ホストの SR-IOV 対応ネットワークインターフェイスから Virtual Function (VF)を作成し、VF をデバイスとして指定された仮想マシンに割り当てます。詳細は、次の手順を参照してください。
前提条件
ホストの CPU およびファームウェアは、IOMMU (I/O Memory Management Unit) に対応している。
- Intel CPU を使用している場合は、Intel VT-d (Virtualization Technology for Directed I/O) に対応する必要があります。
- AMD CPU を使用している場合は、AMD-Vi 機能に対応している必要があります。
ホストシステムが、アクセス制御サービス (ACS) を使用して PCIe トポロジーの DMA (Direct Memory Access) 分離を提供している。この点をシステムベンダーに確認してください。
詳細は、SR-IOV を実装するためのハードウェアの考慮事項 を参照してください。
物理ネットワークデバイスが SR-IOV をサポートしている。システムのネットワークデバイスが SR-IOV に対応しているかどうかを確認するには、
lspci -vコマンドを使用して、出力でSingle Root I/O Virtualization (SR-IOV)を探します。# lspci -v [...] 02:00.0 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01) Subsystem: Intel Corporation Gigabit ET Dual Port Server Adapter Flags: bus master, fast devsel, latency 0, IRQ 16, NUMA node 0 Memory at fcba0000 (32-bit, non-prefetchable) [size=128K] [...] Capabilities: [150] Alternative Routing-ID Interpretation (ARI) Capabilities: [160] Single Root I/O Virtualization (SR-IOV) Kernel driver in use: igb Kernel modules: igb [...]VF の作成に使用するホストのネットワークインターフェイスが実行中である。たとえば、eth1 インターフェイスをアクティブにして、実行していることを確認するには、次のコマンドを実行します。
# ip link set eth1 up # ip link show eth1 8: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT qlen 1000 link/ether a0:36:9f:8f:3f:b8 brd ff:ff:ff:ff:ff:ff vf 0 MAC 00:00:00:00:00:00, spoof checking on, link-state auto vf 1 MAC 00:00:00:00:00:00, spoof checking on, link-state auto vf 2 MAC 00:00:00:00:00:00, spoof checking on, link-state auto vf 3 MAC 00:00:00:00:00:00, spoof checking on, link-state autoSR-IOV デバイス割り当てを有効にするには、ホスト BIOS およびカーネルで IOMMU 機能を有効にする必要があります。これを行うには、以下を行います。
Intel ホストで VT-d を有効にします。
intel_iommu=onおよびiommu=ptパラメーターを使用して GRUB 設定を再生成します。# grubby --args="intel_iommu=on iommu=pt" --update-kernel=ALL- ホストを再起動します。
AMD ホストで、AMD-Vi を有効にします。
iommu=ptパラメーターで GRUB 設定を再生成します。# grubby --args="iommu=pt" --update-kernel=ALL- ホストを再起動します。
ARM 64 ホストでは、必要な SMMU 機能はデフォルトで有効になっていますが、パフォーマンスを向上させるには、
iommu=ptパラメーターの設定も推奨されます。iommu=ptパラメーターで GRUB 設定を再生成します。# grubby --args="iommu=pt" --update-kernel=ALL- ホストを再起動します。
手順
オプション: ネットワークデバイスで使用できる VF の最大数を確認します。これを実行するには、次のコマンドを使用して、eth1 を SR-IOV 互換のネットワークデバイスに置き換えます。
# cat /sys/class/net/eth1/device/sriov_totalvfs 7次のコマンドを実行して、Virtual Function (VF) を作成します。
# echo VF-number > /sys/class/net/network-interface/device/sriov_numvfs上記コマンドでは、以下のようになります。
- VF-number には、PF に作成する VF の数を入力します。
- network-interface は、VF が作成されるネットワークインターフェイスの名前に置き換えます。
以下の例では、eth1 ネットワークインターフェイスから 2 つの VF を作成します。
# echo 2 > /sys/class/net/eth1/device/sriov_numvfsVF が追加されたことを確認します。
# lspci | grep Ethernet 82:00.0 Ethernet controller: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection (rev 01) 82:00.1 Ethernet controller: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection (rev 01) 82:10.0 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01) 82:10.2 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01)VF の作成に使用したネットワークインターフェイス用の udev ルールを作成して、作成した VF を永続化します。たとえば、eth1 インターフェイスの場合は、
/etc/udev/rules.d/eth1.rulesファイルを作成し、以下の行を追加します。ACTION=="add", SUBSYSTEM=="net", ENV{ID_NET_DRIVER}=="ixgbe", ATTR{device/sriov_numvfs}="2"これにより、ホストの起動時に
ixgbeドライバーを使用する 2 つの VF がeth1インターフェイスで自動的に利用できるようになります。永続的な SR-IOV デバイスが必要ない場合は、この手順を省略します。警告現在、Broadcom NetXtreme II BCM57810 アダプターで VF を永続化しようとすると、上記の設定が正しく機能しません。また、このアダプターに基づく VF を Windows 仮想マシンに接続することは、現在信頼性がありません。
新しく追加された VF インターフェイスデバイスの 1 つを実行中の仮想マシンにホットプラグします。
# virsh attach-interface <vm_name> hostdev 0000:82:10.0 --mac 52:54:00:00:01:01 --managed --live --configこの
--liveオプションは、稼働中の仮想マシンにデバイスを接続します。起動間の永続性はありません。--configオプションは、設定の変更を永続化します。デバイスをシャットダウンした仮想マシンに接続するには、the-liveオプションを使用しないでください。--macオプションは、接続されたインターフェイスの MAC アドレスを指定します。インターフェイスの MAC アドレスを指定しないと、仮想マシンは 52:54:00 で始まる永続的な疑似ランダムアドレスを自動的に生成します。重要仮想マシンの XML 設定ファイルの < hostdev > セクションにデバイスエントリーを手動で追加して SR-IOV VF を仮想マシンに割り当てる場合、MAC アドレスは永続的に割り当てられず、ゲストのネットワーク設定は通常、すべてのホストの再起動時に再設定する必要があります。
このような問題を回避するには、この手順で説明されているように、
virsh attach-interfaceコマンドを使用します。
検証
- この手順に成功すると、ゲストオペレーティングシステムは新しいネットワークインターフェイスコントローラーを検出します。