12.6. Mellanox Virtual Function が割り当てられた仮想マシンのライブマイグレーション
サポートされている Mellanox ネットワークデバイスのアタッチされた仮想機能(VF)を使用して、仮想マシン(VM)のライブマイグレーションを行うことができます。
Red Hat は、Mellanox ネットワークデバイスの VF に接続された VM ライブマイグレーションの一般的な機能を実装します。ただし、この機能は特定の Mellanox デバイスモデルおよびファームウェアのバージョンによって異なります。
現在、VF 移行は Mellanox CX-7 ネットワークデバイスでのみサポートされています。
Mellanox CX-7 ネットワークデバイス上の VF は、ライブマイグレーションに必要な機能を追加する新しい mlx5_vfio_pci ドライバーを使用します。この新しいドライバーは、libvirt によって VF に自動的にバインドされます。
Red Hat は、mlx5_vfio_pci ドライバーが含まれる場合に限り、Mellanox VF ライブマイグレーションを直接サポートします。
制限
仮想機能がアタッチされている VM のライブマイグレーションを行う場合、一部の仮想化機能は使用できません。
仮想マシンのダーティーメモリーページレート生成の計算
現在、Mellanox VF が接続された仮想マシンを移行する場合、
virsh domjobinfoおよびvirsh domdirtyrate-calcコマンドによって提供されるライブマイグレーションデータと統計情報は正確ではありません。計算では、接続された VF の影響を含めずにゲスト RAM のみがカウントされるためです。- コピー後のライブマイグレーションの使用
- 仮想マシンでの仮想 I/O Memory Management Unit (vIOMMU) デバイスの使用
Mellanox CX-7 ネットワークデバイスに固有のその他の制限:
同じ Parameter-Set Identification (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- すべての一般的な 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 をそのドライバーからアンバインドします。
# 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=300000OVS インスタンスに新しいブリッジを作成します。
# ovs-vsctl add-br <bridge_name>openvswitchサービスを再起動します。# systemctl restart openvswitch物理的な Mellanox デバイスを OVS ブリッジに追加します。
# ovs-vsctl add-port <bridge_name> enp225s0np0この例では
、<bridge_name> は前のステップで作成したブリッジの名前、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