12.6. Mellanox Virtual Function が割り当てられた仮想マシンのライブマイグレーション
Mellanox ネットワークデバイスの Virtual Function (VF) が割り当てられた仮想マシン (VM) のライブマイグレーションを利用できます。
Red Hat は、Mellanox ネットワークデバイスの割り当て済み VF を使用して、仮想マシンライブマイグレーションの一般的な機能を実装します。ただし、機能は特定の Mellanox デバイスモデルとファームウェアバージョンによって異なります。
現在、VF 移行は Mellanox CX-7 ネットワークデバイスでのみサポートされています。
Mellanox CX-7 ネットワークデバイス上の VF は、ライブマイグレーションに必要な機能を追加する新しい mlx5_vfio_pci ドライバーを使用します。この新しいドライバーは、libvirt によって VF に自動的にバインドされます。
Red Hat は、付属の mlx5_vfio_pci ドライバーのみを使用して Mellanox VF ライブマイグレーションを直接サポートしています。
制限事項
Virtual Function が割り当てられた仮想マシンのライブマイグレーションを実行する場合、一部の仮想化機能を使用できません。
仮想マシンのダーティーメモリーページレート生成の計算
現在、Mellanox VF が接続された仮想マシンを移行する場合、
virsh domjobinfoおよびvirsh domdirtyrate-calcコマンドによって提供されるライブマイグレーションデータと統計情報は正確ではありません。計算では、接続された VF の影響を含めずにゲスト RAM のみがカウントされるためです。- コピー後のライブマイグレーションの使用
- 仮想マシンでの仮想 I/O Memory Management Unit (vIOMMU) デバイスの使用
Mellanox CX-7 ネットワークデバイスに固有の追加の制限:
送信元ホストと送信先ホストの両方で、同じパラメーターセット識別子 (PSID) とファームウェアバージョンを持つ CX-7 デバイスが使用されます。
次のコマンドでデバイスの PSID を確認できます。
# mstflint -d <device_pci_address> query | grep -i PSID PSID: MT_1090111019- 1 つの CX-7 Physical Function で、最大 4 つの VF を同時にライブマイグレーションに使用できます。たとえば、4 つの VF が割り当てられた 1 台の仮想マシンを移行することも、各仮想マシンに 1 つの VF が割り当てられた 4 台の仮想マシンを移行することもできます。
前提条件
ファームウェアバージョンが 28.36.1010 以上の Mellanox CX-7 ネットワークデバイスを使用している。
Mellanox のドキュメント でサポートされているファームウェアバージョンを参照し、最新バージョンのファームウェアを使用していることを確認してください。
- ホストが、Intel 64、AMD64、または ARM 64 CPU アーキテクチャーを使用している。
- 送信元ホスト上の Mellanox ファームウェアのバージョンは、宛先ホスト上のバージョンと同じです。
mstflintパッケージが、移行元ホストと移行先ホストの両方にインストールされている。# dnf install mstflintMellanox CX-7 ネットワークデバイスで、
VF_MIGRATION_MODEがMIGRATION_ENABLEDに設定されている。# mstconfig -d <device_pci_address> query | grep -i VF_migration VF_MIGRATION_MODE MIGRATION_ENABLED(2)次のコマンドを使用して、
VF_MIGRATION_MODEをMIGRATION_ENABLEDに設定できます。# mstconfig -d <device_pci_address> set VF_MIGRATION_MODE=2
openvswitchパッケージが、移行元ホストと移行先ホストの両方にインストールされている。# dnf install openvswitch送信元デバイスと宛先デバイスの
nv_configパラメーターが一致しています。デバイスの設定を確認するには、次のコマンドを使用します。# mlxconfig -d <device_pci_address> query- お客様のシステムは、Single Root I/O Virtualization (SR-IOV) デバイスに関する一般的な前提条件をすべて満たしています。詳細は、仮想マシンへの SR-IOV ネットワークデバイスの割り当て を参照してください。
- お客様のシステムは、仮想マシン移行に関する一般的な前提条件をすべて満たしています。詳細は、コマンドラインを使用した仮想マシンの移行 を参照してください。
手順
移行元ホストで、Mellanox ネットワークデバイスを
switchdevモードに設定します。# devlink dev eswitch set pci/<device_pci_address> mode switchdev移行元ホストで、Mellanox デバイス上に Virtual Function を作成します。
# echo 1 > /sys/bus/pci/devices/0000\:e1\:00.0/sriov_numvfsファイルパスの
/0000\:e1\:00.0/の部分は、デバイスの PCI アドレスに基づいています。この例では、0000:e1:00.0です。VF の PCI アドレスを表示します。
# lshw -c network -businfo Bus info Device Class Description ============================================================================= pci@0000:e1:00.0 enp225s0np0 network MT2910 Family [ConnectX-7] pci@0000:e1:00.1 enp225s0v0 network ConnectX Family mlx5Gen Virtual Function移行元ホストで、VF をそのドライバーからバインド解除します。
# virsh nodedev-detach <vf_pci_address> --driver pci-stub移行元ホストで、VF の移行機能を有効にします。
# devlink port function set pci/0000:e1:00.0/1 migratable enableこの例の
pci/0000:e1:00.0/1は、指定の PCI アドレスを持つ Mellanox デバイス上の最初の VF を示しています。移行元ホストで、VF の移行用に Open vSwitch (OVS) を設定します。Mellanox デバイスが
switchdevモードの場合、ネットワーク経由でデータを転送できません。openvswitchサービスが実行中であることを確認します。# systemctl start openvswitchネットワークのパフォーマンスを向上させるために、ハードウェアオフロードを有効にします。
# ovs-vsctl set Open_vSwitch . other_config:hw-offload=true移行中にネットワーク接続が開いたままになるように、最大アイドル時間を増やします。
# ovs-vsctl set Open_vSwitch . other_config:max-idle=300000OVS インスタンスに新しいブリッジを作成します。
# ovs-vsctl add-br <bridge_name>openvswitchサービスを再起動します。# systemctl restart openvswitch物理的な Mellanox デバイスを OVS ブリッジに追加します。
# ovs-vsctl add-port <bridge_name> enp225s0np0この例では、
enp225s0np0は Mellanox デバイスのネットワークインターフェイス名です。Mellanox デバイスの VF を OVS ブリッジに追加します。
# ovs-vsctl add-port <bridge_name> enp225s0npf0vf0この例では、
enp225s0npf0vf0は VF のネットワークインターフェイス名です。
- 移行先ホスト でステップ 1 - 5 を繰り返します。
移行元ホストで、
mlx_vf.xmlなどの新しいファイルを開き、次のような VF の XML 設定を追加します。<interface type='hostdev' managed='yes'> <mac address='52:54:00:56:8c:f7'/> <source> <address type='pci' domain='0x0000' bus='0xe1' slot='0x00' function='0x1'/> </source> </interface>この例では、VF のパススルーを仮想マシンのネットワークインターフェイスとして設定します。MAC アドレスが一意であることを確認し、移行元ホスト上の VF の PCI アドレスを使用します。
移行元ホストで、VF の XML ファイルを仮想マシンに割り当てます。
# virsh attach-device <vm_name> mlx_vf.xml --live --configこの例の
mlx_vf.xmlは、VF 設定を含む XML ファイルの名前です。実行中の仮想マシンにデバイスを接続するために、--liveオプションを使用します。移行元ホストで、VF が割り当てられた実行中の仮想マシンのライブマイグレーションを開始します。
# virsh migrate --live --domain <vm_name> --desturi qemu+ssh://<destination_host_ip_address>/systemライブマイグレーションの実行の詳細は、コマンドラインを使用した仮想マシンの移行 を参照してください。
検証
移行した仮想マシンで、Mellanox VF のネットワークインターフェイス名を表示します。
# ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.1.10 netmask 255.255.255.0 broadcast 192.168.1.255 inet6 fe80::a00:27ff:fe4e:66a1 prefixlen 64 scopeid 0x20<link> ether 08:00:27:4e:66:a1 txqueuelen 1000 (Ethernet) RX packets 100000 bytes 6543210 (6.5 MB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 100000 bytes 6543210 (6.5 MB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 enp4s0f0v0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.3.10 netmask 255.255.255.0 broadcast 192.168.3.255 inet6 fe80::a00:27ff:fe4e:66c3 prefixlen 64 scopeid 0x20<link> ether 08:00:27:4e:66:c3 txqueuelen 1000 (Ethernet) RX packets 200000 bytes 12345678 (12.3 MB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 200000 bytes 12345678 (12.3 MB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0この例では、
enp4s0f0v0インターフェイスの存在により、mlx5_vfio_pciドライバーが移行中にデバイスの状態を正常に転送したことが確認できます。これにより、仮想マシンはハードウェアへの直接アクセスを確実に維持できます。移行した仮想マシンで、Mellanox VF が動作することを確認します。次に例を示します。
# ping -I <VF_interface_name> 8.8.8.8 PING 8.8.8.8 (8.8.8.8) from 192.168.3.10 <VF_interface_name>: 56(84) bytes of data. 64 bytes from 8.8.8.8: icmp_seq=1 ttl=57 time=27.4 ms 64 bytes from 8.8.8.8: icmp_seq=2 ttl=57 time=26.9 ms --- 8.8.8.8 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1002ms rtt min/avg/max/mdev = 26.944/27.046/27.148/0.102 msping が成功すれば、移行先ホスト上の Open vSwitch ブリッジが、仮想マシンハードウェアインターフェイスと物理ネットワークポート間でトラフィックを正しくオフロードおよびスイッチングしていることが確認できます。