PVE SR-IOV 与万兆网卡配置

PVE SR-IOV 与万兆网卡配置 本文要点:本文详细介绍如何在 PVE 中配置 Mellanox ConnectX-3 (544+FLR) 和 Intel X520 万兆网卡的 SR-IOV 功能,实现网卡硬件级虚拟化,提升虚拟机网络性能。 SR-IOV 技术简介 SR-IOV (Single

PVE SR-IOV 与万兆网卡配置

本文要点:本文详细介绍如何在 PVE 中配置 Mellanox ConnectX-3 (544+FLR) 和 Intel X520 万兆网卡的 SR-IOV 功能,实现网卡硬件级虚拟化,提升虚拟机网络性能。

SR-IOV 技术简介

SR-IOV (Single Root I/O Virtualization) 是一种硬件虚拟化技术,允许物理网卡虚拟出多个虚拟网卡 (VF),每个 VF 可以直接分配给虚拟机使用,绕过虚拟化层的网络栈,大幅提升网络性能并降低 CPU 开销。

544+FLR 40G/56G 万兆光口网卡配置

开启 SR-IOV

Mellanox ConnectX-3 系列网卡支持 SR-IOV,以下是配置步骤:

# 安装管理工具
apt update && apt install mstflint

# 配置内核模块参数
# port_type_array=2,2 表示两个端口都使用以太网模式
# num_vfs=8 表示每个物理端口虚拟出 8 个 VF
# probe_vf=8 表示启用 8 个 VF
echo 'options mlx4_core port_type_array=2,2 num_vfs=8 probe_vf=8' > /etc/modprobe.d/mlx4_core.conf

# 更新 initramfs 使配置生效
update-initramfs -u

VF 网卡初始化脚本

创建脚本自动配置 VF 网卡的 MAC 地址:

cat > set-sriov.sh <<'EOF'
#!/bin/bash

# 设置第一个物理端口的 VF MAC 地址
echo "[I] Configuring port 1 VF MAC addresses..."
/usr/sbin/ip link set dev ens4 vf 0 mac ae:21:1a:41:c0:00 spoofchk on
/usr/sbin/ip link set dev ens4 vf 1 mac ae:21:1a:41:c0:01 spoofchk on
/usr/sbin/ip link set dev ens4 vf 2 mac ae:21:1a:41:c0:02 spoofchk on
/usr/sbin/ip link set dev ens4 vf 3 mac ae:21:1a:41:c0:03 spoofchk on
/usr/sbin/ip link set dev ens4 vf 4 mac ae:21:1a:41:c0:04 spoofchk on
/usr/sbin/ip link set dev ens4 vf 5 mac ae:21:1a:41:c0:05 spoofchk on
/usr/sbin/ip link set dev ens4 vf 6 mac ae:21:1a:41:c0:06 spoofchk on
/usr/sbin/ip link set dev ens4 vf 7 mac ae:21:1a:41:c0:07 spoofchk on

# 启用第一个物理端口
/usr/sbin/ip link set ens4 up

# 设置第二个物理端口的 VF MAC 地址
echo "[I] Configuring port 2 VF MAC addresses..."
/usr/sbin/ip link set dev ens4d1 vf 0 mac ae:21:1a:41:c1:00 spoofchk on

# 启用第二个物理端口
/usr/sbin/ip link set ens4d1 up

echo "[I] SR-IOV configuration completed."
EOF

chmod +x set-sriov.sh

使用注意事项

  1. 直通限制:544+FLR 网卡的两个端口必须一起直通,不能单独直通其中一个端口
  2. Windows 支持:SR-IOV VF 直通到 Windows 虚拟机需要编译定制内核
  3. 硬件要求:需要 QSFP+ 接口的交换机,或两台服务器直连使用

Intel X520 10G 万兆双光口网卡配置

开启 SR-IOV

Intel X520 网卡同样支持 SR-IOV,配置流程如下:

cat > net-sriov.sh <<'EOF'
#!/bin/bash

# 配置参数
SRIOV_NUM=63                    # VF 数量(X520 最大支持 63 个)
DEVICE='ens4f0'                 # 物理网卡名称
MAC_PREFIX='ae:31:11:d1:ee'     # MAC 地址前缀

start() {
    echo "[I] Enabling SR-IOV for $DEVICE..."
    
    # 启用 SR-IOV,创建虚拟网卡
    echo $SRIOV_NUM > /sys/class/net/${DEVICE}/device/sriov_numvfs
    echo "[P] Set SR-IOV num: $SRIOV_NUM"
    
    # 启用物理网卡
    echo "[I] Bringing up device: ${DEVICE}"
    ip link set dev ${DEVICE} up
    
    # 为每个 VF 设置 MAC 地址
    for ((i=0; i<$SRIOV_NUM; i++)); do
        MAC_SUFFIX=$(printf "%02x" $i)
        echo "[I] Setting VF $i MAC: ${MAC_PREFIX}:${MAC_SUFFIX}"
        ip link set dev ${DEVICE} vf ${i} mac ${MAC_PREFIX}:${MAC_SUFFIX}
    done
    
    echo "[I] Restarting networking service..."
    systemctl restart networking
    echo "[I] SR-IOV configuration completed."
}

stop() {
    ovs_ctl stop
}

case $1 in
    start)
        start
        ;;
    stop)
        stop
        ;;
    *)
        echo "Usage: $0 {start|stop}"
        exit 1
        ;;
esac
EOF

chmod +x net-sriov.sh

创建 Systemd 服务

设置开机自动启用 SR-IOV:

cat > /etc/systemd/system/net-sriov.service <<'EOF'
[Unit]
Description=Net SR-IOV Service
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/net-sriov.sh start
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
EOF

# 安装脚本并启用服务
cp net-sriov.sh /usr/local/bin/
chmod +x /usr/local/bin/net-sriov.sh
systemctl daemon-reload
systemctl enable net-sriov.service
systemctl start net-sriov.service

驱动安装

Windows 虚拟机使用 X520 VF 需要安装 Intel 官方驱动:

  1. 下载 Intel X520 网卡驱动(Intel Ethernet Server Adapter X520-DA2)
  2. 在 Windows 设备管理器中更新驱动
  3. 重启虚拟机后 VF 网卡即可正常使用

SR-IOV 在虚拟机中的应用

为虚拟机添加 VF 网卡

在 PVE 的虚拟机配置中,可以直接添加 VF 网卡:

# 查看可用的 VF 网卡
ip link show

# 典型输出中会显示类似 ens4f0v0, ens4f0v1 等 VF 接口

在 PVE Web 界面中:

  1. 选择目标虚拟机
  2. 进入 "硬件" 选项卡
  3. 点击 "添加" -> "网络设备"
  4. 选择对应的 VF 网桥或直接直通 VF

总结

SR-IOV 技术可以显著提升虚拟化环境的网络性能:

  1. 性能提升:硬件级虚拟化绕过软件交换层,降低延迟和 CPU 占用
  2. 灵活配置:支持为每个虚拟机分配独立的虚拟网卡
  3. 注意事项
    • 需要主板和 CPU 支持 VT-d 技术
    • 需要在 BIOS 中启用 SR-IOV 功能
    • Windows 虚拟机可能需要额外的驱动支持

通过 SR-IOV,可以在 PVE 环境中实现接近物理网卡性能的虚拟网络,特别适合高性能计算、存储网络等场景。


参考链接

Comment