阿里云郑晓:浅谈GPU虚拟化技术(第三章)

本文涉及的产品
云服务器 ECS,每月免费额度280元 3个月
云服务器ECS,u1 2核4GB 1个月
简介: 本系列文章推送门: 阿里云郑晓:浅谈GPU虚拟化技术(第一章) GPU虚拟化发展史 阿里云郑晓:浅谈GPU虚拟化技术(第二章)GPU虚拟化方案之——GPU直通模式  今天一个小伙伴@我说:“你浅谈一下,没点技术背景的,估计都看不懂…”,醍醐灌顶啊,面向公众的文章不是学术论文,应以普及基本概念为主。

本系列文章推送门:

阿里云郑晓:浅谈GPU虚拟化技术(第一章) GPU虚拟化发展史 
阿里云郑晓:浅谈GPU虚拟化技术(第二章)GPU虚拟化方案之——GPU直通模式
今天一个小伙伴@我说:“你浅谈一下,没点技术背景的,估计都看不懂…”,醍醐灌顶啊,面向公众的文章不是学术论文,应以普及基本概念为主。所以我决定在接下来的文章力求写的让吃瓜群众能看懂,专业人士能读完也会有很大感触和启迪。至于技术细节,大致就忽略不提了。


第三章 浅谈GPU虚拟化技术(三)GPU SRIOV及vGPU调度

GPU SRIOV原理

谈起GPU SRIOV那么这个世界上就只有两款产品:S7150和MI25。都出自AMD,当然AMD的产品规划应该是早已安排到几年以后了,未来将看到更多的GPU SRIOV产品的升级换代。S7150针对的是图形渲染的客户群体,而MI25则针对机器学习,AI的用户群体。本文以围绕S7150为主。因为S7150的SRIOV实例在各大公有云市场上都有售卖,而MI25目前看来尚未普及(受限于AMD ROCm生态环境的完备性)。

  • 两个术语:SRIOV的PF,VF

(专业人士请自动忽略这部分介绍

PF:宿主机上的主设备,宿主机上的GPU驱动安装在PF上。PF的驱动是管理者。它就是一个完备的设备驱动,与一般的GPU驱动的区别在于它管理了所有VF设备的生命和调度周期。比如下图的07:00.0便是PF设备

VF:也是一个PCI设备,如下图中的07:02.0和07:02.1。QEMU在启动过程中通过VFIO模块把VF 作为PCI直通设备交由虚拟机,而虚拟机上的操作系统会安装相应的驱动到这个直通的VF PCI 设备上(07:02.0)。VF设备占用了部分GPU资源。比如下图中一个PF上面划分出了两个VF,那么很有可能跑在VF上面的虚拟机GPU图形渲染性能宏观上是PF的1/2。


上图是一个带有4个S7150的服务器,并且每个S7150 SRIOV虚拟出2个vGPU。

  • GPU SRIOV的本质

SRIOV的本质是把一个PCI卡资源(PF)拆分成多个小份(VF),这些VF依然是符合PCI规范的endpoint设备。由于VF都带有自己的Bus/Slot/Function号,IOMMU/VTD在收到这些VF的DMA请求的过程中可以顺利查找IOMMU2ndTranslation Table从而实现GPA到HPA的地址转换。这一点与GVT-g和Nvidia的GRID vGPU有本质上的区别。GVT-g与Nvidia GRID vGPU并不依赖IOMMU。其分片虚拟化的方案是在宿主机端实现地址转换和安全检查。应该说安全性上SRIOV方法要优于GVT-g和GRID vGPU,因为SRIOV多了一层IOMMU的地址访问保护。SRIOV代价就是性能上大概有5%左右的损失(当然mdev分片虚拟化的MMIO trap的代价更大)。由于SRIOV的优越性和其安全性,不排除后续其他GPU厂商也会推出GPU SRIOV的方案。

  • 关于SRIOV 更多的思考

SRIOV也有其不利的地方比如在Scalable的方面没有优势。尤其是GPU SRIOV,我们看到的最多可以开启到16个VM。设想如果有客户想要几百个VM,并都想要带有GPU图形处理能力(但是每个VM对图形渲染的要求都很低),那么SRIOV的方案就不适用了。如果有一种新的方案可以让一个GPU的资源在更小的维度上细分那就完美了。事实上业界已经有这方面的考虑并付诸实践了。

GPU SRIOV内部功能模块

(吃瓜群众可以跳过)

由于没有GPU SRIOV HW的spec与Data Sheet,我们仅能按照一般的常用的方式来猜测GPU SRIOV内部功能模块(纯属虚构,如有雷同概不负责)。



GPU的资源管理涉及到vGPU基本上三块内容是一定会有的:Display,安全检查,资源调度。

  • Display管理

GPU PF需要管理分配给某个VF的FrameBuffer大小,以及管理Display相关的虚拟化。Display的虚拟化一般分为Local Display和Remote Display。比如XenClient就是用的Display Local Virtualization,属于本地虚拟化过程。此过程相当于把显示器硬件单元完全交由当前虚拟机控制。在云计算行业,Display更多的是采用Remote Display的方式。我们后续会讲到行业中Remote Display的问题所在。

  • VF 安全检查

GPU PF或者GPU SRIOV模块需要承担一部分的VF的地址审核(Address Audit)和安全检查,GPU SRIOV的硬件逻辑会保证暴露出的VF Register List并确保不包含特权Register信息,比如针对GPU微处理器和FW的Registers操作,针对电源管理部分的Registers也不会导出到VF中。而VM对所有VF的MMIO读写最终会映射到PF的MMIO地址空间上,并在PF的类似微处理器等地方实现VF设备的部分MMIO模拟。

另外一部分的安全检查则是PF需要确保不同VF直接对GPU FrameBuffer的访问隔离。这部分很有可能需要PF针对不同的VF建立GPU的Pagetable,或者Screen所有的VF提交的GPU BatchBuffer。

  • VF调度

AMD GPU SRIOV从硬件的角度看就是一个对GPU资源的分时复用的过程。因此其运行方式也是与GPU分片虚拟化类似。SRIOV的调度信息后续重点介绍。

GPU SRIOV的调度系统

  • 分时复用

VF的调度是GPU虚拟化中的重点,涉及到如何服务VM,和如何确保GPU资源的公平分片。 


GPU SRIOV也是一个分时复用的策略。GPU分时复用与CPU在进程间的分时复用是一样的概念。一个简单的调度就是把一个GPU的时间按照特定时间段分片,每个VM拿到特定的时间片。在这些时间片段中,这个VM享用GPU的硬件的全部资源。目前所有的GPU虚拟化方案都是采用了分时复用的方法。但不同的GPU虚拟化方案在时间片的切片中会采用不同的方法。有些方案会在一个GPU Context的当前BatchBuffer/CMDBuffer 执行结束之后启动调度,并把GPU交由下一个时间片的所有者。而有些方案则会严格要求在特定时间片结束的时候切换,强行打断当前GPU的执行,并交予下一个时间片的所有者。这种方式确保GPU资源被平均分摊到不同VM。AMD的GPU SRIOV采用的后一种方式。后续我们会看到如何在一个客户机VM内部去窥探这些调度细节


  • 调度开销

然而GPU的调度不同于CPU的地方是GPU上下文的切换会天然的慢很多。一个CPU Core的进程切换在硬件的配合下或许在几个ns之内就完成了。而GPU则高达几百ns(比如0.2ms-0.5ms)。这带来的问题就是GPU调度不能类似CPU一样可以频繁的操作。举一个例子:GPU按照1ms的时间片做调度,那么其中每次调度0.5ms的时间花在了上下文的切换上,只有1ms的时间真正用于服务。GPU资源被极大浪费。客户理论上也只能拿到66%的GPU资源。


  • S7150的调度细节

接下来我们来看一下作为首款GPU SRIOV方案的S7150是如何调度的。由于S7150是中断驱动的结构,所以通过查看虚拟机内部GPU中断的分布情况就可大致判断出GPU SRIOV对这个虚拟机的调度策略。 


对于Windows的客户机,我们可以在内部安装Windows Performance kit,并检测"GPU activity"的活动。


对于Linux的客户机,则更简单,直接查看GPU驱动的trace event。当然我们要感谢AMD在提供给Linux内核的SRIOV VF驱动上没有去掉trace event。这让我们有机会可以在VM内部查看到SRIOV的调度细节。(不知道这算不算一种偷窥?)


我们在阿里云上随便开启一台GA1的1/2实例。

并选择Ubuntu(预装AMD驱动)作为系统镜像;

在Console下查看所有的GPU相关的trace如下表:


很不错,我们发现有两个GPU驱动分发workload的event:amd_sched_job与amd_sched_process_job。


在VNC中开启一个GPU Workload以后(比如Glxgears或者Glmark,当然我们需要先开启x11vnc),我们通过下面Command来采集GPU数据。

trace-cmd record –e gpu_sched

… 等待几秒中ctrl+c终止采集。

trace-cmd report > results.log

查看我们抓取这两个event的事件并记录下来几个有趣的瞬间:





所有的log在一段时间内是连续的,然后断开一段时间,然后又连续的workload提交。


截图上的小红框是我们需要关注的间隔时间。摘取如下表:

事件时间ns

间隔

 

1437.803888

1437.810159

6.271ms

无GPU活动

1437.816378

1437.822720

6.342ms

无GPU活动

1437.829105

1437.835127

6.022ms

无GPU活动

1437.841587

1437.847506

5.919ms

无GPU活动

很明显在上述时间窗口期内当前VM的GPU被暂停了,并被切换至服务其他VM。因此当前VM的GPU workload会积压在驱动层次。


我们把所有的event在图表上打点后就可以发现,对于一个1/2GPU实例的VM来说,它占用的GPU资源是基本上以6ms为时间片单位做切换的。

作图如下:


  • 估算vGPU的调度效率

我们假设每次vGPU的调度需要平均用到0.2ms,而调度的时间片段是6ms,而从上图的结果来看,AMD GPU SRIOV是采用严格时间片调度策略。6ms一旦时间用完,则马上切换至下一个VM(哪怕当前只有一个VM,也会被切走)。所以1/2实例的S7150的调度效率可以达到:96.7%如果有两个这样的VM同时满负荷运行,加起来的图形渲染能力可达到GPU直通虚拟化的96.7%以上。


实测结果如下:


1/2vGPU+ 1/2vGPU = 97.4% (vs GPU直通性能)


每一个vGPU可以达到直通GPU性能的48.x%,整体性能可以达到97.4%,与我们的预估非常接近。


更多的关于GPU虚拟化调度的思考

不得不说AMD S7150在vGPU调度上是非常成功的。AMD的GPU硬件设计保证了可以在任何当前GPU Batch Buffer的执行过程中可以被安全的抢占(GPU Workload Preemption),并切换上下文到一个新的Workload。有了这样卓越的硬件设计,才使得PF驱动在软件层面的调度算法可以如此从容有序。6ms强制调度保证了多VM在共享GPU资源的情况下不会饥饿不会过度占用。调度开销极小(2-3%)。而且这样的设计在VM数量不多的情况下可以进一步调整时间片的大小比如12ms,则GPU的利用率会更进一步提高。那么为什么不能采用100ms调度呢?因为Windows内核对"GPU activity"的活动有监视。任何GPU CMD在2秒内没有响应,Windows就会发起Timeout Detected Recover(TDR),重置GPU驱动。设想如果你有16个VM,调度时间片为100ms的情况下,平均一个VM轮转到GPU资源的最小间隔就有1.6s。加上其他由于PF驱动被Linux内核调度的延迟,很有可能触发Windows Guest内部的TDR。


不知不觉把GPU虚拟化的调度都在这章里讨论过了。很好,专门介绍GPU调度的章节可以省下来了

相关实践学习
基于阿里云DeepGPU实例,用AI画唯美国风少女
本实验基于阿里云DeepGPU实例,使用aiacctorch加速stable-diffusion-webui,用AI画唯美国风少女,可提升性能至高至原性能的2.6倍。
目录
相关文章
|
2月前
|
人工智能 机器人 Serverless
魔搭大模型一键部署到阿里云函数计算,GPU 闲置计费功能可大幅降低开销
魔搭大模型一键部署到阿里云函数计算,GPU 闲置计费功能可大幅降低开销
555 1
|
3月前
|
机器学习/深度学习 存储 弹性计算
阿里云GPU云服务器有哪些版本
阿里云GPU云服务器有哪些版本
|
10天前
|
存储 机器学习/深度学习 并行计算
阿里云服务器X86计算、Arm计算、GPU/FPGA/ASIC、高性能计算架构区别
在我们选购阿里云服务器的时候,云服务器架构有X86计算、ARM计算、GPU/FPGA/ASIC、弹性裸金属服务器、高性能计算可选,有的用户并不清楚他们之间有何区别,本文主要简单介绍下不同类型的云服务器有何不同,主要特点及适用场景有哪些。
阿里云服务器X86计算、Arm计算、GPU/FPGA/ASIC、高性能计算架构区别
|
26天前
|
机器学习/深度学习 存储 弹性计算
阿里云GPU服务器价格多少钱?2024年阿里云GPU服务器价格配置及性能测评
2024年阿里云GPU服务器是一款高性能的计算服务器,基于GPU应用的计算服务,多适用于视频解码、图形渲染、深度学习、科学计算等应用场景。阿里云GPU服务器具有超强的计算能力、网络性能出色、购买方式灵活、高性能实例存储等特点。 阿里云提供了多种配置的GPU服务器,包括gn6v、gn6i、vgn6i-vws和gn6e等,这些服务器配备了不同型号的GPU计算卡、不同规格的内存和存储空间,可以满足不同用户的计算需求。同时,阿里云还为新用户提供了特惠价格,包年购买更是低至3折起,使得用户可以更加经济地购买到高性能的GPU服务器。
119 0
|
28天前
|
弹性计算 大数据 测试技术
2024年阿里云服务器价格配置表汇总(轻量服务器、ECS服务器、游戏服务器、GPU服务器)
今天整理了阿里云服务器价格,包含了阿里云轻量应用服务器、阿里云ECS云服务器、阿里云游戏服务器、阿里云GPU云服务器。阿里云服务器租用费用,云服务器ECS经济型e实例2核2G、3M固定带宽99元一年、ECS u1实例2核4G、5M固定带宽、80G ESSD Entry盘优惠价格199元一年,轻量应用服务器2核2G3M带宽轻量服务器一年61元、2核4G4M带宽轻量服务器一年165元12个月、2核4G服务器30元3个月,幻兽帕鲁4核16G和8核32G服务器配置,云服务器ECS可以选择经济型e实例、通用算力u1实例、ECS计算型c7、通用型g7、c8i、g8i等企业级实例规格。
|
2月前
|
存储 人工智能 Kubernetes
阿里云ACK助力GPU成本优化,实现灵活管理
摘要:本文将介绍如何在阿里云容器服务ACK中,利用cGPU技术,共享GPU算力,提高GPU利用率,降低TCO。
47 2
|
3天前
|
Ubuntu JavaScript 关系型数据库
在阿里云Ubuntu 20.04服务器中搭建一个 Ghost 博客
在阿里云Ubuntu 20.04服务器上部署Ghost博客的步骤包括创建新用户、安装Nginx、MySQL和Node.js 18.x。首先,通过`adduser`命令创建非root用户,然后安装Nginx和MySQL。接着,设置Node.js环境,下载Nodesource GPG密钥并安装Node.js 18.x。之后,使用`npm`安装Ghost-CLI,创建Ghost安装目录并进行安装。配置过程中需提供博客URL、数据库连接信息等。最后,测试访问前台首页和后台管理页面。确保DNS设置正确,并根据提示完成Ghost博客的配置。
在阿里云Ubuntu 20.04服务器中搭建一个 Ghost 博客
|
6天前
|
存储 分布式计算 网络协议
阿里云服务器内存型r7、r8a、r8y实例区别参考
在阿里云目前的活动中,属于内存型实例规格的云服务器有内存型r7、内存型r8a、内存型r8y这几个实例规格,相比于活动内的经济型e、通用算力型u1实例来说,这些实例规格等性能更强,与计算型和通用型相比,它的内存更大,因此这些内存型实例规格主要适用于数据库、中间件和数据分析与挖掘,Hadoop、Spark集群等场景,本文为大家介绍内存型r7、r8a、r8y实例区别及最新活动价格,以供参考。
阿里云服务器内存型r7、r8a、r8y实例区别参考
|
7天前
|
SQL 弹性计算 安全
购买阿里云活动内云服务器之后设置密码、安全组、增加带宽、挂载云盘教程
当我们通过阿里云的活动购买完云服务器之后,并不是立马就能使用了,还需要我们设置云服务器密码,配置安全组等基本操作之后才能使用,有的用户还需要购买并挂载数据盘到云服务器上,很多新手用户由于是初次使用阿里云服务器,因此并不知道这些设置的操作流程,下面给大家介绍下这些设置的具体操作流程。
购买阿里云活动内云服务器之后设置密码、安全组、增加带宽、挂载云盘教程
|
10天前
|
弹性计算 运维 安全
2024年阿里云上自建Palworld/幻兽帕鲁服务器教程
对于深爱《幻兽帕鲁》的玩家们,能够与好友共同联机探索游戏的奇幻世界,无疑是提升游戏体验的一大乐趣。但如何迅速且有效地搭建一个稳定且高效的联机服务器呢?今天,我们就来为大家分享一个详细的教程,让你轻松掌握自建《幻兽帕鲁》服务器的方法,让联机游戏之旅更加顺畅。
740 0

相关产品

  • GPU云服务器