文章目录

概述

基本环境搭建

组件编译

mesa

libvirt

qemu-kvm

virglrenderer

应用

概述

virtio-gpu是GPU分时复用方案,相对于透传方案,virito-gpu的优点时可以模拟更多的gpu,缺点是因为GPU需要处理更多的请求,相比透传方案,调度的损耗多,牺牲了GPU部分性能。

本文的实践主要基于virtio-gpu官方博客的搭建指导。

基本环境搭建

选择centos 8图形界面,CentOS Linux release 8.1.1911

安装OS之后,如果不被墙,可以使用默认的yum源,如果没有yum源配置,安装centos-repos-8.1-1.1911.0.8.el8.x86_64.rpm

yum高级工具yumdownloader安装yum -y install yum-utils.noarch

基本编译开发套件安装yum -y groupinstall Development

组件编译

mesa

git clone https://github.com/mesa3d/mesa.git

yum-builddep mesa

yum install -y meson

mkdir build; cd build;

meson configure --prefix=/usr

meson …

ninja

ninja build

libvirt

wget http://vault.centos.org/8.0.1905/virt/Source/advanced-virtualization/libvirt-5.6.0-10.el8.src.rpm

安装libvirt源码包rpm -ivh libvirt-5.6.0-10.el8.src.rpm

安装libvirt编译环境依赖包yum-builddep libvirt

编译libvirt源码包cd $HOME/rpmbuild && rpmbuild -bb SPECS/libvirt.spec --define "_topdir $(pwd)"

进入RPMS目录安装rpm包

qemu-kvm

wget http://vault.centos.org/8.0.1905/virt/Source/advanced-virtualization/qemu-kvm-4.1.0-23.el8.1.src.rpm

安装qemu-kvm源码包rpm -ivh qemu-kvm-4.1.0-23.el8.1.src.rpm

安装qemu-kvm编译环境依赖包yum-builddep qemu-kvm

高版本qemu直接rpmbuild编译会报缺少virglrenderer-devel,这个依赖在centos上没有找到,直接下载源码编译解决这个依赖问题,步骤在下一节介绍,假设现在qemu编译依赖已经解决

取出qemu-kvm源码包cd $HOME/rpmbuild/SOURCES && tar -xf qemu-4.1.0.tar.xz"

进入源码目录配置./configure --target-list=x86_64-softmmu --prefix=/usr --enable-kvm --enable-virglrenderer

编译并安装make -j$(nproc --ignore=1) && make install

virglrenderer

virglrenderer是一个开源项目virgil3d提供的开源库,它的主要功能是针对虚拟化场景,为QEMU提供一个具有3D图形处理的显卡,其使用方式就是为QEMU提供一组3D图形处理的接口。QEMU通过调用virglrenderer的库接口实现主机侧的3D图形加速处理。

virglrenderer编译依赖两个工具分别是cmak和ninja,分别安装yum install -y cmake ninja-build

virglrenderer还依赖一个libepoxy库,分别下载这两个组件的源码

下载libepoxy git clone https://github.com/anholt/libepoxy.git

下载virglrenderer git clone git://anongit.freedesktop.org/virglrenderer

编译libexpoxy依赖glesv2,安装yum install mesa-libGLES-devel

编译libexpoxy,只能用ninja方式编译:

mkdir _build && cd _build

meson --prefix=/usr

ninja

sudo ninja install

编译virglrender,可以用ninja方式编译,也可以用make编译,步骤如下:

./configure --enable-autotools --enable-debug --prefix=/usr

make -j$(nproc --ignore=1)

make install

在上述所有组件编译安装完成后,运行virsh version查看虚拟化组件版本,成功的输出应该是这样:

应用

准备磁盘文件qemu-img create -f qcow2 /home/test_vm.qcow2 80G

创建测试虚机的xml文件test_vm.xml如下:

test_vm

720a0f9f-2893-4712-87e4-b7a61454dd7a

16777216

4194304

4194304

4

/machine

hvm

destroy

restart

destroy

/usr/bin/qemu-system-x86_64

system_u:system_r:svirt_t:s0:c799,c857

system_u:object_r:svirt_image_t:s0:c799,c857

+0:+0

+0:+0

定义虚拟机virsh define test_vm.xml

关闭防火墙,设置qemu访问权限:

cat /etc/sysconfig/selinux

SELINUX=disabled

cat /etc/libvirt/qemu.conf

user = "root"

group = "root"

启动虚机virsh start test_vm,这时启动的虚机还没有配置virtio-gpu

libvirt默认将第一个显卡配置成vga模式保持兼容性,同时如果显卡设置成virtio,默认使用virtio-gpu-pci设备,因此修改libvirt,让其默认使用virtio-gpu,重新编译libvirt。

diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c

index a5958c3..0e1a5cf 100644

--- a/src/qemu/qemu_command.c

+++ b/src/qemu/qemu_command.c

@@ -4660,9 +4660,11 @@ qemuBuildDeviceVideoStr(const virDomainDef *def,

* model with VGA compatibility mode. For some video devices on some

* architectures there might not be such model so fallback to one

* without VGA compatibility mode. */

+#if 0

if (video->primary && qemuDomainSupportsVideoVga(video, qemuCaps))

model = qemuDeviceVideoTypeToString(video->type);

else

+#endif

model = qemuDeviceVideoSecondaryTypeToString(video->type);

if (!model || STREQ(model, "")) {

@@ -4673,11 +4675,13 @@ qemuBuildDeviceVideoStr(const virDomainDef *def,

}

if (STREQ(model, "virtio-gpu")) {

+#if 0

if (qemuBuildVirtioDevStr(&buf, "virtio-gpu", qemuCaps,

VIR_DOMAIN_DEVICE_VIDEO, video) < 0) {

goto error;

}

} else {

+#endif

virBufferAsprintf(&buf, "%s", model);

}

启动虚机时在libvirt xml中添加如下内容:

/* 1 */

/* 2 */

/* 3 */

/* 4 */

1. 启动qemu vnc server,客户端使用vnc client远程连接虚机

2. 添加一个显示器设备,设备类型为egl-headless,与vnc/spic/sdl显示设备不同,egl-headless没有提供显示窗口或者终端,它只是用来指示qemu在执行图形处理时使用OpenGL加速。rendernode指示qemu在处理图形时使用host上的那个DRI设备加速,通常情况下不需要设置,qemu默认使用第一个显卡对应的DRI设备,只有在有多个显卡时才有用。

3. 添加一张virtio-vga的显卡作为主显卡,virtio-vga显示是virtio-gpu加上stdvga的结合。它兼容vga模式。

4. 添加一张virtio-gpu的显卡

最后启动虚机,qemu命令行如下:

-vnc 0.0.0.0:0 /* 5 */

-display egl-headless,rendernode=/dev/dri/renderD128/* 6 */

-device virtio-vga,id=video0,max_outputs=1,bus=pci.0,addr=0xb /* 7 */

-device virtio-gpu-pci,id=video1,max_outputs=1,bus=pci.0,addr=0x2/* 8 */

5. vnc server,端口5900

6. 设置qemu处理GL操作时使用host上的DRI设备

7. 增加virtio-gpu兼容vga模式的显卡

8. 增加virtio-gpu显卡

gpu virtio_VirtIO-GPU环境搭建与应用相关推荐

  1. tensorflow gpu python3.5_tensorflow环境搭建:Ubuntu16.04+python3.5+cuda8.0+tensorflow1.4

    Ubuntu16.04是深度学习主流的操作系统,兼容性也最好. python3.5能够安装支持tensorflow的gpu cuda是nvidia推出的运算平台,cuda8.0对tensorflow比 ...

  2. OpenCV学习1--介绍与环境搭建

    OpenCV学习1--介绍与环境搭建 PS:安装过程中的一些总结和教训 安装文件夹里的V11对应的是VS2012版本,V14对应的是VS2015版本,所以使用VS2012的人可能无法使用opencv3 ...

  3. 干货|TensorFlow开发环境搭建(Ubuntu16.04+GPU+TensorFlow源码编译)

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|机器学习算法工程师 安装平台 1 平台 目前Tensor ...

  4. Miniconda3+Tensorflow2.3(GPU版)+Win10_x64+GTX1060深度学习环境搭建

    写在这里的初衷,一是备忘,二是希望得到高人指点,三是希望能遇到志同道合的朋友. 硬件信息: 系统:win10家庭中文版 CPU:i7-7700HQ 内存:16GB 显卡:GTX1060 目录 一.确定 ...

  5. Miniconda3+PyTorch1.7.1(GPU版)+Win10_x64+GTX1060深度学习环境搭建

    写在这里的初衷,一是备忘,二是希望得到高人指点,三是希望能遇到志同道合的朋友. 硬件信息: 系统:win10家庭中文版 CPU:i7-7700HQ 内存:16GB 显卡:GTX1060 目录 一.确定 ...

  6. linux 查看cuda版本_Ubuntu18.04+Tensorflow GPU版本环境搭建

    硬件平台:笔记本 处理器:I7 显卡:GTX960 系统:Ubuntu18.04 64位 步骤1.安装CUDA(无显卡不必安装) 去NVIDIA官网:CUDA Toolkit Archive 下载CU ...

  7. 腾讯云GPU服务器深度学习环境搭建

    Author:ZERO-A-ONE Date:2021-2-20 ​ 因为本人的电脑没有带有NVIDIA公司的独立显卡,所以需要用到GPU进行大规模运算加速训练的时候,就萌生了购买云服务进行计算的念头 ...

  8. win10下caffe环境搭建: win10 + vs2013 + caffe + CUDA 7.5 + cudnn v4 + Anaconda2 (python 2.7) 目前未使用GPU

    win10下caffe环境搭建: win10 + vs2013 + caffe + CUDA 7.5 + cudnn v4 + Anaconda2 (python 2.7)   目前未使用GPU 最近 ...

  9. ubuntu16.04 opencv3.3 python2.7 caffe GPU环境搭建

    此博客总结记录深度学习环境搭建的详细过程,博客中的所有下载链接均为官方网站 1. 软件库更新与软件升级 sudo apt-get update sudo apt-get upgrade 2.安装基本的 ...

  10. 环境搭建 | 深度学习爱好者如何配置带GPU电脑环境

    环境搭建 | 深度学习爱好者如何配置带GPU电脑环境 2017-06-14 11:30英特尔/PC/移动芯片 作者 | 沈浩 最近开始学习深度学习(Deep Learning)技术,特别是google ...

最新文章

  1. 44 | 套路篇:网络性能优化的几个思路(下)
  2. java測試動態方法_java反射学习
  3. Redis两种客户端:lettuce和Jedis的区别
  4. 无需部署即可测试JPQL / HQL
  5. 【Docker】Error: No such image: gotok8s/kube-proxy:v1.16.5
  6. Kindle 助手上线啦
  7. Ulysses for Mac(最好用的纯文本编辑器)v22(65099)直装版
  8. OSPF NSSA forwarding address   深度解析
  9. 【实习记】2014-09-26恢复linux下误删的ntfs盘中的文件
  10. BZOJ - 4568 幸运数字
  11. 万年历单片机课程设计百度文库_单片机课程设计-万年历
  12. 网络存储磁带库术语解释
  13. 一个三维四翼混沌系统混沌吸引子——MATLAB实现
  14. 《炬丰科技-半导体工艺》MOCVD生长同质外延GaN的形态和结构特征
  15. 在数据可视化这条路上,除了天天做图表,还有更重要的3件事
  16. 八块腹肌是如何练成的?入门减脂训练加饮食计划
  17. stm32之蓝牙无线超声波测距
  18. Typora 收费?试试这款开源 Markdown 神器!好用还美观
  19. 如何使用Julius搭建一个语音识别引擎?
  20. 数据结构-栈基本功能的实现

热门文章

  1. 【论文笔记】Fast and Furious: Real Time End-to-End 3D Detection, Tracking and Motion Forecasting
  2. Hector-SLAM初使用
  3. 2023年全国职业院校技能大赛-应用软件系统开发赛项(高职组)赛题第9套
  4. 活动回顾 | 波兰大会展现出BSV区块链上的全新商业机会
  5. java货车装载货物的总数量_第五个 货车要装载一批货物,货物有三种商品组成:电视、计算机和洗衣机 联合开发网 - pudn.com...
  6. 如何避免撰写出高重复率论文
  7. 法国检察官着手调查苹果“降频门”事件
  8. 融云 IM RTC 能力上新盘点
  9. 【获奖纪实】2016年“CCF优秀大学生奖”拟获奖者名单公示
  10. mysql替换回车、换行符