admin 管理员组

文章数量: 1086019


2024年3月26日发(作者:随机数生成器在线下载)

第246期

24

卷第6期

2016年12月

文章编号

员园园缘原员圆圆愿(圆园16)园6原园011原03

电脑与信息技术

悦燥皂责怎贼藻则葬灶凿陨灶枣燥则皂葬贼蚤燥灶栽藻糟澡灶燥造燥早赠

灾燥造援24晕燥援6

Dec援圆园16

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

关昆仑

北京

100871)(北京大学信息科学技术学院

摘要

将GPU高并发处理的优秀能力应用到云计算中,结合利用云计算的低成本和弹性扩展

。文章主要讨论通过

Openstack开源云平台实现,VT-D硬件技术以及KVM/QEMU实现PCI设备透传,从而在虚机里使用GPU,可以获

得几乎原生的性能

云计算;

关键词

GPU;虚拟化;透传

QEMU/KVM

中图分类号:TP393文献标识码:A

GPUPass-throughWithKVMintheOpenstackSolution

GUANKun-lun

渊InformationTechnologyInstitute,PekingUniversity袁Beijing100871,China冤

Abstract:As3Drendering,scientificcomputingandlargedatafieldsontherequirementsofhigh-performance

computing,TheconcurrentprocessingcapacityofGPUcatchmoreandmoreattentionandpromotionoftheindustry.

Atthesametimeasthepopularityofcloudcomputing,itslow-costandflexibleexpansionisalsosoughtafterbythe

ouseoflow-costcloudcomputingandhigh-performanceGPUin

permainlydiscussestheuseofVT-D

hardwaretechnologyandKVM/QEMUPCIdevicepass-throughsoastouseGPUinthevirtualmachine.

Keywords:GPU;virtualization;passthrough;cloudcomputing;QEMU/KVM

由于3D渲染,金融模型,科学计算以及大数据等

领域对高性能计算的要求

GPU的并发处理能力越来

同时由于云计算的普及,云

越受到行业的重视和推广。

计算的低成本和弹性扩展也越来越受到企业或普通用

同时利

户的青睐。

那么怎么将

GPU应用到云计算中,

用云计算的低成本和GPU的高性能就成为一个具有

非常高的科研和商业价值的结合点

。本论文主要讨论

通过VT-D硬件技术以及KVM/QEMU实现PCI设备

透传,从而在虚机里使用GPU。虚机使用透传GPU,可

以获得设备几乎原生的性能

过滤

GPU插上物理主机以后,可以被系统自动识别

指的是只选择感兴趣的GPU设备,对于其它PCI设

备,能够被自动滤除,这里可以选择白名单策略,后文

这个

GPU会被独有详述;创建带有GPU的虚拟机后

这个

占,其它VM或物理机不能使用;直到虚机删除

另外也可以物理移除

GPU设备才能被其它虚机使用;

如果

GPU设备,如果这个GPU正被使用,会报错处理

不被使用,可以正确移除

物理机的

CPU需要支持VT-D,硬件需求:详细可

以参照附件参考文献[7];主板的北桥芯片也需要支持

透传

BIOS有设置选项,能够允许打开透传功能

操作系统要求支持vfio,可以加载vfio和vfio-pci

模块

1

Requirement)需求

功能需求:一方面将物理主机的GPU进行透传

使得可以轻松在虚拟机里面使用GPU,虚机只要安装

相应的GPU驱动,就可以像普通PC一样使用GPU设

备;另一方面能够对GPU设备进行完整生命周期管

释放,移除。探测指的是

理,包括探测,过滤,使用,

2

Design)设计

一种是传

QEMU/KVMGPU透传主要有两种方式

2.1底层设计(Low-levelDesign)

收稿日期:2016-10-10

1984-)

硕士,主要研究方向:云计算、网络、

作者简介:关昆仑,男,山西人,高级云计算开发工程师

docker、容器

CI/CD、DevOps。

·12·电脑与信息技术

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-leveldesign)

Openstack是当前最为主要的开源云社区

,同时也

是一套分布式的云计算操作系统

,实现对虚机的全生

命周期管理。本文主要讨论在Openstack框架下实现

GPU设备的分配,声明以及释放

Openstacknova各组

件交互模型如图2所示

图2Openstacknova各组件交互模型

流程解释:

(1)NovaAPI服务接受外部创建虚机请求,可以将

创建带有GPU的虚机请求在这里传入;这里可以选择

使用novaflavor来作为对GPU型号的选择

,也可以用

schedulerhint,本实现用schedulerhint。

(2)消息对列是nova各组件的内部交互通道

。可

以通过cast或call的方式来实现广播或者单播

(3)Novascheduler服务负责周期性地汇总各

compute节点的最新虚拟化资源信息,

如内存,

CPU,

GPU等,并将结果通过Conductor保存到数据库中;

外还要负责将novaapi中请求调度到合适的compute

节点信息,这个过程会通过按照虚机的规格对各计算

节点进行过滤、排序,从而选择一个最适合的物理计算

节点

(4)Novacompute服务负责调用hypervisor层

,这

里指libvirt,周期性地收集本计算节点虚拟化信息,

上报给novascheduler服务;另外负责具体创建虚机的

工作,这里也是GPU透传的真正实现地方。

(5)接到创建虚机的请求后

novacompute服务调

用libvirt,

libvirt又调用QEMU/KVM,最后通过vfio

模块来对GPU设备进行管理

(6)Novaconductor负责一些协调工作,

并将一些

状态信息持久化到nova的database中。

2.3数据库设计

下面只列出最关键的PCI表和PCI_White_List

表,

见表

1、

2。

表1PCI表

FieldTypedescription

idvarchar(36)唯一标识

compute_node_idInt(11)compute节点Id

addressvarchar(12)设备地址

product_idvarchar(4)设备产品Id

vendor_idvarchar(4)设备vendorid

dev_typevarchar(8)type-PCI/VF/PF

dev_idvarchar(255)

statusvarchar(36)discovered/attached等

extra_infotextPCI设备的其它信息

labelvarchar(255)标签

request_idvarchar(36)请求Id

instance_uuidvarchar(36)VMId

Created_atdatetime创建时间

Updated_atdatetime更新时间

Deleted_atdatetime删除时间

表2PCI_White_List表

FieldTypedescription

idvarchar(36)唯一标识

namevarchar(45)产品名

descriptionvarchar(45)产品描述

product_idvarchar(4)设备产品Id

vendor_idvarchar(4)设备vendorid

is_gputinyint(1)是否是GPU

2.4GPU设备管理(Devicemanagement)

GPU设备从插入物理主机到被检测到

,以及被虚

第24卷第6期

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

·13

·

机使用、释放的全过程中会呈现出不同的状态

,由于

GPU透传是独占模式

,一个

GPU只能同时被一个VM

使用,除非虚机被删除或者GPU被移除(或被白名单

过滤

)。

图3PCI设备生命周期

状态图解释

PCI设备生命周期如图3所示

(1)图中

1】为GPU刚插入宿主物理机

(2)nova-compute节点有定期check机制,插入的

GPU会在设定的间隔时间内被探测出来

,此时

GPU会

转化为状态

2】

(3)由于QEMU/KVM会对所有的PCI设备进行

探测,而我们只对GPU设备感兴趣,所以设置了白名

单策略,从而只有指定vendorID和productID的PCI

设备(所有识别的PCI设备都会有vendorid和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选择与虚机创建规格的脱离

,我们

用schedulerhint来创建虚机,最后执行命令创建虚机

novaboot--flavor--image--nic

net-id--hint"pci_passthrough:alias"=":

"

例如

novaboot--flavor1--imagecentos7-x64--nicnet-id="db

ed3a91-92c2-402f-ae25-c04893273bc6"--hint"pci_passthrough:

alias"="nvidia:1"k1

创建好带有GPU的虚机后

,如果是

linux系统

,可

以用lspci查询,

譬如

NVIDIAGPU

root#lspci-nn|grep-invi

root#05:00.03Dcontroller[0302]:NVIDIACorporationDevice

[10de:13f2](reva1)

如果是Windows系统,可以在设备管理器查看

,并

安装相应驱动。

3结论(Conclusion)

通过在虚拟机使用透传的GPU,可以显著提高某

些浮点运算和并发运算的性能

。另外通过对

Openstack

二次开发,使得对带有GPU的虚机进行方便的全生命

周期管理,从而可以将GPU的高性能与云计算的高效

便捷完美结合。

参考文献:

[1]openstack官方wiki[EB/OL]./wik-

i/Pci_passthrough.

[2]HowtoassigndeviceswithVT-dinKVM[EB/OL].-

/page/How_to_assign_devices_with_VT-d_in_KVM

[3]AddingaPCIdevicewithvirsh[EB/OL]..

com/documentation/en-US/Red_Hat_Enterprise_Linux/5/html

/Virtualization/chap-Virtualization-PCI_#sect

-Virtualization-PCI_passthrough-AI_device_to_a_host.

[4]Guestvirtualmachinedeviceconfiguration[EB/OL].ac-

/documentation/en-US/Red_Hat_Enterprise_

Linux/6/html/Virtualization_Administration_Guide/chap-Guest

_virtual_machine_device_.

[5]libvirt官网[EB/OL]./formatdomain.

html#elementsCharHost.

[6]任永杰,单海涛.KVM虚拟化技术:实战与原理解析[M].北

京:机械工业出版社

2013:140-176.

[7]Intel?VirtualizationTechnologyforDirectedI/O(VT-d)

[EB/OL]./search/advanced/?s=t&VTD=true.

[8]肖力,汪爱伟

,杨俊俊,等

.深度实践KVM:核心技术

、管理

运维、性能优化与项目实施[M].北京:机械工业出版社

2015:36-38,71-74.


本文标签: 设备 虚机 计算 透传 实现