nmcli 本身不支持配置 SR-IOV 的虚拟功能(VF),VF 的启用和管理必须通过 sysfs 接口或内核模块参数完成,因其属于底层 PCI 设备与驱动交互范畴;nmcli 仅用于运行时网络层配置,无法触达硬件虚拟化开关。

nmcli 本身不支持配置 SR-IOV 的虚拟功能(VF)。VF 的启用和管理属于底层 PCI 设备与内核驱动的交互范畴,必须通过 sysfs 接口或模块参数完成,nmcli 仅用于管理网络连接、IP 地址、路由等运行时网络层配置,无法触达硬件虚拟化功能开关。
确认网卡是否支持 SR-IOV
先验证物理网卡(PF)是否具备 SR-IOV 能力:
- 查设备型号和总 VF 数量:
lspci | grep -i ethernet
找到目标网卡(如04:00.0),再执行:lspci -v -s 04:00.0 | grep -A 10 "SR-IOV"—— 若输出含 Single Root I/O Virtualization (SR-IOV),说明支持 - 检查最大可分配 VF 数:
cat /sys/bus/pci/devices/0000:04:00.0/sriov_totalvfs
返回大于 0 的整数(如 63),即表示该 PF 支持最多生成对应数量的 VF
启用 VF:必须用 sysfs 或 modprobe
假设物理接口名为 enp4s0f0,需向其驱动暴露的 sysfs 节点写入 VF 数量:
- 查看当前 VF 数:
cat /sys/class/net/enp4s0f0/device/sriov_numvfs - 启用 4 个 VF:
echo 4 | sudo tee /sys/class/net/enp4s0f0/device/sriov_numvfs - 确认生效:
ip link show enp4s0f0—— 输出中应出现vf 0、vf 1等条目 - 注意:若驱动未加载或未识别 PF,该路径可能不存在;部分网卡(如 mlx5)需先加载驱动并指定
max_vfs参数:modprobe mlx5_core max_vfs=8
VF 绑定与直通准备
VF 生成后默认由原驱动(如 mlx5_core 或 i40e)管理。要直通给虚拟机,需将其解绑并交由 vfio-pci 驱动接管:
- 查 VF 的 PCI 地址:
lspci | grep -i "virtual function"或find /sys/bus/pci/devices/ -name *vf* | grep enp4s0f0 - 绑定到 vfio-pci(以
0000:04:10.0为例):echo "0000:04:10.0" | sudo tee /sys/bus/pci/devices/0000:04:10.0/driver/unbindecho "0000:04:10.0" | sudo tee /sys/bus/pci/drivers/vfio-pci/new_id - 验证绑定结果:
readlink /sys/bus/pci/devices/0000:04:10.0/driver应指向vfio-pci
后续操作:VF 不归 nmcli 管理
VF 在宿主机上表现为独立的 PCI 设备,但不是常规网络接口(没有 IP、不参与路由),nmcli 对其无效。它的用途是:
- 通过 libvirt 的
<hostdev>或<interface type='hostdev'>直通给 KVM 虚拟机 - 在虚拟机内部,VF 表现为一张物理网卡(如
ens1f0),此时才可在虚拟机中用 nmcli 配置其 IP、路由等 - 宿主机上可选配 VF 的 MAC 地址(非 nmcli):
ip link set enp4s0f0 vf 0 mac 00:11:22:33:44:55


















