PVE开启核显虚拟化Intel GVT-g并修改显存实现多vGPU


前言

Intel GVT-g是显卡虚拟化技术,不同于PCI-E设备直通,GVT-g可以虚拟出多个虚拟机的GPU,从而有效地在虚拟机中提供接近宿主机的图形性能,并且仍然让主机正常使用虚拟化的GPU。

简单的说就是把一个显卡拆成好多个分别给不同虚拟机使用。

实验环境:

类型 详细信息
CPU I5 8400
主板 华擎 Z370M Pro4
内存 64G
板载M.2 西数 SN770、512G
PVE版本 7.4

为了实现更多vGPU,需要给核显分配更多的显存。虽然主板给出了显存的设置选项,最大是1024MB。但即使设置了1024MB,在pve下还是Menmory Size 还是 256M。也就是在PVE下可用的GVTg数量少的可怜。

插曲:在PVE开启显卡虚拟化intel GVT-g

注意,intel gvt-g技术,只支持5代以上桌面CPU或者4代以上服务器CPU。

不支持11代以上CPU。J3XXX似乎支持,请自测。

脚本对zfs和btrfs启动的支持有问题,请勿用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#!/bin/bash

grub_check(){
if [ -e /etc/kernel/proxmox-boot-uuids ]
then
echo "引导为Systemd-boot"
echo "正在修改cmdline"
edit_cmdline
else
echo "引导为grub"
echo "正在修改grub"
edit_grub
fi
}

modiy_modules(){
echo "正在修改内核参数"
cp /etc/modules /opt/backup/modules_$(date +%s)
sed -i '/kvmgt/d' /etc/modules
echo kvmgt >> /etc/modules
sed -i '/915/d' /etc/modprobe.d/*
sed -i '/8086/d' /etc/modprobe.d/*
update-initramfs -u > /dev/null 2>&1
echo "内核参数修改完成"
}

edit_cmdline(){
cp /etc/kernel/cmdline /opt/backup/cmdline_$(date +%s)
echo `cat /etc/kernel/cmdline` 'quiet intel_iommu=on i915.enable_gvt=1' > /etc/kernel/cmdline
proxmox-boot-tool refresh > /dev/null 2>&1
echo "cmdline修改完成"
}
edit_grub(){
cp /etc/default/grub /opt/backup/grub_$(date +%s)
sed -i '/GRUB_CMDLINE_LINUX_DEFAULT/d' /etc/default/grub
sed -i '/GRUB_CMDLINE_LINUX/i GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on i915.enable_gvt=1"' /etc/default/grub
update-grub > /dev/null 2>&1
echo "grub修改完成"
}

echo "这是一个自动配置gvt-g的脚本"
echo "本脚本不检测硬件类型,请自己确保符合条件"

read -p "请按y/Y继续" configure
if [ $configure = "y" ] || [ $configure = "Y" ]
then
echo "开始检测引导类型"
mkdir /opt/backup > /dev/null 2>&1
grub_check
else
echo "输入错误,脚本退出"
exit 0
fi
modiy_modules
echo "脚本执行完成,请重启"
echo "其中grub和modules文件已经备份到/opt/backup目录下"
echo "重启之后,请运行命令 lsmod|grep kvmgt 有输出即代表成功"

准备工作

1.使用”UEFI Tool“工具找到设置对应的模块

有能力的先提取一下当前版本的BIOS,没能力的去官网找到和本机BIOS相同的更新文件。或者直接去官网下载了最新版的BIOS更新文件并更新BIOS。

打开BIOS更新文件,然后按Ctrl+F打开搜索页面,切换到text选项卡,搜索aperture size

点击OK,进行搜索,下方将展示搜索结果。

双击搜索结果,自动跳转到对应模块。

右键,选择 Extract body,将导出的efi文件保存一下。

2.使用“IRFExtractor”工具转格式

使用IRFExtractor打开上一步另存的*.efi文件

使用文本编辑器打开这个txt文件,搜索aperture

上图中的0x88A就是这个设置的偏移值,下面就是可供调节的几个选项。建议这一步拍个照。比如这边的默认值就是256M,选项值为0x1

开始修改

可以使用ventoy做启动引导,需要放入uefi引导文件下载链接

重启电脑,选择U盘引导,选择uefi引导文件,进入grub命令行模式

1.验证偏移地址是否正确

输入setup_var_3 0x88A,默认情况下返回的是0x1即256M

那就说明这个地方就是修改aperture size的地方。

2.修改aperture size

输入setup_var 0x88a 0x7,将aperture size修改为1024M。验证后reboot重启

验证结果