1.确认硬件支持及biso功能开启
需要确认自己CPU是否支持虚拟化。intel要b75以上芯片组才支持。也就是说intel4代酷睿处理器以上,都支持。amd不明。具体可以到英特尔官网查看自己的CPU是否支持 英特尔® 虚拟化技术 (VT-x)
VT-D是io虚拟化。不是VT-X,具体请参考下面文章
https://zhuanlan.zhihu.com/p/50640466
有很多新手,以为主板开启虚拟化功能,就能直通了,其实不是!要开启vt-d才能io虚拟化。AMD平台是iommu,某些OEM主板上叫SRIOV。请注意。
2.修改引导设置
该步骤有两个方法可选,二选一即可!
方法1:
修改grub引导设置
使用nano /etc/default/grub
去修改grub引导文件的设置
其实就是加入了iommu开启这个选项
#intel的的CPU修改为
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt i915.enable_gvt=1 pcie_acs_override=downstream,multifunction video=vesafb:off video=efifb:off"
#amd的CPU修改为
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on"
更改完成后,刷新系统配置
update-grub
方法2:
(2023.7.5更新,最新方法,参考PVE7教程【篇一】硬件虚拟化 显卡直通与GVT-g和proxmox(pve)折腾:开启IOMMU)
现在我们需要修改/etc/kernel/cmdline
这个内核启动参数配置文件,在文件末尾添加该参数
intel_iommu=on iommu=pt i915.enable_gvt=1 pcie_acs_override=downstream,multifunction video=vesafb:off video=efifb:off
intel_iommu=on
是设置iommu功能开启(amd的cpu该参数名改为amd_iommu)
iommu=pt
是开启pt模式,官方文档说明:这仅在必要时才启用 IOMMU 转换,适配器不需要使用 DMA 转换到内存,因此可以提高虚拟机管理程序 PCIe 设备(未传递到 VM)的性能。意思就是开了能提高虚拟机调取PCIe的性能,那就开吧。
i915.enable_gvt=1
官方文档说明:Intel的 GVT-g 驱动程序集成在内核中,启用时加载模块。意思就是,想开启GVT-g的就添加这条,显卡直通的就不要添加了。
pcie_acs_override=downstream,multifunction
打ACS补丁,以细化pcie的IOMMU分组,解决CPU IOMMU分组问题
video=vesafb:off video=efifb:off
关闭一些显示功能以防冲突
更改完成后,刷新系统配置
proxmox-boot-tool refresh
2.2添加PVE内核模块
vi /etc/modules
添加这些内核模块进去(直接粘贴进去就好)
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
kvmgt
原理说明:
1、PCIe直通启用vfio vfio_iommu_type1 vfio_pci vfio_virqfd
2、vGPU和GVT-g需再添加kvmgt
2.3刷新内核启动参数
update-initramfs -u -k all
2.4重启后查看内核启动参数
重启后查看/proc/cmdline
有没有将我们在/etc/kernel/cmdline
的修改添加进去
cat /proc/cmdline
2.5验证是否开启
dmesg | grep -e DMAR -e IOMMU
ls /sys/bus/pci/devices/0000:00:02.0/mdev_supported_types
2.6查看iommu分组
可使用该脚本查看
#!/bin/bash
shopt -s nullglob
for g in $(find /sys/kernel/iommu_groups/* -maxdepth 0 -type d | sort -V); do
echo "IOMMU Group ${g##*/}:"
for d in $g/devices/*; do
echo -e "\t$(lspci -nns ${d##*/})"
done;
done;
参考文献
Comments 1 条评论