其实也不是 。
该方案最大的缺陷,是必须有一个 pGPU 驱动,负责 vGPU 的模拟和调度工作 。逻辑上它相当于一个实现在内核态的 device-model 。而且,由于 GPU 硬件通常并不公开其 PRM,所以事实上就只有 GPU 厂商才有能力提供这样的 Virtualization-Aware pGPU 驱动 。使用了厂商提供的 MPT 方案,事实上就形成了对厂商的依赖 。
2.3.6 SR-IOV: revisited重新回到 GPU 的 SR-IOV 。AMD 从 S7150 开始、英伟达从 Turing 架构开始,数据中心 GPU 都支持了 SR-IOV 。但是 again,它不是 NIC 那样的 SR-IOV,它需要 Host 上存在一个 vGPU 的 device-model,来模拟从 VM 来的 VF 访问 。
所以事实上,到目前为止,GPU 的 SR-IOV 仅仅是封装了 PCIe TLP 层的 VF 路由标识、从而规避了 runtime 时的软件 DMA 翻译,除此之外,和基于 MDEV 的 MPT 方案并无本质的不同 。
2.3.7 谱系表
文章插图
在介绍完了上述的这些方案后,我们重新看下 CUDA 计算、OpenGL 渲染两种场景的软件栈,看看能发现什么:
CUDA 计算 stack:
文章插图
OpenGL 渲染 Stack:
文章插图
可以看出,从 API 库开始,直到 GPU 硬件,Stack 中的每一个阶段,都有被截获、转发的可能性 。甚至,一概称之为「API 转发」是不合适的 —— 以 GRID vGPU、GVT-g 为例的 DEV 转发,事实上就是 MPT,和任何 API 都没有关系 。
三、容器 GPU 虚拟化首先,我们这里谈到的,都是 nVidia 生产的 GPU、都只考虑 CUDA 计算场景 。其次,这里的虚拟化指的是 OS 虚拟化的容器技术,不适用于 KATA 这样的、基于系统虚拟化的安全容器 。
3.1 CUDA 的生态
文章插图
CUDA 开发者使用的,通常是 CUDA Runtime API,它是 high-level 的;而 CUDA Driver API 则是 low-level 的,它对程序和 GPU 硬件有更精细的控制 。Runtime API 是对 Driver API 的封装 。
CUDA Driver 即是 UMD,它直接和 KMD 打交道 。两者都属于 NVIDIA Driver package,它们之间的 ABI,是 NVIDIA Driver package 内部的,不对外公开 。
英伟达软件生态封闭:
- 无论是 nvidia.ko,还是 libcuda.so,还是 libcudart,都是被剥离了符号表的
- 大多数函数名是加密替换了的
- 其它的反调试、反逆向手段
文章插图
其中这个 26M 大小的、被剥离了符号表的 nv-kernel.o_binary,就是 GPU 驱动的核心代码,所有的 GPU 硬件细节都藏在其中 。
3.2 vCUDA 和友商 cGPU为了让多个容器可以共享同一个 GPU,为了限定每个容器能使用的 GPU 份额,业界出现了不同的方案,典型的如 vCUDA 和 cGPU:
vCUDA 架构:
文章插图
cGPU 架构:
文章插图
两者的实现策略不同,cGPU 比 vCUDA 更底层,从而实现了不侵入用户环境 。
3.3 GPU 池化简介从截获的位置,看 GPU 池化的谱系:
文章插图
以 CUDA API 转发的池化方案、业界某产品为例,它到了 GPU 所在的后端机器上,由于一个 GPU 卡可能运行多个 GPU 任务,这些任务之间,依然需要有算力隔离 。它为了实现这一点,在后端默认启用了 nVidia MPS —— 也就是故障隔离最差的方案 。这会导致什么?一个 VM 里的 CUDA 程序越界访问了显存,一堆风马牛不相及的 VM 里的 CUDA 应用就会被杀死 。
所以,很显然,GPU 池化也必须以同时满足故障隔离和算力隔离的方案作为基础 。
推荐阅读
- 揭秘梳妆台的摆放风水 家中女人一定要多注意
- 揭秘家居风水催旺桃花运
- 游戏|《拳皇15》公开夏尔美设定图 揭秘热辣女神服饰设计
- 高铁|官方揭秘:高铁动车的电从哪儿来?
- 1秒解决gpu占用100-1秒解决cpu占用100怎么禁用-
- 揭秘CSS实用技巧总结
- 玫瑰花茶的功效,揭秘玫瑰花茶功效
- 看哪些女人让男人受不了 专家揭秘容易引起争吵的家居风水
- 揭秘:雷军为何把新小米logo设计交给一个叫原研哉的日本人?
- 中医止咳散配方,揭秘中医千祖传的补肾壮阳茶配方