赞
踩
作者: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 天然适合向量计算。常用场景及 API:
此外还有加解密、哈希等场景,例如近些年来的挖矿。渲染是 GPU 诞生之初的应用: GPU 的 G 就是 Graphics —— 图形。桌面、服务器级别的 GPU,长期以来仅有三家厂商:
英伟达:GPU 的王者。主要研发力量在美国和印度。
AMD/ATI:ATI 于 2006 年被 AMD 收购。渲染稍逊英伟达,计算的差距更大。
Intel:长期只有集成显卡,近年来开始推独立显卡。
2006 这一年,GPU 工业界发生了三件大事: ATI 被 AMD 收购;nVidia 黄仁勋提出了 CUDA 计算;Intel 宣布要研发独立显卡。
日光之下并无新事。如同经常发生的,这些事有成功有失败: Intel 很快就放弃了它的独立显卡,直到 2018 才终于明白过来自己到底放弃了什么,开始决心生产独立显卡;AMD 整合 ATI 不太成功,整个公司差点被拖死,危急时公司股票跌到不足 2 美元;而当时不被看好的 CUDA,则在几年后取得了不可思议的成功。
从 2012 年开始,人工智能领域的深度学习方法开始崛起,此时 CUDA 受到青睐,并很快统治了这个领域。
系统虚拟化演化之路,起初是和 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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。