15.5.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オプションは、設定の変更を永続化します。シャットダウンした仮想マシンにデバイスを接続する場合は、--liveオプションを使用しないでください。--macオプションは、接続するインターフェイスの MAC アドレスを指定します。インターフェイスの MAC アドレスを指定しない場合、52:54:00 で始まる永続的な疑似ランダムアドレスが仮想マシンによって自動的に生成されます。重要仮想マシンの XML 設定ファイルの <hostdev> セクションにデバイスエントリーを手動で追加して SR-IOV VF を仮想マシンに割り当てる場合、MAC アドレスが永続的に割り当てられず、通常、ホストを再起動するたびにゲストのネットワーク設定を再設定する必要があります。
このような複雑化を回避するには、この手順で説明されているように、
virsh attach-interfaceコマンドを使用してください。
検証
- 手順が成功すると、ゲストオペレーティングシステムが新しいネットワークインターフェイスコントローラーを検出します。