侧边栏壁纸
  • 累计撰写 21 篇文章
  • 累计创建 1 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

PVE 开启网卡 SR-IOV

一、SR-IOV介绍

SR-IOV(Single Root I/O Virtualization)技术可以实现单个物理网卡能够提供多个网卡的接口和功能,从而让每个虚拟机都能直接和物理网卡通信,获得接近物理网卡的网络性能。启用SR-IOV降低了IO延迟和对CPU的占用,让每一个虚拟机都可以获得接近原生的IO性能,尤其是虚拟机数量增多网络负载较大的时候会很明显。虽然SR-IOV和直通差不多,但是直通一个硬件只能分配给一个虚拟机。而SR-IOV可以将物理网卡拆分出多个VF,分配给多个虚拟机。


二、开启IOMMU

#编辑/etc/default/grub  
nano /etc/default/grub

在 GRUB_CMDLINE_LINUX_DEFAULT 这一行后面根据所使用的平台加上相应命令

Intel平台:

intel_iommu=on iommu=pt

AMD平台:

amd_iommu=on iommu=pt

修改完 ctrl + x 保存 紧接着更新grub

update-grub

添加如下vfio modules 到 /etc/modules

nano /etc/modules
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

更新模块并重启

update-initramfs -u -k all
reboot

三、启用网卡SR-IOV

先看下网卡是否支持SR-IOV

lspci | grep -i eth

#查看网卡Businfo信息
lspci -s 02:00.0 -v

这里可以看出我的网卡是支持SR-IOV的, 也可以输入命令测试能否正常开启

#临时创建两个VF, 我的网卡名是 enp2s0f0
echo 2 > /sys/class/net/enp2s0f0/device/sriov_numvfs 
#列出网卡,看看有没有多出的 “ Virtual Function ” 的网卡
lspci | grep Eth 

确认网卡可以正常启用SR-IOV后,就编辑一个服务在开机帮我们创建VF。在/etc/systemd/system 新建一个名为sriov-net.service的文件

nano /etc/systemd/system/sriov-net.service
[Unit]
Description=Script to enable SR-IOV on boot

[Service]
Type=oneshot

# Starting SR-IOV-1
ExecStart=/usr/bin/bash -c '/usr/bin/echo 10 > /sys/class/net/enp2s0f0/device/sriov_numvfs'
#Setting static MAC for VFs-1
ExecStart=/usr/bin/bash -c '/usr/bin/ip link set enp2s0f0 vf 0 mac 81:55:00:00:00:a0'
ExecStart=/usr/bin/bash -c '/usr/bin/ip link set enp2s0f0 vf 1 mac 81:55:00:00:00:a1'
ExecStart=/usr/bin/bash -c '/usr/bin/ip link set enp2s0f0 vf 2 mac 81:55:00:00:00:a2'
ExecStart=/usr/bin/bash -c '/usr/bin/ip link set enp2s0f0 vf 3 mac 81:55:00:00:00:a3'
ExecStart=/usr/bin/bash -c '/usr/bin/ip link set enp2s0f0 vf 4 mac 81:55:00:00:00:a4'
ExecStart=/usr/bin/bash -c '/usr/bin/ip link set enp2s0f0 vf 5 mac 81:55:00:00:00:a5'
ExecStart=/usr/bin/bash -c '/usr/bin/ip link set enp2s0f0 vf 6 mac 81:55:00:00:00:a6'
ExecStart=/usr/bin/bash -c '/usr/bin/ip link set enp2s0f0 vf 7 mac 81:55:00:00:00:a7'
ExecStart=/usr/bin/bash -c '/usr/bin/ip link set enp2s0f0 vf 8 mac 81:55:00:00:00:a8'
ExecStart=/usr/bin/bash -c '/usr/bin/ip link set enp2s0f0 vf 9 mac 81:55:00:00:00:a9'
#set PF up

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

#set VF up

ExecStart=/usr/bin/bash -c '/usr/bin/ip link set enp2s0f0v0 up'
ExecStart=/usr/bin/bash -c '/usr/bin/ip link set enp2s0f0v1 up'
ExecStart=/usr/bin/bash -c '/usr/bin/ip link set enp2s0f0v2 up'
ExecStart=/usr/bin/bash -c '/usr/bin/ip link set enp2s0f0v3 up'
ExecStart=/usr/bin/bash -c '/usr/bin/ip link set enp2s0f0v4 up'
ExecStart=/usr/bin/bash -c '/usr/bin/ip link set enp2s0f0v5 up'
ExecStart=/usr/bin/bash -c '/usr/bin/ip link set enp2s0f0v6 up'
ExecStart=/usr/bin/bash -c '/usr/bin/ip link set enp2s0f0v7 up'
ExecStart=/usr/bin/bash -c '/usr/bin/ip link set enp2s0f0v8 up'
ExecStart=/usr/bin/bash -c '/usr/bin/ip link set enp2s0f0v9 up'

[Install]
WantedBy=multi-user.target

echo 12 中的12为需要虚拟的网卡数量 enp2s0f0 为需要虚拟的网卡

每个VF后的mac 81:55:00:00:00:a0 可以删掉,我这样设置是为了固定MAC地址,不然每次开机时随机的

#重载服务
systemctl daemon-reload
#设置成开机启动
systemctl enable sriov-net.service
#重启
reboot

重启后在PVE后台查看SR-IOV已生效

0

评论区