zoukankan      html  css  js  c++  java
  • 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)更新相应依赖子模块(这步需要翻墙)
    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整合了,至于方法有兴趣大家可自行研究。

  • 相关阅读:
    Win7+Ubuntu11.10(EasyBCD硬盘安装)
    hdu 3661 Assignments
    hdu 1128 Self Numbers
    CF 152 B. Chilly Willy
    hdu 1754 I Hate It
    A survey of wireless network simulation and/or emulation software for use in higher education
    How to Fix Packet Loss: Causes, Simple Solutions & Top Tools
    getchar函数
    C++“左值”和“右值”
    stdio.h中的stdio
  • 原文地址:https://www.cnblogs.com/ruiy/p/8872065.html
Copyright © 2011-2022 走看看