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
使用注意事项
- 直通限制:544+FLR 网卡的两个端口必须一起直通,不能单独直通其中一个端口
- Windows 支持:SR-IOV VF 直通到 Windows 虚拟机需要编译定制内核
- 硬件要求:需要 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 官方驱动:
- 下载 Intel X520 网卡驱动(Intel Ethernet Server Adapter X520-DA2)
- 在 Windows 设备管理器中更新驱动
- 重启虚拟机后 VF 网卡即可正常使用
SR-IOV 在虚拟机中的应用
为虚拟机添加 VF 网卡
在 PVE 的虚拟机配置中,可以直接添加 VF 网卡:
# 查看可用的 VF 网卡
ip link show
# 典型输出中会显示类似 ens4f0v0, ens4f0v1 等 VF 接口
在 PVE Web 界面中:
- 选择目标虚拟机
- 进入 "硬件" 选项卡
- 点击 "添加" -> "网络设备"
- 选择对应的 VF 网桥或直接直通 VF
总结
SR-IOV 技术可以显著提升虚拟化环境的网络性能:
- 性能提升:硬件级虚拟化绕过软件交换层,降低延迟和 CPU 占用
- 灵活配置:支持为每个虚拟机分配独立的虚拟网卡
- 注意事项:
- 需要主板和 CPU 支持 VT-d 技术
- 需要在 BIOS 中启用 SR-IOV 功能
- Windows 虚拟机可能需要额外的驱动支持
通过 SR-IOV,可以在 PVE 环境中实现接近物理网卡性能的虚拟网络,特别适合高性能计算、存储网络等场景。
参考链接: