使用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)

大家都在看

  • MySQL-报错:Error when bootstrapping CMake:

    在进行MySQL的源码安装的时候,系统上找不到合适的C编译器,GCC忘了装,莫慌,直接 yum命令装上gcc,还有gcc-C++没装的话后面也会提示错误,一起装上,,, [root…

    Linux 2023年6月13日
    097
  • Git 命令

    创建仓库 git init 命令创建一个新的 Git 仓库。它用来将已存在但还没有版本控制的项目转换成一个 Git 仓库,或者创建一个空的新仓库。大多数Git命令在未初始化的仓库中…

    Linux 2023年6月8日
    096
  • Linux NTP服务配置

    bash;gutter:true; 外部ntp服务器地址:0.cn.pool.ntp.org 内部ntp服务器地址1:192.168.57.200 内部ntp服务器地址2:192….

    Linux 2023年6月13日
    049
  • 【翻译】如何编写 Git 提交消息

    个人博客及创作索引页正在制作中,此处仅释出本地第一大版本。原文档基于 Hexo 及相关插件,不兼容于此处的格式暂不统一修复。 《【翻译】如何编写 Git 提交消息》[1]的简体中文…

    Linux 2023年6月13日
    0112
  • 白话linux操作系统原理

    虽然计算机相关专业,操作系统和计算机组成原理是必修课。但是大学时和真正从事相关专业工作之后,对于知识的认知自然会发生变化。还很有可能,一辈子呆在学校的老师们只是照本宣科,自己的理解…

    Linux 2023年6月14日
    080
  • centos 7 安装KVM

    一、安装KVM 实验环境如下: 虚拟机版本:VMware 12.5.7虚拟机需要开启虚拟化,如下图: 系统版本:CentOS Linux release 7.5.1804 (Cor…

    Linux 2023年6月7日
    086
  • 大数库GMP测试

    任务详情 在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务 用自己8位学号建两个文件夹xxxxxxxxsrc,xxxxxxxx,到GMP官网htt…

    Linux 2023年6月8日
    091
  • 【Jmeter】jmeter提取response中的返回值,并保存到本地文件–BeanShell后置处理器

    有个需求,需要在压测环境中,创建几十万的账号数据,然后再根据创建结果,查询到某些账号信息。 按照之前我的做法,直接Python调用API,然后再数据库查询; 但是近期所有开发人员的…

    Linux 2023年5月28日
    071
  • zabbix自定义监控(当会话登录超过三个就报警)

    安装过程在此省略。 1.agent端去修改配置文件 2.调用自定义内容 vim /etc/zabbix/zabbix_agentd.d/login.conf UserParamet…

    Linux 2023年6月6日
    081
  • 【Example】C++ 回调函数及 std::function 与 std::bind

    回调函数是做为参数传递的一种函数,在早期C样式编程当中,回调函数必须依赖函数指针来实现。 而后的C++语言当中,又引入了 std::function 与 std::bind 来配合…

    Linux 2023年6月13日
    080
  • 如何优化前端性能?

    导读:随着前端的范畴逐渐扩大,深度逐渐下沉,富前端必然带来的一个问题就是性能。特别是在大型复杂项目中,重前端业务可能因为一个小小的数据依赖,导致整个页面卡顿甚至崩溃。本文基于Qui…

    Linux 2023年6月8日
    0109
  • 关于最近公司一个业务系统的性能优化方案

    一个刚上线的IT系统,往往负载压力不大,所以不会存在什么性能问题。这时,人们大多只关心系统的功能性和用户体验。但是,随着时间推移,用户量和数据量都比刚上线的时候要多很多,高并发和大…

    Linux 2023年6月6日
    085
  • JCL 日志门面

    JCL( Jakarta Commons Logging ),是 Apache 提供的一个 通用日志 API 。用户可以自由选择第三方的日志组件作为具体实现,像 Log4j 或 J…

    Linux 2023年6月8日
    075
  • 【学习笔记】week01

    1、按系列罗列Linux 的发行版,并描述不同发行版之间的联系与区别 (1) Slackware : l SUSE Linux 软件包齐全 (2) Debian : l ubunt…

    Linux 2023年5月27日
    068
  • 如何在 pyqt 中实现桌面歌词

    前言 酷狗、网抑云和 QQ 音乐都有桌面歌词功能,这篇博客也将使用 pyqt 实现桌面歌词功能,效果如下图所示: 代码实现 桌面歌词部件 LyricWidget 在 paintEv…

    Linux 2023年6月7日
    098
  • 如何快速提高英飞凌单片机编译器 TASKING TriCore Eclipse IDE 编译速度

    1、前言 使用英飞凌单片机编译器 TASKING TriCore Eclipse IDE 开发编译时,想必感受最深刻的就是编译速度,那是非常慢了,如果是部分修改的源文件编译还好,不…

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