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整合了,至于方法有兴趣大家可自行研究。

kvmgt-kernel 实现GPU虚拟化的更多相关文章

  1. HP “云图”GPU虚拟化工作站解决方案

    HP PCS ”云图”GPU虚拟化工作站解决方案 ——将图形计算从桌面移到数据中心 惠普云图形GPU虚拟化桌面系统是以用户为中心的私有云服务.除了保留了传统桌面虚拟化方案以集中设备为中心统一管理等优点 ...

  2. GPU虚拟化技术详解

    GPU虚拟化技术详解 GPU英文名称为Graphic Processing Unit,GPU中文全称为计算机图形处理器,1999年由NVIDIA公司提出. 一.GPU概述 GPU这一概念也是相对于计算 ...

  3. 英伟达GPU虚拟化---申请英伟达测试License

    此文基于全新的License 2.0系统,针对vGPU License的试用申请以及软件下载和License管理进行了详细的说明,方便今后我们申请测试License,快速验证GPU的功能. 试用步骤: ...

  4. GPU 硬件虚拟化Hardware Virtualization

    GPU 硬件虚拟化Hardware Virtualization 1. Principles 一个物理GPU可以虚拟化为多个vGPUs.VMs可以绑定到vGPUs以直接访问一些物理GPU资源. 2. ...

  5. OpenStack 企业私有云的若干需求(1):Nova 虚机支持 GPU

    本系列会介绍OpenStack 企业私有云的几个需求: 自动扩展(Auto-scaling)支持 多租户和租户隔离 (multi-tenancy and tenancy isolation) 混合云( ...

  6. OpenStack企业私有云新需求(1):Nova 虚机支持 GPU

    作者:Sammy Liu 刘世民 本系列会介绍OpenStack 企业私有云的几个需求: GPU 支持 自动扩展(Auto-scaling)支持 混合云(Hybrid cloud)支持 物理机(Bar ...

  7. 计算机组成原理 — GPU 图形处理器

    目录 文章目录 目录 显卡 GPU GPU 与深度学习 GPU 与 CPU 体系结构的区别 GPU 显存与 CPU 主存的区别 GPU 与 CPU 之间的数据交互方式 GPU 的体系结构 GPU 的工 ...

  8. GPU keylogger && GPU Based rootkit(Jellyfish rootkit)

    catalog . OpenCL . Linux DMA(Direct Memory Access) . GPU rootkit PoC by Team Jellyfish . GPU keylogg ...

  9. supervessel-免费云镜像︱GPU加速的Caffe深度学习开发环境

    开发环境介绍 在SuperVessel云上,我们为大家免费提供当前火热的caffe深度学习开发环境.SuperVessel的Caffe有如下优点: 1) 免去了繁琐的Caffe环境的安装配置,即申请即 ...

随机推荐

  1. 雷林鹏分享:Ruby XML, XSLT 和 XPath 教程

    Ruby XML, XSLT 和 XPath 教程 什么是 XML ? XML 指可扩展标记语言(eXtensible Markup Language). 可扩展标记语言,标准通用标记语言的子集,一种 ...

  2. 2-14-2 MySQL数据类型

    MySQL数据类型: 对数据进行分类,针对不同分类进行不同的处理. 1. 使系统能够根据数据类型来操作数据. 2. 预防数据运算时出错. 3. 更有效的利用空间. 数据分类,可以使用最少的存储,来存放 ...

  3. Hive之序列化与反序列化(SerDe)

    序列化与反序列化的作用 1,序列化是对象转化为字节序列的过程: 2,反序列化是字节码恢复为对象的过程: 序列化的作用主要有两个: (1),对象向的持久化:即把对象转换成字节码后保存文件: (2),对象 ...

  4. Netty自定义Encoder/Decoder进行对象传递

    转载:http://blog.csdn.net/top_code/article/details/50901623 在上一篇文章中,我们使用Netty4本身自带的ObjectDecoder,Objec ...

  5. web 常用富文本编辑器

    1. 百度家的 UEditor  官网地址http://ueditor.baidu.com/website/;在线演示地址:http://ueditor.baidu.com/website/onlin ...

  6. R语言rJava包安装载入及JAVA环境配置

    rJava 包的安装与载入 一般文本分词的教程都会贴出: install.packages("rJava") library(rJava) 来引导我们装载rJava包,运行inst ...

  7. 分析hello.java文件

    使用JavaServer Faces技术的Web模块示例 1.hello1: hello1应用程序是一个web模块,它使用JavaServer Faces技术来显示问候和响应.可以使用文本编辑器查看应 ...

  8. Memcached工作原理及常见问题

    memcached是怎么工作的? Memcached的神奇来自两阶段哈希(two-stage hash).Memcached就像一个巨大的.存储了很多<key,value>对的哈希表.通过 ...

  9. 活字格企业Web应用生成器荣获"2017年度优秀软件产品"

    日前,中国软件行业协会权威发布"2017年度优秀软件产品"名单,活字格企业 Web 应用生成器凭借产品的独特优势,和近年来在企业Web应用方面的杰出贡献,位列其中,受到用户和行业专 ...

  10. c++的关联容器入门(map and set)

    目录 std::map std::set C++的关联容器主要是两大类map和set 我们知道谈到C++容器时,我们会说到 顺序容器(Sequence containers),关联容器(Associa ...