gpu virtio_VirtIO-GPU环境搭建与应用
文章目录
概述
基本环境搭建
组件编译
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环境搭建与应用相关推荐
- tensorflow gpu python3.5_tensorflow环境搭建:Ubuntu16.04+python3.5+cuda8.0+tensorflow1.4
Ubuntu16.04是深度学习主流的操作系统,兼容性也最好. python3.5能够安装支持tensorflow的gpu cuda是nvidia推出的运算平台,cuda8.0对tensorflow比 ...
- OpenCV学习1--介绍与环境搭建
OpenCV学习1--介绍与环境搭建 PS:安装过程中的一些总结和教训 安装文件夹里的V11对应的是VS2012版本,V14对应的是VS2015版本,所以使用VS2012的人可能无法使用opencv3 ...
- 干货|TensorFlow开发环境搭建(Ubuntu16.04+GPU+TensorFlow源码编译)
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|机器学习算法工程师 安装平台 1 平台 目前Tensor ...
- Miniconda3+Tensorflow2.3(GPU版)+Win10_x64+GTX1060深度学习环境搭建
写在这里的初衷,一是备忘,二是希望得到高人指点,三是希望能遇到志同道合的朋友. 硬件信息: 系统:win10家庭中文版 CPU:i7-7700HQ 内存:16GB 显卡:GTX1060 目录 一.确定 ...
- Miniconda3+PyTorch1.7.1(GPU版)+Win10_x64+GTX1060深度学习环境搭建
写在这里的初衷,一是备忘,二是希望得到高人指点,三是希望能遇到志同道合的朋友. 硬件信息: 系统:win10家庭中文版 CPU:i7-7700HQ 内存:16GB 显卡:GTX1060 目录 一.确定 ...
- linux 查看cuda版本_Ubuntu18.04+Tensorflow GPU版本环境搭建
硬件平台:笔记本 处理器:I7 显卡:GTX960 系统:Ubuntu18.04 64位 步骤1.安装CUDA(无显卡不必安装) 去NVIDIA官网:CUDA Toolkit Archive 下载CU ...
- 腾讯云GPU服务器深度学习环境搭建
Author:ZERO-A-ONE Date:2021-2-20 因为本人的电脑没有带有NVIDIA公司的独立显卡,所以需要用到GPU进行大规模运算加速训练的时候,就萌生了购买云服务进行计算的念头 ...
- 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 最近 ...
- ubuntu16.04 opencv3.3 python2.7 caffe GPU环境搭建
此博客总结记录深度学习环境搭建的详细过程,博客中的所有下载链接均为官方网站 1. 软件库更新与软件升级 sudo apt-get update sudo apt-get upgrade 2.安装基本的 ...
- 环境搭建 | 深度学习爱好者如何配置带GPU电脑环境
环境搭建 | 深度学习爱好者如何配置带GPU电脑环境 2017-06-14 11:30英特尔/PC/移动芯片 作者 | 沈浩 最近开始学习深度学习(Deep Learning)技术,特别是google ...
最新文章
- 44 | 套路篇:网络性能优化的几个思路(下)
- java測試動態方法_java反射学习
- Redis两种客户端:lettuce和Jedis的区别
- 无需部署即可测试JPQL / HQL
- 【Docker】Error: No such image: gotok8s/kube-proxy:v1.16.5
- Kindle 助手上线啦
- Ulysses for Mac(最好用的纯文本编辑器)v22(65099)直装版
- OSPF NSSA forwarding address 深度解析
- 【实习记】2014-09-26恢复linux下误删的ntfs盘中的文件
- BZOJ - 4568 幸运数字
- 万年历单片机课程设计百度文库_单片机课程设计-万年历
- 网络存储磁带库术语解释
- 一个三维四翼混沌系统混沌吸引子——MATLAB实现
- 《炬丰科技-半导体工艺》MOCVD生长同质外延GaN的形态和结构特征
- 在数据可视化这条路上,除了天天做图表,还有更重要的3件事
- 八块腹肌是如何练成的?入门减脂训练加饮食计划
- stm32之蓝牙无线超声波测距
- Typora 收费?试试这款开源 Markdown 神器!好用还美观
- 如何使用Julius搭建一个语音识别引擎?
- 数据结构-栈基本功能的实现
热门文章
- 【论文笔记】Fast and Furious: Real Time End-to-End 3D Detection, Tracking and Motion Forecasting
- Hector-SLAM初使用
- 2023年全国职业院校技能大赛-应用软件系统开发赛项(高职组)赛题第9套
- 活动回顾 | 波兰大会展现出BSV区块链上的全新商业机会
- java货车装载货物的总数量_第五个 货车要装载一批货物,货物有三种商品组成:电视、计算机和洗衣机 联合开发网 - pudn.com...
- 如何避免撰写出高重复率论文
- 法国检察官着手调查苹果“降频门”事件
- 融云 IM RTC 能力上新盘点
- 【获奖纪实】2016年“CCF优秀大学生奖”拟获奖者名单公示
- mysql替换回车、换行符