Loading... [ ](https://www.bilibili.com/video/BV1r34y1k7Hi/) # 介绍 目前版本默认没有开启iommu分组,体现在一张多网口网卡不能只直通一个网口 SR-IOV 技术是一种基于硬件的虚拟化解决方案,可提高性能和可伸缩性。SR-IOV 标准允许在虚拟机之间高效共享 PCIe(Peripheral Component Interconnect Express,快速外设组件互连)设备,并且它是在硬件中实现的,可以获得能够与本机性能媲美的 I/O 性能 下面就教大家如何开启iommu分组和开启网卡的SR-IOV # iommu开启 用ssh工具链接NAS ``` nano /usr/share/grub/default/grub ```  在`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 ```  这里可以看到我的网卡和地址,下面查询万兆网卡(03:00.0 )是否支持SR-IOV ``` lspci -s 03:00.0 -vvv | grep Capabilities ```  可以看到最后面写了SR-IOV,那就是支持,没有写就是不支持 ## 查询网卡最大虚拟设备数 ``` cat /sys/bus/pci/devices/0000:设备ID/sriov_totalvfs ```  如图我的这个网卡支持最大虚拟设备数为63 ## 测试SR-IOV网卡生成 测试虚拟4个网口 ``` echo 4 > /sys/class/net/enp3s0f1/device/sriov_numvfs ```  enp3s0f1是系统里的网卡名,执行`ip addr`查看或者在webUI-网络查看 然后执行 ``` lspci ``` 查看是否成功  如图成功了 ## 注册系统服务,固定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 内核引导选项简介](http://www.jinbuguo.com/kernel/boot_parameters.html) [虚拟化笔记](https://cloud.tencent.com/developer/column/91061) 最后修改:2022 年 06 月 02 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 4 如果觉得我的文章对你有用,请随意赞赏