PVE开启网卡SR-IOV记录

发布于 2024年04月14日

首先查询网卡是否支持SR IOV,可以查看这边文章PVE查询网卡是否支持SR-IOV

一、打开IOMMU

打开 /etc/default/grub 文件,在GRUB_CMDLINE_LINUX_DEFAULT行添加以下内容

pci=assign-busses是因为部署SR IOV的时候报错”Cannot allocate memory

GRUB_CMDLINE_LINUX_DEFAULT=" intel_iommu=on pci=assign-busses pcie_acs_override=downstream"

更新grub

update-grub

在/etc/modules文件里添加如下内容

vfio

vfio_iommu_type1

vfio_pci

vfio_virqfd

更新

update-initramfs -u -k all

重启

reboot

检查IOMMO功能是否开启

dmesg | grep -e DMAR -e IOMMU -e AMD-Vi

如果没有出现,那么在/etc/modprobe.d/的任意一个.conf文件中增加这些内容(不安全中断)

options vfio_iommu_type1 allow_unsafe_interrupts=1

二、测试SR-IOV网卡生成

可以先进行测试

譬如在 enp2s0f0 网卡上开4个VF

echo 4 > /sys/class/net/enp2s0f0/device/sriov_numvfs

成功不会有任何反馈,回到PVE节点网络查看网络列表是否有VF网卡出现,也可以使用

lspci

查看pci设备中是否有vf网卡

三、注册系统服务

首先创建启动脚本

cd /etc/systemd/system

vi sriov.service

示例是在i350-T4(系统名称enp2s0)的0号和1号口上分别开5个vf网卡、固化MAC地址防止重启MAC随机变动并且设置所有PF和VF为UP状态

[Unit]

Description=Script to enable SR-IOV on boot

 

[Service]

Type=simple

#start SR-IOV

ExecStartPre=/usr/bin/bash -c '/usr/bin/echo 5 > /sys/class/net/enp2s0f0/device/sriov_numvfs'

ExecStartPre=/usr/bin/bash -c '/usr/bin/echo 5 > /sys/class/net/enp2s0f1/device/sriov_numvfs'

#set VF MAC

ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set dev enp2s0f0 vf 0 mac 00:54:00:00:00:00'

ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set dev enp2s0f0 vf 1 mac 00:54:00:00:00:01'

ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set dev enp2s0f0 vf 2 mac 00:54:00:00:00:02'

ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set dev enp2s0f0 vf 3 mac 00:54:00:00:00:03'

ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set dev enp2s0f0 vf 4 mac 00:54:00:00:00:04'

ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set dev enp2s0f1 vf 0 mac 00:54:00:00:01:00'

ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set dev enp2s0f1 vf 1 mac 00:54:00:00:01:01'

ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set dev enp2s0f1 vf 2 mac 00:54:00:00:01:02'

ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set dev enp2s0f1 vf 3 mac 00:54:00:00:01:03'

ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set dev enp2s0f1 vf 4 mac 00:54:00:00:01:04'

#set PF up

ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set enp2s0f0 up'

ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set enp2s0f1 up'

#set VF up

ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set enp2s0f0v0 up'

ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set enp2s0f0v1 up'

ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set enp2s0f0v2 up'

ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set enp2s0f0v3 up'

ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set enp2s0f0v4 up'

ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set enp2s0f1v0 up'

ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set enp2s0f1v1 up'

ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set enp2s0f1v2 up'

ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set enp2s0f1v3 up'

ExecStart=/usr/bin/bash -c '/usr/bin/ip link set enp2s0f1v4 up'

Restart=on-failure

 

[Install]

WantedBy=multi-user.target

注册开机启动服务

systemctl daemon-reload
systemctl enable sriov.service

重启

reboot

四、备注地址线

使用命令

dmesg | grep enp*s*f*

查看对应PF和VF地址线,做好PVE界面里面的备注,这样就不容易搞混



评论