当前位置: 首页 > news >正文

kvmgt-kernel 实现GPU虚拟化

kvmgt-kernel 实现GPU虚拟化

KVMGT-kernel是Intel开源技术01.org推出的一项完整的GPU虚拟化解决方案,在KVM和XEN的基础上实现。本文档对该技术进行相应测试,让大家有个基本参考和了解。KVMGT-kernel目前支持虚机系统包含win7 32,64位,win8.1 ubuntu,centos 。

首先来看下GPU虚拟化实现方式。(下图来自Intel)
第一种是实例调用api来实现虚拟化,这种方式即不能完全发挥GPU的性能,而且通过api调用实现的性能也非常低。
第二种虽然能通过DRIVER来获取GPU的性能实现GPU虚拟化,但属于独享资源,并不能实现多实例共享GPU性能。
·第三种是目前最优方式,即可通过DRIVER来获取调用HYPERVISOR相应模块实现GPU虚拟化,发挥最大性能,并且实现了多实例性能共享。
\
 
一、安装部署

测试环境原宿主机系统为centos7.0 64位
先获取kernel及qemu
项目地址:https://github.com/01org/KVMGT-kernel
  https://github.com/01org/igvtg-qemu
\
查看kernel 分支版本,建议编译如下版本(目前稳定版):
\
安装对应依赖包
yum install libarchive-dev libghc-bzlib-dev libpci-dev mercurial gettext bcc iasl libncurses5-dev kpartx bc libperl-dev libgtk2.0-dev libc6-dev-i386 libaio-dev libsdl1.2-dev libyajl-dev libx11-dev autoconf libtool xsltproc bison flex xutils-dev xserver-xorg-dev x11proto-gl-dev libx11-xcb-dev vncviewer libxcb-glx0 libxcb-glx0-dev libxcb-dri2-0-dev libxcb-xfixes0-dev python-dev bin86 git vim libssl-dev gcc gcc-c++ glib2 glib2-devel zlib zlib-devel automake
升级kernel.
   1)进入kernel目录建立编译配置文件
\
  2)编辑.config文件,增加XFS模块支持(由于本人采用xfs文件系统)。
\
3)编译内核文件
   make  -j8
\
4)确认编译通过之后执行make modules_install 安装内核模块。
\
5)生成引导镜像
mkinitrd /boot/initramfs-3.18.0-rc7-vgt-2015q3+ -v vmlinuz-3.18.0-rc7-vgt-2015q3+
\
6)复制必要文件至对应目录
cp   arch/x86/boot/bzImage  /boot/vmlinuz-kvm
\
cp vgt.rules /etc/udev/rules.d
\
chmod a+x vgt_mgr
\
cp vgt_mgr /usr/bin
\
 
二、安装qemu-kvmgt

1)更新相应依赖子模块(这步需要FQ)
git submodule update --init dtc
\
git submodule update --init roms/seabios
\
2 )编译安装
 ./configure --prefix=/root --enable-kvm --disable-xen --enable-debug-info --enable-debug --enable-sdl --enable-vhost-net --disable-debug-tcg
\
\
\
查看版本
\
3),加入boot引导项
Example(以下是本人grub.cfg配置)               
 
menuentry 'CentOS KVMGT Linux (3.18.0-rc7-vgt-2015q3+) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-123.13.1.el7.x86_64-advanced-73a9bad6-c54e-4c4a-8cc3-9ea39290efed' {
        load_video
        set gfxpayload=keep
        insmod gzio
        insmod part_msdos
        insmod xfs
        set root='hd0,msdos2'
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos2 --hint-efi=hd0,msdos2 --hint-baremetal=ahci0,msdos2 --hint='hd0,msdos2'  6c4194dc-75bd-44a3-a9fa-98681e7ea0d6
        else
          search --no-floppy --fs-uuid --set=root 6c4194dc-75bd-44a3-a9fa-98681e7ea0d6
        fi
        linux16 /vmlinuz-3.18.0-rc7-vgt-2015q3+ root=/dev/mapper/os-root ro crashkernel=auto intel_iommu=igfx_off ignore_loglevel drm_debug=15.UTF-8 i915.hvm_boot_foreground=1
        initrd16 /initramfs-3.18.0-rc7-vgt-2015q3+.img
}
\
重启机器,查看内核版本
\
 
三、性能测试

建立测试虚机,本人测试虚机采用win7 64位系统。虚机安装系统之后需要安装驱动。
在下面链接中下载对应驱动即可。(建议进入安全模式安装驱动)
https://downloadcenter.intel.com/download/25425/Intel-Graphics-Driver-for-Windows-7-8-1-15-36-
这里采用passmark2d软件进行性能测试。
PassMark Performance Test是一个专门用来测试电脑效能的性能测试软件。我们这里只测试显卡性能不同虚拟化场景对比。
使用Intel  GVT虚拟化场景性能测试。
我测试虚机内存为4096, CPU 为2.开启了gvt虚拟化功能。
\
可以看到虚拟机已经成功识别了宿主机的硬件。
\
1)首先使用系统自带评分工具测试结果如下。
\
可以看出基本评分为5.9分。
 
使用PASSMARK 2D图形评测结果如下
\
使用PASSMARK 3D图形评测结果如下
\
常规虚拟化场景性能测试
同样一台虚机,内存为4096, CPU 为2.我关闭GVT虚拟化功能来进行测试。
\
\

还是先看系统自带工具评分。
\
可以看到,使用常规虚拟化技术显示性能相当低,只有1分。
接下来看passmark 2D图形评测结果
\
2D评测结果也比开启GVT虚拟化性能要差很多,而3D性能评测试在常规虚拟化技术中根本无法使用。

 四、后续总结

使用Intel GVT虚拟化技术性能明显高出常规虚拟化技术显示性能,由于是Intel弄的,目前只支持intel型号cpu(i7系列)。
该技术应用场景可用于部分游戏,视频、图片编辑/播放,媒体转码等应用,具体应用场景可根据业务类型来选择。
 
该文档只测试了以kvm方式来实现的方式,有兴趣大家可以看看xen的实现方式。
Intel内部技术透露他们已经将其与openstack整合了,至于方法有兴趣大家可自行研究。

posted on 2018-04-18 09:30 秦瑞It行程实录 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/ruiy/p/8872065.html

相关文章:

  • 深入理解-CSS内联元素之font-size
  • 我为什么要关心区块链?概述和接纳
  • MySQL 5.7.20在RedHat 7.2上通过RPM包安装
  • 面试题3:数组中重复的数字,不能修改原数组
  • 蓝牙 bluez 的编程 C C++
  • Golang自定义包总结
  • Js基础——数据类型之Null和Undefined
  • 如何调用带返回值类型的函数
  • 通过pfSense阻止对某个网站的访问
  • scala基础语法(二)
  • python subprocess
  • linux笔记4.0
  • Oracle毙掉JavaOne
  • node入门
  • HTML5+CSS3+jQuery Mobile轻松构造APP与移动网站 (陈婉凌) 中文pdf扫描版
  • JavaWeb(学习笔记二)
  • java中具有继承关系的类及其对象初始化顺序
  • log4j2输出到kafka
  • tab.js分享及浏览器兼容性问题汇总
  • vuex 学习笔记 01
  • 动态规划入门(以爬楼梯为例)
  • 对象引论
  • 精彩代码 vue.js
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 山寨一个 Promise
  • 通过npm或yarn自动生成vue组件
  • 想使用 MongoDB ,你应该了解这8个方面!
  • 一个完整Java Web项目背后的密码
  • kubernetes资源对象--ingress
  • ​虚拟化系列介绍(十)
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • #Linux(帮助手册)
  • (ZT)一个美国文科博士的YardLife
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (转) ns2/nam与nam实现相关的文件
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .NET MVC、 WebAPI、 WebService【ws】、NVVM、WCF、Remoting
  • .NET 中各种混淆(Obfuscation)的含义、原理、实际效果和不同级别的差异(使用 SmartAssembly)
  • .netcore 如何获取系统中所有session_ASP.NET Core如何解决分布式Session一致性问题
  • ::前边啥也没有
  • @JsonSerialize注解的使用
  • @select 怎么写存储过程_你知道select语句和update语句分别是怎么执行的吗?
  • [04]Web前端进阶—JS伪数组
  • [acm算法学习] 后缀数组SA
  • [CISCN2021 Quals]upload(PNG-IDAT块嵌入马)
  • [FUNC]判断窗口在哪一个屏幕上
  • [hdu2196]Computer树的直径
  • [hibernate]基本值类型映射之日期类型
  • [iOS]让Xcode 4.2生成的app支持老的iOS设备(armv6)
  • [JavaScript]_[初级]_[关于forof或者for...of循环语句的用法]
  • [leveldb] 2.open操作介绍