11.6. 实时迁移附加了 Mellanox 虚拟功能的虚拟机


您可以使用支持的 Mellanox 网络设备附加的虚拟功能(VF)实时迁移虚拟机(VM)。

红帽通过附加的 Mellanox 网络设备实现虚拟机实时迁移的一般功能。但是,该功能取决于特定的 Mellanox 设备型号和固件版本。

目前,VF 迁移只支持 Mellanox CX-7 网络设备。

Mellanox CX-7 网络设备上的 VF 使用一个新的 mlx5_vfio_pci 驱动程序,它添加了实时迁移所需的功能,并且 libvirt 自动将新驱动程序绑定到 VF。

红帽仅在包括 mlx5_vfio_pci 驱动程序中直接支持 Mellanox VF 实时迁移。

限制:

当使用附加虚拟功能实时迁移虚拟机时,无法使用一些虚拟化功能:

  • 计算虚拟机的脏内存页生成率。

    目前,当迁移连接了 Mellanox VF 的虚拟机时,由 virsh domjobinfovirsh domdirtyrate-calc 命令提供的实时迁移数据和统计信息不准确,因为计算只统计客户机 RAM ,而不包括连接的 VF 的影响。

  • 使用复制后实时迁移。
  • 在虚拟机中使用虚拟 I/O 内存管理单元(vIOMMU)设备。

特定于 Mellanox CX-7 网络设备的其他限制:

  • 具有相同 Parameter-Set Identification (PSID)和相同的固件版本的 CX-7 设备必须在源和目标主机上同时使用。

    您可以使用以下命令检查设备的 PSID:

    # mstflint -d <device_pci_address> query | grep -i PSID
    
    PSID: MT_1090111019
    Copy to Clipboard
  • 在一个 CX-7 物理功能上,您可以同时使用最大 4 个 VF 来同时进行实时迁移。例如,您可以迁移一个具有 4 个附加的 VF 或 4 个虚拟机,并附加一个 VF 的虚拟机。

先决条件

  • 您有一个 Mellanox CX-7 网络设备,其固件版本等于或大于 28.36.1010

    有关支持的固件版本的详情,请参考 Mellanox 文档,并确保您使用固件的最新版本。

  • 主机使用 Intel 64、AMD64 或 ARM 64 CPU 架构。
  • 源主机上的 Mellanox 固件版本必须与目标主机上的相同。
  • mstflint 软件包已安装在源和目标主机上:

    # dnf install mstflint
    Copy to Clipboard
  • Mellanox CX-7 网络设备的 VF_MIGRATION_MODE 设置为 MIGRATION_ENABLED

    # mstconfig -d <device_pci_address> query | grep -i VF_migration
    
    VF_MIGRATION_MODE                           MIGRATION_ENABLED(2)
    Copy to Clipboard
    • 您可以使用以下命令将 VF_MIGRATION_MODE 设置为 MIGRATION_ENABLED

      # mstconfig -d <device_pci_address> set VF_MIGRATION_MODE=2
      Copy to Clipboard
  • openvswitch 软件包已安装在源和目标主机上:

    # dnf install openvswitch
    Copy to Clipboard
  • 所有常规 SR-IOV 设备的先决条件。

流程

  1. 在源主机上,将 Mellanox 网络设备设置为 switchdev 模式。

    # devlink dev eswitch set pci/<device_pci_address> mode switchdev
    Copy to Clipboard
  2. 在源主机上,在 Mellanox 设备上创建一个虚拟功能。

    # echo 1 > /sys/bus/pci/devices/0000\:e1\:00.0/sriov_numvfs
    Copy to Clipboard

    文件路径的 /0000\:e1\:00.0/ 部分基于设备的 PCI 地址。在示例中,其为:0000:e1:00.0

  3. 在源主机上,将 VF 与其驱动程序解绑。

    # virsh nodedev-detach <vf_pci_address> --driver pci-stub
    Copy to Clipboard

    您可以使用以下命令查看 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
    Copy to Clipboard
  4. 在源主机上,启用 VF 的迁移功能。

    # devlink port function set pci/0000:e1:00.0/1 migratable enable
    Copy to Clipboard

    在本例中,pci/0000:e1:00.0/1 指向带有给定 PCI 地址的 Mellanox 设备上的第一个 VF。

  5. 在源主机上,为 VF 的迁移配置 Open vSwitch (OVS)。如果 Mellanox 设备处于 switchdev 模式,则无法通过网络传输数据。

    1. 确保 openvswitch 服务正在运行。

      # systemctl start openvswitch
      Copy to Clipboard
    2. 启用硬件卸载,以提高网络性能。

      # ovs-vsctl set Open_vSwitch . other_config:hw-offload=true
      Copy to Clipboard
    3. 增加最大闲置时间,以确保网络连接在迁移过程中保持打开状态。

      # ovs-vsctl set Open_vSwitch . other_config:max-idle=300000
      Copy to Clipboard
    4. 在 OVS 实例中创建一个新网桥。

      # ovs-vsctl add-br <bridge_name>
      Copy to Clipboard
    5. 重新启动 openvswitch 服务。

      # systemctl restart openvswitch
      Copy to Clipboard
    6. 将物理 Mellanox 设备添加到 OVS 网桥。

      # ovs-vsctl add-port <bridge_name> enp225s0np0
      Copy to Clipboard

      在本例中,enp225s0np0 是 Mellanox 设备的网络接口名称。

    7. 将 Mellanox 设备的 VF 添加到 OVS 网桥。

      # ovs-vsctl add-port <bridge_name> enp225s0npf0vf0
      Copy to Clipboard

      在本例中,enp225s0npf0vf0 是 VF 的网络接口名称。

  6. 目标主机上 重复步骤 1-5。
  7. 在源主机上,打开一个新文件,如 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>
    Copy to Clipboard

    这个示例将 VF 的 pass-through 配置为虚拟机的网络接口。确保 MAC 地址是唯一的,并在源主机上使用 VF 的 PCI 地址。

  8. 在源主机上,将 VF XML 文件附加到虚拟机。

    # virsh attach-device <vm_name> mlx_vf.xml --live --config
    Copy to Clipboard

    在本例中,mlx_vf.xml 是带有 VF 配置的 XML 文件的名称。使用 --live 选项将设备附加到正在运行的虚拟机上。

  9. 在源主机上,启动正在运行的带有附加 VF 的虚拟机的实时迁移。

    # virsh migrate --live --domain <vm_name> --desturi qemu+ssh://<destination_host_ip_address>/system
    Copy to Clipboard

    有关执行实时迁移的详情,请参阅 使用命令行迁移虚拟机

验证

  1. 在迁移的虚拟机中,查看 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
    Copy to Clipboard
  2. 在迁移的虚拟机中,检查 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
    Copy to Clipboard
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat