使用GVT-g为KVM添加虚拟显卡渲染3D图形

0x00 前言

可以在KVM虚拟机看电影、玩游戏哦。

我的环境如下:

0x01 启动GVT-g

要启用IOMMU、i915,编辑grub文件:

$ sudo vim /etc/default/grub

找到 GRUB_CMDLINE_LINUX_DEFAULT的参数,在后面添加 intel_iommu=oni915.enable_guc=0

GRUB_CMDLINE_LINUX_DEFAULT="loglevel=3 intel_iommu=on i915.enable_guc=0"

要启用 kvmgtvfio-iommu-typ1mdev

$ 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.xresdevice.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/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球