介绍

目前版本默认没有开启iommu分组,体现在一张多网口网卡不能只直通一个网口

SR-IOV 技术是一种基于硬件的虚拟化解决方案,可提高性能和可伸缩性。SR-IOV 标准允许在虚拟机之间高效共享 PCIe(Peripheral Component Interconnect Express,快速外设组件互连)设备,并且它是在硬件中实现的,可以获得能够与本机性能媲美的 I/O 性能

下面就教大家如何开启iommu分组和开启网卡的SR-IOV

iommu开启

用ssh工具链接NAS

nano /usr/share/grub/default/grub

image.png

GRUB_CMDLINE_LINUX_DEFAULT="quiet"内加入
intel_iommu=on
iommu=pt
pcie_acs_override=downstream

按Ctrl +X 退出,Y 保存

最终为

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt pcie_acs_override=downstream"

如果是AMD的CPU,那就是

GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt pcie_acs_override=downstream"

然后更新一下

update-grub

重启生效,系统更新后失效(除非官方加入参数)

如果未生效

添加允许不安全的中断的配置

echo "options vfio_iommu_type1 allow_unsafe_interrupts=1" > /etc/modprobe.d/iommu_unsafe_interrupts.conf

刷新内核

update-initramfs -u

重启一下验证

开启网卡SR-IOV

查询网卡是否支持SR-IOV

lspci -nn | grep Eth

image.png

这里可以看到我的网卡和地址,下面查询万兆网卡(03:00.0 )是否支持SR-IOV

lspci -s 03:00.0 -vvv | grep Capabilities

image.png

可以看到最后面写了SR-IOV,那就是支持,没有写就是不支持

查询网卡最大虚拟设备数

cat /sys/bus/pci/devices/0000:设备ID/sriov_totalvfs

image.png

如图我的这个网卡支持最大虚拟设备数为63

测试SR-IOV网卡生成

测试虚拟4个网口

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

image.png

enp3s0f1是系统里的网卡名,执行ip addr查看或者在webUI-网络查看

然后执行

lspci

查看是否成功
image.png
如图成功了

注册系统服务,固定SR-IOV

首先创建启动脚本

cd /etc/systemd/system
vi sriov.service

也可以用finalshell编辑

[Unit]
Description=Script to enable SR-IOV on boot
 
[Service]
Type=simple
#start SR-IOV
ExecStartPre=/usr/bin/bash -c '/usr/bin/echo 4 > /sys/class/net/enp3s0f1/device/sriov_numvfs'
#set VF MAC
ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set dev enp3s0f1 vf 0 mac 86:24:72:8c:91:00'
ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set dev enp3s0f1 vf 1 mac 86:24:72:8c:91:01'
ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set dev enp3s0f1 vf 2 mac 86:24:72:8c:91:02'
ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set dev enp3s0f1 vf 3 mac 86:24:72:8c:91:03'
#set PF up
ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set enp3s0f1 up'
#set VF up
ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set enp3s0f1v0 up'
ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set enp3s0f1v1 up'
ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set enp3s0f1v2 up'
ExecStart=/usr/bin/bash -c '/usr/bin/ip link set enp3s0f1v3 up'
Restart=on-failure
 
[Install]
WantedBy=multi-user.target

注册开机启动服务

systemctl daemon-reload
systemctl enable sriov.service

重启

reboot

扩展阅读

Linux 内核引导选项简介

虚拟化笔记

最后修改:2022 年 06 月 02 日
感谢您的支持