无论是巧合还是刻意安排,AMD工程师总习惯在周五下午向开源/Linux生态发布颇具看点的功能补丁。就在几分钟前,AMDGPU驱动维护者亚历克斯·多伊彻(Alex Deucher)向内核邮件列表提交了两组补丁系列,用于引入UALink的底层基础架构。
超加速器链路(Ultra Accelerator Link,简称UALink)是一项开放标准高速网络协议,用于在数据中心的纵向扩展集群节点内连接GPU与其他AI加速硬件。UALink的设计目标是支持在单个域内最多接入1024个加速硬件,这就是AMDGPU的UALink补丁系列。
本次发布的第一组补丁系列包含95个补丁,代码量约7000行,新增了UALink的核心基础架构,以及其与AMDGPU内核图形驱动的集成适配能力。
“集群节点内已建立连接的GPU可通过UALink直接访问其他GPU的远端内存。与RDMA(远程直接内存访问)不同,该过程无需数据拷贝,直接通过互连架构完成加载/存储操作。远端GPU仅在目标内存已被主动导出、且访问方已获得授权的前提下,才能访问该共享内存。可共享的内存必须属于节点间共享的统一物理地址空间,该地址空间被称为NPA(网络物理地址)空间。该地址空间会在多块GPU之间进行分区,每块GPU都拥有专属的地址空间分段,用于导出自身内存。每块GPU都会为自身的NPA空间维护一套独立的页表,这套机制与GPUVM的运行逻辑类似。”
已导出的内存不会被锁定。内存导出方可能需要移动该段内存,或是让导入方暂时无法访问该内存。当发生TTM内存回收、MMU通知事件时,导出方会通过远端TLB刷新操作处理该场景,导入方则会执行远端内存存在性校验,校验失败后自动重试访问。
如需访问远端内存,驱动可以像映射本地内存一样,将NPA地址映射到每个进程独立的GPUVM页表中。应用程序通过不透明句柄标识远端内存,集群节点内的GPU之间可直接通信,在导入方和导出方之间完成NPA地址的交互同步。如果某一节点离线或被重置,其余对等节点会自动清理所有因该事件失效的残留引用。
第二组补丁系列仅包含3个补丁,对外暴露了全新的IOCTL接口,以及围绕UALink集成实现的内存导入、导出相关文档。

对于开发者读者而言,最受关注的内容当属这份配套的文档补丁。
AMD终于面向自家AMDGPU驱动推出了UALink的Linux内核集成相关工作,着实是行业内的重磅进展。
转自 AMD Posts Massive Patch Series For Enabling UALink In The Linux Kernel – Phoronix
Linuxeden开源社区