3.4.4 pending channel notificationpending channel notification 是 USERD 提供的机制 。UMD 可以利用它通知 GPU:某个 channel 有了新的任务了【1】 。这样,GPU 硬件在当前 channel 被切换后(执行完毕、或 timeslice 到了),就会执行相应的 channel 。
注释
【1】 不同 chip,实现有所不同 。
3.4.5 从硬件调度看 GRID vGPUGRID vGPU 支持 3 种 scheduler:
1. Best Effort: 所有 vGPU 的任务随意提交,GPU 尽力执行
现象: 如果启动了 N 个 vGPU,它们的负载足够高,那么结果就是均分算力 。
原理: 所有的 vGPU 使用同一个 runlist 。runlist 内,还是按照 channel 为粒度进行调度 。如同在 native 机器上运行多个 CUDA 任务一样 。
2. Equal Share: 所有在用的 vGPU 严格拥有同样的 GPU 配额
现象: 如果启动了 N 个 vGPU,它们严格拥有相同的算力,不管是否需要这么多 。
原理: 为每个 vGPU 维护一个 runlist 。当它的 timeslice 过了,GRID Host Driver 会写 GPU 寄存器,触发当前 runlist 被抢占、下一个 runlist 被调度 。
3. Fixed Share: 每个 vGPU 有自己固定的 GPU 配额
现象: 每个 vGPU 严格按照创建时的规格来分配算力 。
原理: Ditto.
3.5 腾讯云 qGPU 简介qGPU == QoS GPU 。它是目前业界唯一真正实现了故障隔离、显存隔离、算力隔离、且不入侵生态的容器 GPU 共享的技术 。
3.5.1 qGPU 基本架构qGPU 基本架构:

文章插图
3.5.2 qGPU QoS 效果

文章插图
注释
【1】 测试数据来自 T4(chip: TU104) 。其它 chip 上,正确性、功能性和性能都待验证,虽然原理上是相通的 。
【2】两个 PoD 的算力配比为 2:1 。横坐标为 batch 值,纵坐标为运行时两个 PoD 的实际算力比例 。可以看到,batch 较小时,负载较小,无法反映算力配比;随着 batch 增大,qGPU 和 MPS 都趋近理论值 2,vCUDA 也偏离不远,但缺乏算力隔离的业界某产品则逐渐趋近 1 。
四、GPU 虚拟化: 未来展望2021 以来,GPU 工业界发生了一些变化,e.g.:
1. 英伟达 GPU 的 QoS 突破
英伟达在 CUDA 计算领域占据压倒性的优势,但 QoS 表现不尽如人意 。
长期以来,学术界和工业界付出了大量的努力,尝试在英伟达不支持 QoS 的前提下,实现某种程度的算力隔离 。遗憾的是,这些努力,要么集中在 CUDA API 层,能够做到一定的算力隔离,但同样会带来副作用;要么尝试在 low-level 层面突破 —— 但不幸全都失败了 。
qGPU 是十几年来在英伟达 GPU 上实现 QoS 的最大突破 。基于它:
- 腾讯云 TKE 的多容器共享 GPU,将无悬念地领先整个工业界
- 在线推理 + 离线训练的混布,成为可能
- GPU 池化的后端实现,不管采用哪种方案,都有了坚实的基础
- Linux/Android 场景的渲染虚拟化,也有了坚实的基础
很可能,编解码 API 不统一的乱象即将终结,这对 API 转发方案有很大的意义 。不远的将来,或许某种 API 方案的 vGPU 会成为主流 。google 在社区的一些活动标明,很可能它就有这样的计划 。
五、参考资料和项目简介1. nVidia MPS
官方 。部分文档公开 。
2. nouveau driver in Linux Kernel
开源社区版的英伟达 GPU 驱动,基于 DRM,硬件细节基本靠逆向工程 。不支持 CUDA、只支持 OpenGL 渲染 。代码庞大,包含很多有用信息 。
3. envytools 及其 nVidia Hardware Documentation
nouveau 的配套项目 。除了提供各种 profiling GPU 硬件细节的工具,还维护了一个文档仓库,记录所有已经被成功逆向了的信息 。
4. GDEV project, an opensource implementation of CUDA
基于 nouveau 实现了 CUDA driver 和 CUDA runtime,代码较旧,已不维护 。大神级作品 。
5. libcudest, a partially RE-ed CUDA driver
英伟达实习生实现的 CUDA Driver 逆向工程 。只逆向了一小部分 UMD 和 KMD 之间的接口 。已不维护 。
6. vCUDA
开源项目 。
7. nVidia official: nvidia-uvm driver for Tesla
官方,开源 。Telsa Driver 配套的 UVM 驱动,代码开源 。和 Tesla Driver 有很多 low-level 交互,可以从中窥见很多 GPU 硬件细节 。
8. Tesla Driver
官方 。细节全藏在 nv-kernel.o_binary 文件中 。
9. GRID vGPU
官方 。细节也是全在 nv-kernel.o_binary 文件中 。与 Tesla Driver 不同的是,它为 vGPU 的 Fixed Share 和 Equal Share 两种调度策略,实现了 per-vGPU runlist 。因此有很高的参考价值 。
推荐阅读
- 揭秘梳妆台的摆放风水 家中女人一定要多注意
- 揭秘家居风水催旺桃花运
- 游戏|《拳皇15》公开夏尔美设定图 揭秘热辣女神服饰设计
- 高铁|官方揭秘:高铁动车的电从哪儿来?
- 1秒解决gpu占用100-1秒解决cpu占用100怎么禁用-
- 揭秘CSS实用技巧总结
- 玫瑰花茶的功效,揭秘玫瑰花茶功效
- 看哪些女人让男人受不了 专家揭秘容易引起争吵的家居风水
- 揭秘:雷军为何把新小米logo设计交给一个叫原研哉的日本人?
- 中医止咳散配方,揭秘中医千祖传的补肾壮阳茶配方
