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 が接続された仮想マシンを移行する場合、
virsh domjobinfoおよびvirsh domdirtyrate-calcコマンドによって提供されるライブマイグレーションデータと統計情報は正確ではありません。計算では、接続された VF の影響を含めずにゲスト RAM のみがカウントされるためです。- コピー後のライブマイグレーションの使用
- 仮想マシンでの仮想 I/O Memory Management Unit (vIOMMU) デバイスの使用
この機能は RHEL 9 に テクノロジープレビュー のみの機能として組み込まれているため、サポート対象外です。
前提条件
ファームウェアバージョンが 28.36.1010 以上の Mellanox CX-7 ネットワークデバイスを使用している。
ファームウェアバージョンの詳細は、Mellanox のドキュメント を参照してください。
mstflintパッケージが、ソースホストと宛先ホストの両方にインストールされている。dnf install mstflint
# dnf install mstflintCopy to Clipboard Copied! Toggle word wrap Toggle overflow Mellanox CX-7 ネットワークデバイスで、
VF_MIGRATION_MODEがMIGRATION_ENABLEDに設定されている。mstconfig -d <device_pci_address> query | grep -i VF_migration
# mstconfig -d <device_pci_address> query | grep -i VF_migration VF_MIGRATION_MODE MIGRATION_ENABLED(2)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを使用して、
VF_MIGRATION_MODEをMIGRATION_ENABLEDに設定できます。mstconfig -d <device_pci_address> set VF_MIGRATION_MODE=2
# mstconfig -d <device_pci_address> set VF_MIGRATION_MODE=2Copy to Clipboard Copied! Toggle word wrap Toggle overflow
openvswitchパッケージが、ソースホストと宛先ホストの両方にインストールされている。dnf install openvswitch
# dnf install openvswitchCopy to Clipboard Copied! Toggle word wrap Toggle overflow - すべての一般的な SR-IOV デバイスの前提条件。詳細は、SR-IOV ネットワークデバイスの仮想マシンへの接続 を参照してください。
- すべての一般的な仮想マシン移行の前提条件。詳細は、コマンドラインを使用した仮想マシンの移行 を参照してください。
手順
ソースホストで、Mellanox ネットワークデバイスを
switchdevモードに設定します。devlink dev eswitch set pci/<device_pci_address> mode switchdev
# devlink dev eswitch set pci/<device_pci_address> mode switchdevCopy to Clipboard Copied! Toggle word wrap Toggle overflow ソースホストで、Mellanox デバイス上に Virtual Function を作成します。
echo 1 > /sys/bus/pci/devices/0000\:e1\:00.0/sriov_numvfs
# echo 1 > /sys/bus/pci/devices/0000\:e1\:00.0/sriov_numvfsCopy to Clipboard Copied! Toggle word wrap Toggle overflow ファイルパスの
/0000\:e1\:00.0/の部分は、デバイスの PCI アドレスに基づいています。この例では、0000:e1:00.0です。ソースホストで、VF をそのドライバーからアンバインドします。
virsh nodedev-detach <vf_pci_address> --driver pci-stub
# virsh nodedev-detach <vf_pci_address> --driver pci-stubCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを使用して、VF の PCI アドレスを表示できます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ソースホストで、VF の移行機能を有効にします。
devlink port function set pci/0000:e1:00.0/1 migratable enable
# devlink port function set pci/0000:e1:00.0/1 migratable enableCopy to Clipboard Copied! Toggle word wrap Toggle overflow この例の
pci/0000:e1:00.0/1は、指定の PCI アドレスを持つ Mellanox デバイス上の最初の VF を示しています。ソースホストで、VF の移行用に Open vSwitch (OVS) を設定します。Mellanox デバイスが
switchdevモードの場合、ネットワーク経由でデータを転送できません。openvswitchサービスが実行中であることを確認します。systemctl start openvswitch
# systemctl start openvswitchCopy to Clipboard Copied! Toggle word wrap Toggle overflow ネットワークのパフォーマンスを向上させるために、ハードウェアオフロードを有効にします。
ovs-vsctl set Open_vSwitch . other_config:hw-offload=true
# ovs-vsctl set Open_vSwitch . other_config:hw-offload=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 移行中にネットワーク接続が開いたままになるように、最大アイドル時間を増やします。
ovs-vsctl set Open_vSwitch . other_config:max-idle=300000
# ovs-vsctl set Open_vSwitch . other_config:max-idle=300000Copy to Clipboard Copied! Toggle word wrap Toggle overflow OVS インスタンスに新しいブリッジを作成します。
ovs-vsctl add-br <bridge_name>
# ovs-vsctl add-br <bridge_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow openvswitchサービスを再起動します。systemctl restart openvswitch
# systemctl restart openvswitchCopy to Clipboard Copied! Toggle word wrap Toggle overflow 物理的な Mellanox デバイスを OVS ブリッジに追加します。
ovs-vsctl add-port <bridge_name> enp225s0np0
# ovs-vsctl add-port <bridge_name> enp225s0np0Copy to Clipboard Copied! Toggle word wrap Toggle overflow この例では、
<bridge_name>はステップ d で作成したブリッジの名前であり、enp225s0np0は Mellanox デバイスのネットワークインターフェイス名です。Mellanox デバイスの VF を OVS ブリッジに追加します。
ovs-vsctl add-port <bridge_name> enp225s0npf0vf0
# ovs-vsctl add-port <bridge_name> enp225s0npf0vf0Copy to Clipboard Copied! Toggle word wrap Toggle overflow この例では、
<bridge_name>はステップ d で作成したブリッジの名前であり、enp225s0npf0vf0は VF のネットワークインターフェイス名です。
- 宛先ホスト でステップ 1 - 5 を繰り返します。
ソースホストで、
mlx_vf.xmlなどの新しいファイルを開き、次のような VF の XML 設定を追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow この例では、VF のパススルーを仮想マシンのネットワークインターフェイスとして設定します。MAC アドレスが一意であることを確認し、ソースホスト上の VF の PCI アドレスを使用します。
ソースホストで、VF の XML ファイルを仮想マシンに割り当てます。
virsh attach-device <vm_name> mlx_vf.xml --live --config
# virsh attach-device <vm_name> mlx_vf.xml --live --configCopy to Clipboard Copied! Toggle word wrap Toggle overflow この例の
mlx_vf.xmlは、VF 設定を含む XML ファイルの名前です。実行中の仮想マシンにデバイスを割り当てるために、--liveオプションを使用します。ソースホストで、VF が割り当てられた実行中の仮想マシンのライブマイグレーションを開始します。
virsh migrate --live --domain <vm_name> --desturi qemu+ssh://<destination_host_ip_address>/system
# virsh migrate --live --domain <vm_name> --desturi qemu+ssh://<destination_host_ip_address>/systemCopy to Clipboard Copied! Toggle word wrap Toggle overflow ライブマイグレーションの実行の詳細は、コマンドラインを使用した仮想マシンの移行 を参照してください。
検証
移行された仮想マシンで、Mellanox VF のネットワークインターフェイス名を表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 移行した仮想マシンで、Mellanox VF が動作することを確認します。次に例を示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow