当前位置:   article > 正文

GPU虚拟化,算力隔离,和qGPU

jike song

作者:jikesong,腾讯 CSIG 腾讯云异构计算研发副总监

〇、本文写作背景

大约 2 年前,在腾讯内网,笔者和很多同事讨论了 GPU 虚拟化的现状和问题。从那以后,出现了一些新的研究方向,并且,有些业界变化,可能会彻底颠覆掉原来的一些论断。

但这里并不是要重新介绍完整的 GPU 虚拟化的方案谱系。而是,我们将聚焦在英伟达 GPU + CUDA 计算领域,介绍下我们最新的技术突破 qGPU,以及它的意义究竟是什么。关于 GPU 虚拟化的历史性介绍,我将直接摘抄当时的讨论。

这也不是一篇介绍 TKE qGPU 产品特性的文章。而是,我们将潜入到前所未有的深度,去探索 GPU 调度和 QoS 的本质。本文也不是巨细靡遗的系统性探索,但你可以在这里看到别处不曾出现过的知识。

本文涉及对一些厂商的推测性技术介绍,不保证准确性。

一、术语介绍

GPU ————— Graphics Processing Unit,显卡

CUDA ———— Compute Unified Device Architecture,英伟达 2006 年推出的计算 API

VT/VT-x/VT-d — Intel Virtualization Technology。-x 表示 x86 CPU,-d 表示 Device。

SVM ————— AMD Secure Virtual Machine。AMD 的等价于 Intel VT-x 的技术。

EPT ————— Extended Page Table,Intel 的 CPU 虚拟化中的页表虚拟化硬件支持。

NPT ————— Nested Page Table,AMD 的等价于 Intel EPT 的技术。

SR-IOV ——— Single Root I/O Virtualization。PCI-SIG 2007 年推出的 PCIe 虚拟化技术。

PF ————— Physical Function,亦即物理卡

VF ————— Virtual Function,亦即 SR-IOV 的虚拟 PCIe 设备

MMIO ——— Memory Mapped I/O。设备上的寄存器或存储,CPU 以内存读写指令来访问。

CSR ———— Control & Status Register,设备上的用于控制、或反映状态的寄存器。CSR 通常以 MMIO 的方式访问。

UMD ———— User Mode Driver。GPU 的用户态驱动程序,例如 CUDA 的 UMD 是 libcuda.so

KMD ———— Kernel Mode Driver。GPU 的 PCIe 驱动,例如英伟达 GPU 的 KMD 是 nvidia.ko

GVA ———— Guest Virtual Address,VM 中的 CPU 虚拟地址

GPA ———— Guest Physical Address,VM 中的物理地址

HPA ———— Host Physical Address,Host 看到的物理地址

IOVA ———— I/O Virtual Address,设备发出去的 DMA 地址

PCIe TLP —— PCIe Transaction Layer Packet

BDF ———— Bus/Device/Function,一个 PCIe/PCI 功能的 ID

MPT ———— Mediated Pass-Through,受控直通,一种设备虚拟化的实现方式

MDEV ——— Mediated Device,Linux 中的 MPT 实现

PRM ———— Programming Reference Manual,硬件的编程手册

MIG ———— Multi-Instance GPU,Ampere 架构高端 GPU 如 A100 支持的一种 hardware partition 方案

二、GPU 虚拟化的历史和谱系

2.1 GPU 能做什么

GPU 天然适合向量计算。常用场景及 API:

此外还有加解密、哈希等场景,例如近些年来的挖矿。渲染是 GPU 诞生之初的应用: GPU 的 G 就是 Graphics —— 图形。

桌面、服务器级别的 GPU,长期以来仅有三家厂商:

  1. 英伟达:GPU 的王者。主要研发力量在美国和印度。

  2. AMD/ATI:ATI 于 2006 年被 AMD 收购。渲染稍逊英伟达,计算的差距更大。

  3. Intel:长期只有集成显卡,近年来开始推独立显卡。

2006 这一年,GPU 工业界发生了三件大事: ATI 被 AMD 收购;nVidia 黄仁勋提出了 CUDA 计算;Intel 宣布要研发独立显卡。

日光之下并无新事。如同经常发生的,这些事有成功有失败: Intel 很快就放弃了它的独立显卡,直到 2018 才终于明白过来自己到底放弃了什么,开始决心生产独立显卡;AMD 整合 ATI 不太成功,整个公司差点被拖死,危急时公司股票跌到不足 2 美元;而当时不被看好的 CUDA,则在几年后取得了不可思议的成功。

从 2012 年开始,人工智能领域的深度学习方法开始崛起,此时 CUDA 受到青睐,并很快统治了这个领域。

2.2 系统虚拟化和 OS 虚拟化

系统虚拟化演化之路,起初是和 GPU 的演化完全正交的:

  • 1998 年,VMWare 公司成立,采用 Binary Translation 方式,实现了系统虚拟化。

  • 2001 年,剑桥大学 Xen Source,提出了 PV 虚拟化(Para-Virtualization),亦即 Guest-Host 的主动协作来实现虚拟化。

  • 2005 年,Intel 提出了 VT,最初实现是安腾 CPU 上的 VT-i (VT for Itanium),很快就有了 x86 上的 VT-x。

  • 2007 年,Intel 提出了 VT-d (VT for Device),亦即 x86 上的 IOMMU。

  • 2008 年,Intel 提出了 EPT,支持了内存虚拟化。

  • 2010 年,Linux 中的 PV Hypervisor lguest 的作者,Rusty Russell(他更有名的作品是 iptables/netfilter),提出了 VirtIO,一种 Guest-Host 的 PV 设备虚拟化方案。

应该可以说,在 PV 时代和 Binary Translation 时代,虚拟化是危险的。只有当 VT 在硬件层面解决了 CPU 的隔离、保证了安全性之后,公有云才成为可能。VT-x 于 2005 ~ 2006 年出现,亚马逊 AWS 于 2006 年就提出云计算,这是非常有远见的。

系统的三个要素: CPU,内存,设备。CPU 虚拟化由 VT-x/SVM 解决,内存虚拟化由 EPT/NPT 解决,这些都是非常确定的。但设备虚拟化呢?它的情况要复杂的多,不管是 VirtIO,还是 VT-d,都不能彻底解决设备虚拟化的问题&#x

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/900409
推荐阅读
相关标签
  

闽ICP备14008679号