1. 项目概述
上周参加了HAMi社区的线下技术沙龙,海光信息的工程师分享了他们在DCU(Deep Computing Unit)软件虚拟化领域的实践经验。作为国内少数掌握全栈GPGPU技术的企业,海光在异构计算虚拟化方面有着独特的技术路线。这次分享从基础原理一直讲到生产环境落地,信息密度极高,我把核心内容整理成这篇技术笔记。
DCU软件虚拟化本质上解决的是"如何让多个任务安全共享加速卡"的问题。传统方案要么像CUDA MPS那样缺乏隔离性,要么像PCIe透传那样资源利用率低下。海光提出的vDCU方案在用户态实现了细粒度的计算、显存和调度隔离,实测性能损耗控制在8%以内,比行业常见的KVM+VFIO方案提升30%以上的密度。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心架构解析
2.1 虚拟化层设计
海光的方案采用"用户态驱动+内核态仲裁"的混合架构:
- 用户态虚拟化层(vCUDA Lib)负责:
- 截获和重定向API调用
- 维护虚拟显存映射表
- 实现轻量级上下文切换
- 内核态组件(DCU Scheduler)负责:
- 物理设备仲裁
- 故障隔离
- 优先级调度
这种设计避免了传统方案中频繁陷入内核的性能开销。实测显示,相比Xen的PCIe虚拟化方案,上下文切换延迟降低了15倍。
2.2 关键技术创新点
2.2.1 显存虚拟化
采用分级页表映射机制:
- 物理显存被划分为4MB大页
- 每个VM获得独立的L2页表
- TLB Miss时由MMU触发EPT转换
通过预分配+动态映射策略,解决了传统方案中显存碎片化的问题。在ResNet50训练场景下,显存利用率提升40%。
2.2.2 计算隔离
创新点在于引入了"流组"(Stream Group)概念:
- 每个vDCU实例对应一个流组
- 硬件调度器以流组为最小调度单元
- 流组间通过时间片轮转实现隔离
实测表明,在混合负载场景(HPC+AI)下,强隔离性使得性能抖动从±15%降低到±3%以内。
3. 实践部署方案
3.1 环境配置示例
典型部署需要以下组件:
bash复制# 驱动层
dcu-driver-5.4.0-1.x86_64
vdcu-kmod-2.1.3-1.el7.x86_64
# 用户态
libv
