12.6. Mellanox Virtual Function が割り当てられた仮想マシンのライブマイグレーション
テクノロジープレビューとして、Mellanox ネットワークデバイスの Virtual Function (VF) が割り当てられた仮想マシン (VM) のライブマイグレーションを利用できます。現在、これは Mellanox CX-7 ネットワークデバイスを使用している場合にのみ可能です。Mellanox CX-7 ネットワークデバイス上の VF は、ライブマイグレーションに必要な機能を追加する新しい mlx5_vfio_pci
ドライバーを使用します。この新しいドライバーは、libvirt
によって VF に自動的にバインドされます。
制限
現在、Mellanox Virtual Function が割り当てられた仮想マシンをライブマイグレーションする場合、以下の仮想化機能を使用できません。
仮想マシンのダーティーメモリーページレート生成の計算
現在、Mellanox VF がアタッチされている仮想マシンを移行する場合、計算は、割り当てられた VF の影響を含めずに、ゲスト RAM のみを表示するため、
virsh domjobinfo
およびvirsh domdirtyrate-calc
コマンドによって提供されるライブマイグレーションデータと統計は不正確です。- コピー後のライブマイグレーションの使用
- 仮想マシンでの仮想 I/O Memory Management Unit (vIOMMU) デバイスの使用
この機能は RHEL 9 に テクノロジープレビュー のみの機能として組み込まれているため、サポート対象外です。
前提条件
ファームウェアバージョンが 28.36.1010 以上の Mellanox CX-7 ネットワークデバイスを使用している。
ファームウェアバージョンの詳細は、Mellanox のドキュメント を参照してください。
mstflint
パッケージが、ソースホストと宛先ホストの両方にインストールされている。# dnf install mstflint
Mellanox 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
- すべての一般的な SR-IOV デバイスの前提条件詳細は、Attaching SR-IOV networking devices to virtual machinesを参照してください。
- 仮想マシンの一般的な移行の前提条件 すべて。詳細は コマンドラインインターフェイスを使用した仮想マシンの移行 を参照してください。
手順
ソースホストで、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 をそのドライバーからアンバインドします。
# virsh nodedev-detach <vf_pci_address> --driver pci-stub
次のコマンドを使用して、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 の移行機能を有効にします。
# 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=300000
OVS インスタンスに新しいブリッジを作成します。
# ovs-vsctl add-br <bridge_name>
openvswitch
サービスを再起動します。# systemctl restart openvswitch
物理的な Mellanox デバイスを OVS ブリッジに追加します。
# ovs-vsctl add-port <bridge_name> enp225s0np0
この例では、
<bridge_name>
はステップ d で作成したブリッジの名前であり、enp225s0np0
は Mellanox デバイスのネットワークインターフェイス名です。Mellanox デバイスの VF を OVS ブリッジに追加します。
# ovs-vsctl add-port <bridge_name> enp225s0npf0vf0
この例では、
<bridge_name>
はステップ d で作成したブリッジの名前であり、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
移行した仮想マシンで、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 ms