天马行空云计算系列一介绍了总体抽象视图,本篇展开Hardware&Hypervisor 介绍。如下是介绍大纲:

本篇将基于上述架构从如下方面介绍说明

Linux设备驱动

因为上述提到的一些硬件资源如GPU等,所以先介绍下操作系统是如何管理硬件的。

操作系统是个中军统帅,允许各种硬件往上集成,那么自然的其需要可以发号军令的权利。所以Linux内核为了管理各种硬件设备,制定了一套软件体系(驱动模型)。各种硬件基于驱动模型提供驱动程序,以被调遣使用。实际就是操作系统指定了一套接口,各硬件去实现这套接口即可。(面向对象的多态)。然而硬件厂商发现这个接口的实现实在过于复杂,成本很高,所以操作系统就提供了一套模型驱动的东东,内核抽象了模型如字符,块,网络 设备等概念,然后将设备的电源管理,热插拔,生命周期等基于这套统一模型实现了,然后对硬件说,好了,你基于这套模型实现你的接口吧。相当于面向对象语言中操作系统内核提供了几个父抽象类,各硬件驱动就是继承类。 设备驱动模型的目的是简化驱动开发。

故而什么是驱动?可以理解为操作系统内核为了使能硬件设备所指定的一套软件标准,而硬件厂商遵守这套标准实现具体的东东。

GPU

GPU详见百科。几个关键信息:

  1. 显卡的心脏:GPU
  2. 专为执行复杂的数学和几何计算而设计。
  3. GPU将CPU从图形处理任务解放出来,使得CPU聚焦执行系统任务,提升计算机整体性能。
  4. GPU散热大,需要安装散热器或风扇等

GPU 与 CPU 性能比较

理解 GPU 和 CPU 之间区别的一种简单方式是比较它们如何处理任务。CPU 由专为顺序串行处理而优化的几个核心组成,而 GPU 则拥有一个由数以千计的更小、更高效的核心(专为同时处理多重任务而设计)组成的大规模并行计算架构。

如下为Navida的Tesla 系列的性能测试数据,可对比CPU的性能:

每个 GPU 可带来 47 TOPS(万亿次运算/秒)的推理性能和 INT8 运算能力,使得一台配备 8 个 Tesla P40 的 服务器可提供相当于超过 140 台 CPU 服务器的性能。 随着模型的准确性和复杂性越来越高,CPU 已经无法再提供互动用户体验。Tesla P40 可在 极其复杂的模型中实现实时响应,能够降低延迟,将性能提升为 CPU 的 30 倍以上。

研发制造商

Intel

英特尔的GPU基本为集成显卡芯片,用于英特尔的主板和英特尔的CPU

唯一的独显芯片:Intel 740,其它均为集成到CPU或者芯片组

NAVIDA

最大的独显芯片生产销售商

移动设备:Tegra

超级计算:Tesla

Quadro

AMD

世界第二大独立显卡芯片生产销售商

FirePro系列

Matrox

与Navida,AMD主打3D领域,Matrox当前是聚焦于工程专用领域的2D:CAD方面显卡芯片。

关于GPU的使用场景与优势详见:https://www.nvidia.cn/page/home.html

Linux相关配置使用

1:GPU生产厂商提供了对应的Linux驱动以及相关的管理库,例如Navida。可以通过nvida-smi指令来监视GPU的信息

2:查看服务器的设备硬件的标准指令:lspci 。例如lspci | grep -i vga 查看是否存在GPU。

特定厂商的硬件设备,需要从其官网下载操作系统的驱动程序,这样操作系统这个大介质才能使能GPU硬件。

GPU虚拟化

http://www.cnblogs.com/sammyliu/p/5179414.html 这篇文章讲解的真是透彻,本人就不搬砖了。

总结下几点:

  1. 远端API方法:性能损耗严重
  2. GPU设备仿真:需要在Guest客户机中提供仿真程序,转发到Hypervisor上物理GPU调用
  3. PaaS-through透传:一对一,一对多(中介):透传技术能带来几乎和物理设备同等的性能,但是它也带来了一些局限性。设备透传带来的一个问题体现在实时迁移方面。实时迁移 是指一个 VM 在迁移到一个新的物理主机期间暂停迁移,然后又继续迁移,该 VM 在这个时间点上重新启动
  4. 全虚拟化,每个虚拟机拥有一个虚拟的GPU实例,多个虚拟机共享一个物理GPU。

上述博文作者写作时间较早,截止当前补充下GPU在KVM虚拟化场景下的支持进展

Linux4.10内核中对VFIO添加了Mediated Device(vfio-mdev) Interface,用来支持Intel GVT-g, NVIDIA vGPU,并提供统一的框架。具体作用为通过软件调度的方式在Host与Guest之间提供一个中间的mediated device来允许Guest虚拟机访问Host中的物理GPU。

VFIO:VFIO是一套用户态驱动框架,可用于编写高效用户态驱动;在虚拟化情景下,亦可用来在用户态实现device passthrough。通过VFIO访问硬件并无新意,VFIO可贵之处在于第一次向用户态开放了IOMMU接口,能完全在用户态配置IOMMU,将DMA地址空间映射进而限制在进程虚拟地址空间之内。这对高性能用户态驱动以及在用户态实现device passthrough意义重大

  • 向用户态提供访问硬件设备的接口。
  • 向用户态提供配置IOMMU的接口

VFIO由平台无关的接口层与平台相关的实现层组成。接口层将服务抽象为IOCTL命令,规化操作流程,定义通用数据结构,与用户态交互。实现层完成承诺的服务。据此,可在用户态实现支持DMA操作的高性能驱动。在虚拟化场景中,亦可借此完全在用户态实现device passthrough。

而AMD也与今年发布了KVM MxGPU虚拟化方案。

关于KVM支持GPU虚拟化的详细介绍:

http://www.linux-kvm.org/images/5/59/02x03-Neo_Jia_and_Kirti_Wankhede-vGPU_on_KVM-A_VFIO_based_Framework.pdf

Libvirt-GPU虚拟化使用。

由上文可知,KVM虚拟化是已经支持了vGPU,根据本篇开始的引导架构图,上层使用时通过libvirt抽象层的(事实上Hypervisor的标准化接口)。那么libvirt是否支持和如何使用呢?

Libvirt支持和使用详见:

https://www.redhat.com/archives/libvir-list/2016-August/msg00939.html

  1. 发现设备。GPU设备在初始化的时候,其驱动会注册到media框架。mdev_supported_types类型的系统文件才会可用。Libvirt会查询此文件。
2.     创建和销毁设备
3.     启动和停止设备
4.     启动QEMU/VM
5.     -device vfio-pci,sysfsdev=/sys/bus/mdev/devices/$mdev_UUID,id=vgpu0
6.     Shutdown sequence
7.     VM Reset
8.     热插拔

天马行空云计算(二)-Hardware&Hypervisor介绍的更多相关文章

  1. Kylin系列之二:原理介绍

    Kylin系列之二:原理介绍 2018年4月15日 15:52 因何而生 Kylin和hive的区别 1. hive主要是离线分析平台,适用于已经有成熟的报表体系,每天只要定时运行即可. 2. Kyl ...

  2. {python之协程}一 引子 二 协程介绍 三 Greenlet 四 Gevent介绍 五 Gevent之同步与异步 六 Gevent之应用举例一 七 Gevent之应用举例二

    python之协程 阅读目录 一 引子 二 协程介绍 三 Greenlet 四 Gevent介绍 五 Gevent之同步与异步 六 Gevent之应用举例一 七 Gevent之应用举例二 一 引子 本 ...

  3. 二、redis介绍

    二.redis介绍 2.1.定义 Redis(Remote Dictionary Server ,远程字典服务) 是一个使用ANSI C编写的开源.支持网络.基于内存.可选持久性的键值对存储数据库,是 ...

  4. nova系列二:kvm介绍

    一 什么是kvm KVM 全称 Kernel-Based Virtual Machine.也就是说 KVM 是基于 Linux 内核实现的,这就使得linux内核本身就相当于一个Hypervisor. ...

  5. Linux音频编程(二)声卡介绍

    一.声卡 1.声卡是audio interface,它含有hardware buffer,而这个hardware buffer是在声卡里面,不是内存.声卡的缓存是环状的,则ALSA中是将数据分成连续的 ...

  6. 二、python介绍

    python第一篇-------python介绍 一.python介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,Guido开始写Python语 ...

  7. paper 5:支持向量机系列二: Support Vector —— 介绍支持向量机目标函数的 dual 优化推导,并得出“支持向量”的概念。

    paper 4中介绍了支持向量机,结果说到 Maximum Margin Classifier ,到最后都没有说“支持向量”到底是什么东西.不妨回忆一下上次最后一张图: 可以看到两个支撑着中间的 ga ...

  8. R语言实现︱局部敏感哈希算法(LSH)解决文本机械相似性的问题(二,textreuse介绍)

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 上一篇(R语言实现︱局部敏感哈希算法(LSH) ...

  9. C++11 并发指南四(<future> 详解二 std::packaged_task 介绍)

    上一讲<C++11 并发指南四(<future> 详解一 std::promise 介绍)>主要介绍了 <future> 头文件中的 std::promise 类, ...

随机推荐

  1. 【CodeChef】Prime Distance On Tree

    vjudge 给定一棵边长都是\(1\)的树,求有多少条路径长度为质数 树上路径自然是点分治去搞,但是发现要求是长度为质数,总不能对每一个质数都判断一遍吧 自然是不行的,这个东西显然是一个卷积,我们合 ...

  2. 【openjudge】【字符串+模拟】1777:文件结构“图”

    [题目传送门:]戳 [描述:] 在计算机上看到文件系统的结构通常很有用.Microsoft Windows上面的"explorer"程序就是这样的一个例子.但是在有图形界面之前,没 ...

  3. Java常用的快捷键

    // // (1)Ctrl+Space // 说明:内容助理.提供对方法,变量,参数,javadoc等得提示, // 应运在多种场合,总之需要提示的时候可先按此快捷键. // 注:避免输入法的切换设置 ...

  4. ElasticSearch 通过nginx做HTTP验证

    在ElasticSearch 的设置文件中如果设置了 network.host: 0.0.0.0 则表示ElasticSearch 服务是公开的任何ip都可以访问ElasticSearch 服务.这样 ...

  5. ethers.js-1

    https://docs.ethers.io/ethers.js/html/ What is ethers.js The ethers.js library aims to be a complete ...

  6. C++成员函数指针的应用

     C++中,成员指针是最为复杂的语法结构.但在事件驱动和多线程应用中被广泛用于调用回叫函数.在多线程应用中,每个线程都通过指向成员函数的指针来调用该函数.在这样的应用中,如果不用成员指针,编程是非常困 ...

  7. Html+Css实现梯形选项卡

    1,先看一下效果图 2,梯形通过定位和设置Border来实现的,平行四边形通过旋转来实现的. 3,代码如下 (1)HTML代码 <html lang="en" xmlns=& ...

  8. 浅谈基于FormsAuthentication的认证

    一般情况下,在我们做访问权限管理的时候,会把用户的正确登录后的基本信息保存在Session中,以后用户每次请求页面或接口数据的时候,拿到 Session中存储的用户基本信息,查看比较他有没有登录和能否 ...

  9. 基于vue-cli的快速开发框架

    基于vue-cli的快速规范开发框架,已封装常用组件,可直接进行基本项目开发 1,遵循eslint规则,提升代码质量 2,集成mock模拟服务端数据,提升开发效率 3,集成vuex,可直接使用开发 4 ...

  10. 外部容器出现塌陷现象(伪类after、before的使用)

    伪类after.before的使用 ::before//伪元素 :hover//伪类 #all::after{ display:table; clear:both; content:"&qu ...