在云计算平台Openstack中利用GPU透传实现高性能计算

收稿日期:2016-10-10
作者简介:关昆仑(1984-),男,山西人,高级云计算开发工程师,硕士,主要研究方向:云计算、网络、docker 、容器、CI/CD 、DevOps 。
在云计算平台Openstack 中利用GPU 透传实现高性能计算
关昆仑
(北京大学信息科学技术学院,
北京100871)摘要:将GPU 高并发处理的优秀能力应用到云计算中,结合利用云计算的低成本和弹性扩展。文章主要讨论通过
VT-D 硬件技术以及KVM/QEMU 实现PCI 设备透传,在Openstack 开源云平台实现,从而在虚机里使用GPU ,可以获得几乎原生的性能。
关键词:GPU ;虚拟化;透传;云计算;QEMU/KVM 中图分类号:TP393
文献标识码:A
GPU Pass-through With KVM in the Openstack Solution鸡油
GUAN Kun-lun
(Information Technology Institute,Peking University ,Beijing 100871,China )
Abstract :As 3D rendering,scientific computing and large data fields on the requirements of high-performance computing,The concurrent processing capacity of GPU catch more and more attention and promotion of the industry.At the same time as the popularity of cloud computing,its low-cost and flexible expansion is also sought after by the enterprise and individual users.So how to use of low-cost cloud computing and high-performance GPU in combination has become a very high scientific and commercial value.This paper mainly discusses the use of VT-D hardware technology and KVM /QEMU PCI device pass-through so as to use GPU in the virtual machine.Key words:GPU;virtualization;passthrough;cloud computing;QEMU/KVM
由于3D 渲染,金融模型,科学计算以及大数据等领域对高性能计算的要求,GPU 的并发处理能力越来越受到行业的重视和推广。
同时由于云计算的普及,云计算的低成本和弹性扩展也越来越受到企业或普通用
户的青睐。那么怎么将GPU 应用到云计算中,同时利用云计算的低成本和GPU 的高性能就成为一个具有
非常高的科研和商业价值的结合点。本论文主要讨论通过VT-D 硬件技术以及KVM/QEMU 实现PCI 设备透传,从而在虚机里使用GPU 。虚机使用透传GPU ,可以获得设备几乎原生的性能。
1需求
(Requirement )功能需求:一方面将物理主机的GPU 进行透传,
使得可以轻松在虚拟机里面使用GPU ,虚机只要安装相应的GPU 驱动,就可以像普通PC 一样使用GPU 设备;另一方面能够对GPU 设备进行完整生命周期管理,包括探测,过滤,使用,
榆林杀人案
释放,移除。探测指的是GPU 插上物理主机以后,可以被系统自动识别;过滤指的是只选择感兴趣的GPU 设备,对于其它PCI 设备,能够被自动滤除,这里可以选择白名单策略,后文半干法脱硫
有详述;创建带有GPU 的虚拟机后,这个GPU 会被独占,其它VM 或物理机不能使用;直到虚机删除,这个GPU 设备才能被其它虚机使用;
另外也可以物理移除GPU 设备,如果这个GPU 正被使用,会报错处理;如果不被使用,可以正确移除。
硬件需求:物理机的CPU 需要支持VT-D ,详细可以参照附件参考文献[7];主板的北桥芯片也需要支持
透传;BIOS 有设置选项,能够允许打开透传功能。操作系统要求支持vfio ,可以加载vfio 和vfio-pci 模块。
2设计
(Design )2.1底层设计(Low-level Design)
QEMU/KVM GPU 透传主要有两种方式。
一种是传
电脑与信息技术2016年12月
统的pci-assign 方式,将KVM 主机上的一个PCI 设备,譬如GPU ,直接分配给一个虚机。另一个种
是VFIO 方式,VFIO 是一套用户态驱动框架,它向用户态开放了IOMMU 接口,能完全在用户态配置IOMMU ,将DMA 地址空间映射进而限制在进程虚拟地址空间之内。VFIO 可以用于实现高效的用户态驱动,在虚拟化场景可以用于PCI 设备透传。通过用户态配置IOMMU 接口,可以将DMA 地址空间映射限制在进程虚拟空间中,这对高性能驱动和虚拟化场景device
八数码问题
passthrough 尤其重要。相对于传统方式,VFIO 对UEFI 支持更好。VFIO 技术实现了用户空间直接访问设备。
无须root 特权,更安全,功能更多。本文主要讨论VFIO 方式。配置VFIO 需要linux 内核在3.6以上,且须配置
甘氨酸乙酯VFIO 相关模块。GPU 透传模型如图1所示。在透传前,需要在物理主机的BIOS 里打开VT-D 选项,并在linux 操作系统的启动参数加入intel_iom-mu=on 。
图1GPU 透传模型
2.2顶层设计
(High-level design )Openstack 是当前最为主要的开源云社区,
同时也是一套分布式的云计算操作系统,实现对虚机的全生命周期管理。本文主要讨论在Openstack 框架下实现GPU 设备的分配,声明以及释放。Openstack nova 各组件交互模型如图2所示。
图2Openstack nova 各组件交互模型
流程解释:
(1)Nova API 服务接受外部创建虚机请求,可以将创建带有GPU 的虚机请求在这里传入;这里可以选择使用nova flavor 来作为对GPU 型号的选择,
也可以用scheduler hint ,本实现用scheduler hint 。
(2)消息对列是nova 各组件的内部交互通道。可以通过cast 或call 的方式来实现广播或者单播。(3)Nova scheduler 服务负责周期性地汇总各compute 节点的最新虚拟化资源信息,如内存,CPU ,GPU 等,并将结果通过Conductor 保存到数据库中;另外还要负责将nova api 中请求调度到合适的compute 节点信息,这个过程会通过按照虚机的规格对各计算节点进行过滤、排序,从而选择一个最适合的物理计算节点。
(4)Nova compute 服务负责调用hypervisor 层,这里指libvirt ,周期性地收集本计算节点虚拟化信息,并上报给nova scheduler 服务;另外负责具体创建虚机的工作,这里也是GPU 透传的真正实现地方。
(5)接到创建虚机的请求后,nova compute 服务调
用libvirt ,而libvirt 又调用QEMU/KVM ,最后通过vfio 模块来对GPU 设备进行管理。
(6)Nova conductor 负责一些协调工作,并将一些状态信息持久化到nova 的database 中。2.3数据库设计
下面只列出最关键的PCI 表和PCI_White_List 表,
见表1、表2。表1PCI 表
表2PCI_White_List 表
2.4GPU 设备管理(Device management)
GPU 设备从插入物理主机到被检测到,
以及被
虚Field
Type description id
varchar(36)唯一标识compute_node_id
Int(11)compute 节点Id address varchar(12)设备地址product_id varchar(4)设备产品Id vendor_id varchar(4)设备vendor id dev_type varchar(8)type-PCI/VF/PF dev_id varchar(255)status varchar(36)
discovered/attached 等extra_info text PCI 设备的其它信息
label varchar(255)标签request_id varchar(36)请求Id instance_uuid varchar(36)VM Id Created_at datetime 创建时间Updated_at datetime 更新时间Deleted_at
datetime
删除时间
Field Type description id varchar(36)唯一标识name varchar(45)产品名description
varchar(45)产品描述product_id varchar(4)设备产品Id vendor_id varchar(4)设备vendor id is_gpu
tinyint(1)
是否是GPU
·12·
第24卷第6期
机使用、释放的全过程中会呈现出不同的状态,由于GPU透传是独占模式,一个GPU只能同时被一个VM 使用,除非虚机被删除或者GPU被移除(或被白名单过滤)。
潜意识音乐疗法图3PCI设备生命周期
状态图解释:
PCI设备生命周期如图3所示
(1)图中【1】为GPU刚插入宿主物理机;
(2)nova-compute节点有定期check机制,插入的GPU会在设定的间隔时间内被探测出来,此时GPU会转化为状态【2】
(3)由于QEMU/KVM会对所有的PCI设备进行探测,而我们只对GPU设备感兴趣,所以设置了白名单策略,从而只有指定vendor ID和product ID的PCI 设备(所有识别的PCI设备都会有vendor id和product id)会被过滤出来。这个时候识别出来的GPU会被nova-compute收集,并发送给nova-scheduler存入到数据库,作为后续状态的跟踪
(4)如果GPU没有被分配或拔除,会一直处于(3)状态。如果这时有创建带GPU的虚机需求,no-va-scheduler就会做一系列filtering和weighting的工作,如果恰好这个GPU被选中,nova-conductor就会调度GPU所在物理机,对资源进行claim,这时GPU会进入claimed(4)的状态
(5)如果vm创建成功,GPU就会进入allocated(5)状态
(6)如果删除虚拟机,GPU资源会被释放,GPU重新进入available状态
另外,图中A,B,C操作为【移除设备】或【从设备白名单】移除,其中B,C操作会产生错误警告信息。从被从插入物理机到拔出的整个生命周期,会被周期任务探测,并将状态上报至nova数据库。
设备白名单可以由用户输入并保存至数据库,各compute节点周期性地从数据库取出白名单,以实现白名单更新。2.5使用(Usage)
为了实现GPU选择与虚机创建规格的脱离,我们用scheduler hint来创建虚机,最后执行命令创建虚机:nova boot--flavor<flavor-id>--image<image-name>--nic net-id<net-id>--hint"pci_passthrough:alias"="<device-name>: <device-count>"
例如:
no va boot--flavor1--image centos7-x64--nic net-id="db ed3a91-92c2-402f-ae25-c04893273bc6"--hint"pci_passthrough: alias"="nvidia:1"k1
创建好带有GPU的虚机后,如果是linux系统,可以用lspci查询,譬如NVIDIA GPU
root#lspci-nn|grep-i nvi
root#05:00.03D controller[0302]:NVIDIA Corporation Device [10de:13f2](rev a1)
如果是Windows系统,可以在设备管理器查看,并安装相应驱动。
3结论(Conclusion)
通过在虚拟机使用透传的GPU,可以显著提高某些浮点运算和并发运算的性能。另外通过对Openstack 二次开发,使得对带有GPU的虚机进行方便的全生命周期管理,从而可以将GPU的高性能与云计算的高效便捷完美结合。
参考文献:
[1]openstack官方wiki[EB/OL]./wik-
i/Pci_passthrough.
[2]How to assign devices with VT-d in KVM[EB/OL].www.lin-
com/documentation/en-US/Red_Hat_Enterprise_Linux/5/html /Virtualization/chap-Virtualization-PCI_passthrough.html#sect
-Virtualization-PCI_passthrough-AI_device_to_a_host.
[4]Guest virtual machine device configuration[EB/OL].ac-
_virtual_machine_device_configuration.html.
[5]libvirt[EB/OL]./formatdomain.
html#elementsCharHost.
[6]任永杰,单海涛.KVM虚拟化技术:实战与原理解析[M].北
京:机械工业出版社,2013:140-176.
[7]Intel?Virtualization Technology for Directed I/O(VT-d)
[EB/OL].ark.intel/search/advanced/?s=t&VTD=true.
[8]肖力,汪爱伟,杨俊俊,等.深度实践KVM:核心技术、管理
运维、性能优化与项目实施[M].北京:机械工业出版社,
2015:36-38,71-74.
关昆仑:在云计算平台Openstack中利用GPU透传实现高性能计算·13·

本文发布于:2024-09-23 13:19:40,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/613787.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:设备   计算   虚机   透传   实现   创建   节点   使用
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议