在Proxmox VE中设置硬件资源在虚拟机中直通

本实验使用的是基于intel cpu 和proxmox 6.x

为什么要做直通?
所谓直通"passthrough", 一般是指VM中的虚拟机可以直接的对host上的硬件资源进行访问.
通常情况下,虚拟机的网络和主机还有其他设备的通讯,是通过host上系统的桥接网卡进行的,理论上没有直接使用物理网卡更快.在pci-e设备上有多个网口的服务器来说,重复利用每一块网卡为虚拟机提供直通,就是一项无法避免的任务.
对IO密集型的应用,又想使用虚拟化带来的好处,那设置虚拟机对磁盘的直通或者透传,也是非常有必要的.

如何在Proxmox VE 6 中实现网卡直通
1.选中要进行网卡直通的虚拟机(注意是虚拟机,不是LXC主机),选择"硬件"添加 PCI设备

1.png

但是你做到这一步的信息,可能会和我提供的截图有出入的,会提示到没有IOMMU 被激活.
所以,硬件直通的第一步是在主机操作系统和硬件层级激活相应的功能.如果你的主机已经支持KVM的虚拟机的话,激活都是没有问题,是可以被硬件支持的.
如要激活,可直接跳过这一节,看 下一节 “直通需要的软硬件支持

2. 未完待续

直通需要的软硬件支持
硬件需要支持 IOMMU (I/O Memory Management Unit) interrupt remapping, this includes the CPU and the mainboard.一般来说,Intel systems支持VT-d 或者AMD系统 AMD-Vi即可.
基于你是通过Proxmox的ISO进行的安装,切你的服务器上Intel 系列cpu话,需要以下几步:

1.在kernel commandline 上激活IOMMU
1.1 修改/etc/default/grub 文件,将intel_iommu=on 加到 “GRUB_CMDLINE_LINUX_DEFAULT” 这个变量下,保存退出

2.jpg


1.2 命令行运行 update-grub
确保变更被全部更新完毕
可通过 cat /proc/cmdline 进行确认

3.jpg

2. 确保需要的kernel modules可以被加载
将如下的modules,一行一个加到 /etc/modules 文件下
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
3.刷新initramfs,运行"# update-initramfs -u -k all"
这可以生成一个新的initrd.img文件,如果看到生成成功,这一步就完成了
4. 重启系统
5. 重启以后,运行"# dmesg | grep -e DMAR -e IOMMU" 查看系统启动时,有没有IOMMU相关信息
如果有,可基本确认这个过程顺利完成! 接下来就可以为虚拟机正常的添加硬件直通了

如果工作要做的仔细的话,需要再确认下直通的网卡或者其他设备,是否是独立的IOMMU组中,而不是和其他设备共享通一个IOMMU group

find /sys/kernel/iommu_groups/ -type l

如你添加到网卡为01:00.3, 而旁边的网卡为01:00.2 ,结果如下图,可说明他们分别对应16和17 group.

4.png

添加回复:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。