0x00 前言
可以在KVM虚拟机看电影、玩游戏哦。
我的环境如下:
0x01 启动GVT-g
要启用IOMMU、i915,编辑grub文件:
$ sudo vim /etc/default/grub
找到 GRUB_CMDLINE_LINUX_DEFAULT的参数,在后面添加 intel_iommu=on和 i915.enable_guc=0
GRUB_CMDLINE_LINUX_DEFAULT="loglevel=3 intel_iommu=on i915.enable_guc=0"
要启用 kvmgt、 vfio-iommu-typ1、 mdev
$ sudo modprobe kvmgt vfio-iommu-type1 mdev
在 /etc/modprobe.d/目录下创建配置文件来打开GPU虚拟化
$ sudo echo "options i915 enable_gvt=1" >> /etc/modprobe.d/gvt-g.conf
至此, 重新启动系统。
$ reboot
$ lspci -D -nn
找到显卡的GUID,例如 0000:00:02.0
$ ls /sys/bus/pci/devices/0000:00:02.0/mdev_supported_types/
i915-GVTg_V5_4 i915-GVTg_V5_8
例如,将显示以下两个文件夹,表示启动成功
[En]
For example, the following two folders are displayed, indicating that the startup was successful
i915-GVTg_V5_4 i915-GVTg_V5_8
若文件夹为空说明GVT-g没有成功启动。
进入对应目录,查看 description文件获取信息
$ cat /sys/bus/pci/devices/0000:00:02.0/mdev_supported_types/i915-GVTg_V5_4/description
low_gm_size: 128MB
high_gm_size: 512MB
fence: 4
resolution: 1920x1200
weight: 4
说明 i915-GVTg_V5_4最大支持分辨率1920×1200,显存占用128MB~512MB。
Arch wiki还描述了其他类型:
i915-GVTg_V5_1 # Video memory:
$ uuidgen
7d6cff35-231d-4ad2-a9b7-aa53d4d51b1f
来生成一个UUID,用它来标识新建的虚拟显卡
创建设备,这里我选择i915-GVTg_V5_4:
$ echo "7d6cff35-231d-4ad2-a9b7-aa53d4d51b1f" > "/sys/devices/pci0000:00/0000:00:02.0/mdev_supported_types/i915-GVTg_V5_4/create"
其中 GUID编号和 mdev类型根据实际情况修改。
0x02 创建虚拟机
使用virtio设备。虚拟机命名为vmname。
$ virsh edit vmname
vmname替换成创建虚拟机的名称,在元素中添加
uuid要修改成创建虚拟显卡的UUID
找到和元素,删除缺省值,并将其修改为:
[En]
Find the and element, delete the default, and modify it to:
pci-后面编号根据实际情况修改。
接着,修改
在元素中,在上方添加:
device.hostdev0.xres和 device.hostdev0.yres选项可根据需要调整分辨率,要小于mdev支持的分辨率。
之后启动虚拟机看看。
为了每次启动虚拟都自动启动虚拟显卡,故使用qemu的hook功能。
创建 /etc/libvirt/hooks/目录。创建 qemu文件,内容如下:
#!/bin/bash
GVT_PCI="0000:00:02.0"
GVT_GUID="7d6cff35-231d-4ad2-a9b7-aa53d4d51b1f"
MDEV_TYPE="i915-GVTg_V5_4"
DOMAIN="vmname"
if [ $# -ge 3 ]; then
if [ $1 = "$DOMAIN" -a $2 = "prepare" -a $3 = "begin" ]; then
echo "$GVT_GUID" > "/sys/bus/pci/devices/$GVT_PCI/mdev_supported_types/$MDEV_TYPE/create"
elif [ $1 = "$DOMAIN" -a $2 = "release" -a $3 = "end" ]; then
echo 1 > /sys/bus/pci/devices/$GVT_PCI/$GVT_GUID/remove
fi
fi
其中变量根据实际情况进行修改。
[En]
Where the variables are modified according to the actual situation.
0x03 尾声
在windows中安装virtio客户端程序。
硬件管理器里面更新显卡驱动,来获得intel显卡驱动。
Original: https://www.cnblogs.com/kagamirr/p/15451409.html
Author: kagamirr
Title: 使用GVT-g为KVM添加虚拟显卡渲染3D图形
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/524427/
转载文章受原作者版权保护。转载请注明原作者出处!