PVE 8.2.2 开启万兆光口网卡SR-IOV与虚拟机定时启丶停
SR-IOV(Single Root I/O Virtualization)是一种硬件支持的虚拟化技术,允许单个PCI Express(PCIe)设备向主机系统呈现多个独立的PCI设备,旨在提高网络性能和资源利用率
SR-IOV技术通过在物理网卡上引入一个称为Physical Function(PF)的实体,管理和控制一组称为Virtual Functions(VF)的虚拟网卡。每个VF都相当于一个独立的逻辑网卡,具有自己的MAC地址和队列,可以独立运行并与外部环境通信
SR-IOV的工作原理
SR-IOV技术的核心思想是在物理网卡上引入PF,负责管理和控制一组VF。每个VF都相当于一个独立的逻辑网卡,具有自己的MAC地址和队列。通过SR-IOV技术,PF将物理资源(如带宽、队列和缓存等)划分为多个VF,每个VF都可以被分配给不同的虚拟机或容器进行使用。VF之间是相互隔离的,它们可以独立地配置、管理和控制网络流量。这样,虚拟化环境中的各个虚拟机或容器可以直接访问它们所分配的VF,而无需经过主机操作系统的网络协议栈,从而提高网络性能和响应速度
SR-IOV的优势
提高性能:使用SR-IOV VF而不是模拟设备的主要优点是提高性能。作为vNIC附加到虚拟机的VF性能几乎与物理NIC相同,并且优于半虚拟化或模拟的NIC
减少资源消耗:通过减少主机CPU和内存资源的使用量,SR-IOV可以显著降低服务器的整体负载。每个VF独立管理自己的资源,减少了上下文切换和数据处理的时间延迟
增强隔离性:每个VF都是独立的逻辑网卡,具有自己的资源和控制权,这增强了虚拟化环境中的隔离性,提高了系统的稳定性和安全性
实际应用场景
SR-IOV技术广泛应用于需要高性能网络的虚拟化环境中。例如,在云计算数据中心、大数据分析、高性能计算(HPC)等领域,SR-IOV技术能够显著提升网络性能和资源利用率,满足复杂应用场景的需求
进入PVE SSH命令控制台:
lspci -k | grep -i ethernet
以02:00.1 02:00.0为例:
cat /sys/bus/pci/devices/0000:02:00.1/sriov_totalvfs
查看是否支持SR-IOV,支持虚拟64个VF网口
不支持如下:
创建文件开启网卡SR-IOV代码
cd /etc/systemd/system/
nano sriov-pcie1.service
复制以下内容:网卡名改为你PVE的
[Unit] Description=Script to enable SR-IOV on boot [Service] Type=simple #start SR-IOV ExecStartPre=/usr/bin/bash -c '/usr/bin/echo 15 > /sys/class/net/enp2s0f1/device/sriov_numvfs' #set VF MAC ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set dev enp2s0f1 vf 0 mac 00:20:00:00:00:00' ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set dev enp2s0f1 vf 1 mac 00:20:00:00:00:01' ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set dev enp2s0f1 vf 2 mac 00:20:00:00:00:02' ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set dev enp2s0f1 vf 3 mac 00:20:00:00:00:03' ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set dev enp2s0f1 vf 4 mac 00:20:00:00:00:04' ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set dev enp2s0f1 vf 5 mac 00:20:00:00:00:05' ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set dev enp2s0f1 vf 6 mac 00:20:00:00:00:06' ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set dev enp2s0f1 vf 7 mac 00:20:00:00:00:07' ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set dev enp2s0f1 vf 8 mac 00:20:00:00:00:08' ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set dev enp2s0f1 vf 9 mac 00:20:00:00:00:09' ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set dev enp2s0f1 vf 10 mac 00:20:00:00:00:10' ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set dev enp2s0f1 vf 11 mac 00:20:00:00:00:11' ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set dev enp2s0f1 vf 12 mac 00:20:00:00:00:12' ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set dev enp2s0f1 vf 13 mac 00:20:00:00:00:13' ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set dev enp2s0f1 vf 14 mac 00:20:00:00:00:14' #set PF 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 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' ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set enp2s0f1v4 up' ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set enp2s0f1v5 up' ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set enp2s0f1v6 up' ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set enp2s0f1v7 up' ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set enp2s0f1v8 up' ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set enp2s0f1v9 up' ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set enp2s0f1v10 up' ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set enp2s0f1v11 up' ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set enp2s0f1v12 up' ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set enp2s0f1v13 up' ExecStart=/usr/bin/bash -c '/usr/bin/ip link set enp2s0f1v14 up' Restart=on-failure [Install] WantedBy=multi-user.target
Ctrl+x按Y保存
编辑第二个光口
nano sriov-pcie2.service
[Unit]
Description=Script to enable SR-IOV on boot
[Service]
Type=simple
#start SR-IOV
ExecStartPre=/usr/bin/bash -c '/usr/bin/echo 15 > /sys/class/net/enp2s0f0/device/sriov_numvfs'
#set VF MAC
ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set dev enp2s0f0 vf 0 mac 00:20:00:00:10:00'
ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set dev enp2s0f0 vf 1 mac 00:20:00:00:10:01'
ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set dev enp2s0f0 vf 2 mac 00:20:00:00:10:02'
ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set dev enp2s0f0 vf 3 mac 00:20:00:00:10:03'
ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set dev enp2s0f0 vf 4 mac 00:20:00:00:10:04'
ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set dev enp2s0f0 vf 5 mac 00:20:00:00:10:05'
ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set dev enp2s0f0 vf 6 mac 00:20:00:00:10:06'
ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set dev enp2s0f0 vf 7 mac 00:20:00:00:10:07'
ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set dev enp2s0f0 vf 8 mac 00:20:00:00:10:08'
ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set dev enp2s0f0 vf 9 mac 00:20:00:00:10:09'
ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set dev enp2s0f0 vf 10 mac 00:20:00:00:10:10'
ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set dev enp2s0f0 vf 11 mac 00:20:00:00:10:11'
ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set dev enp2s0f0 vf 12 mac 00:20:00:00:10:12'
ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set dev enp2s0f0 vf 13 mac 00:20:00:00:10:13'
ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set dev enp2s0f0 vf 14 mac 00:20:00:00:10:14'
#set PF up
ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set enp2s0f0 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 enp2s0f0v5 up'
ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set enp2s0f0v6 up'
ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set enp2s0f0v7 up'
ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set enp2s0f0v8 up'
ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set enp2s0f0v9 up'
ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set enp2s0f0v10 up'
ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set enp2s0f0v11 up'
ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set enp2s0f0v12 up'
ExecStartPre=/usr/bin/bash -c '/usr/bin/ip link set enp2s0f0v13 up'
ExecStart=/usr/bin/bash -c '/usr/bin/ip link set enp2s0f0v14 up'
Restart=on-failure
[Install]
WantedBy=multi-user.target
Ctrl+x按Y保存
加入开机启动
systemctl daemon-reload
systemctl 添加开机启动
systemctl enable sriov-pcie1.service
systemctl 添加开机启动
systemctl enable sriov-pcie2.service
systemctl 删除开机启动
systemctl disable sriov-pcie1.service systemctl disable sriov-pcie2.service
重启虚拟化主机
reboot
以下开启成功后截图,然后虚拟直通SR-IOV网卡即可:
虚拟机全部替换SR-IOV直通光口:
测试:
两台虚拟机直通SR-IOV用iperf3
定时开关虚拟机:
crontab -e
首次输入命令按1
添加定时关机时间与开机时间:
06 20 * * * pvesh create /nodes/pve/qemu/101/status/stop 10 20 * * * pvesh create /nodes/pve/qemu/101/status/start 00 01 * * * pvesh create /nodes/pve/qemu/667/status/stop 30 17 * * * pvesh create /nodes/pve/qemu/667/status/start
Ctrl+x按Y保存,注:[标注红色是你PVE安装时名称一定要对,ntp校时设置好]
crontab -l
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?