这个模块两年前就发布了(并且更早之前似乎就有 Terga 的开源模块),那时候说是测试版,我也用了一段时间,这次的新闻其实只是官方告诉你开源版本已经达到生产要求了,并且安装驱动时默认会使用开源版本,冷饭再炒一遍而已。
在所有硬件的驱动中,GPU 驱动应该是 Top2 复杂的,为什么是 Top2 ?因为它有一个强力对手就是 CPU 的驱动,有些人又叫它操作系统。因为从体系结构上 GPU 是 CPU 的从属,GPU 驱动也必须放在 CPU 驱动,啊不操作系统的框架中。NVIDIA 仅仅开源了其中的内核模块部分,在 GPU 驱动开发圈中叫 KMD ( Kernel Mode Driver ),但是需要完整的 GPU 功能,还需要结合相应的 UMD ( User Mode Driver )。KMD 一般是以类似内核模块的形式出现( Windows 上貌似是 .sys ),而 UMD 一般是一些动态库。
一般来说 KMD 处理一些和硬件直接相关的东西,所以你加载了开源 KMD ,那你能有个正常的 tty 。但是应用在使用 GPU 时使用的是 Direct3D ,OpenGL ,Vulkan ,CUDA 或 OpenCL 等接口,这些接口实际是在 UMD 的动态库里实现的。没有 UMD 无法使用这些接口。所以 UMD 可以自然分为一些模块,不同的接口调用不同的模块。软件上的文章很多也是在 UMD 上做。比如 555 的开源 KMD ,编译之后不到 20MB ,但是使用 OpenGL 时需要载入的 UMD 库比如
libnvidia-eglcore.so ,
libnvidia-gpucomp.so 等加起来有 70 多 MB ,如果用 Vulkan 或者 CUDA 等还要载入其他的库。所以没有 UMD ,你拿到的驱动真的只能跑个 tty 。
实际上现代 GPU 驱动的用户态部分除了传统意义的 UMD 之外,还有很多附加的部分,比如视频加速支持,GPU 状态监控和管理,超分辨率方案实现,虚拟化,GPGPU 相关库等等。
在另一个方向,上面说的 UMD 是 KMD 的上层,传统上来讲,KMD 的下层就是硬件,不过一般对于复杂硬件,硬件中的很多行为是由 Firmware 控制的,也就是说实际上在内核/驱动和硬件之间,存在一个 Firmware 层。NVIDIA 在 Turing 架构中引入了 GSP ,即 GPU 中集成的一颗 RISC-V 控制器,开源 KMD 只支持有 GSP 的 GPU ,也就是说——钉子户喜闻乐见的 1066 是不支持的,炼丹玩家喜闻乐见的 P100 是不支持的。一部分原来闭源 KMD 的东西可能是挪到了 GSP Firmware 中去,这个 Firmware 也有二三十 M 。对比来看,闭源版的 KMD 有 90 多 M ,应该是还包含了很多老 GPU 的兼容代码。
一般来说,虽然 OS 、驱动这些传统基础软件范畴的东西有很多开源的,但是 RTL 、Firmware 这些算是硬件范畴,基本都是闭源的。
也就是说驱动中很多东西已经向上推给了 UMD ,又把一些东西向下扔到了 Firmware 里面,那中间的 KMD 开源出来方便一下使用也影响不大。但是总的来说 NV 的硬件确实是一点点在向更开放的方向走,只是节奏不太稳定。比如之前发布了一部分的资料(
https://github.com/nvidia/open-gpu-doc ),之后官方又放开游戏卡的 Passthrough 支持,这两年估计是忙着搞 AI 没什么动作。
AMD 会发布 GPU 的 ISA 文档,不过不知道是我没找对地方还是怎么的,没有找到太多其他方面的文档,不过好在 AMD 有不错的开源驱动。最近倒是有个故事,tinygrad 的开发者 George Hotz 在做 AI 硬件解决方案,他要基于 7900XTX 搞一个 AI 机器,然后在推上抱怨这东西很不稳定,要求 AMD 开源 GPU 中调度器等部分的 Firmware 然后他们自己来改,然后苏妈还回复说可以考虑。于是过了段时间 AMD 真的发布了 MES 的一些文档(并且源码也在走流程)。于是 AMD 的网站上出现了很奇怪的景象:有比较全的 ISA 文档,然后其他的只有一个 MES 文档孤独地放在那里:
gpuopen.com/amd-gpu-architecture-programming-documentation AMD GPU architecture programming documentation - AMD GPUOpen
相对来说 Intel 的文档看起来是最全的,Intel 发布的文档叫做 PRM ,包含了许多方面:
www.intel.com/content/www/us/en/docs/graphics-for-linux/developer-reference/1-0/overview.html Programmer's Reference Manuals 不过有一点暂时可能不太清楚的是上面提到的 AMD 所发布的 MES 信息是 Firmware 级别的,Intel 这个既然名字说是给 Programmer 的,那么可能主要是 Driver 级别的。
今天担任娱乐任务的是高通(什么你说 CrowdStrike ? technically 那是昨天),高通说要对 X Elite 提供 Linux 支持,但是社区发现上面的 GPU 需要一个 OEM 签名的 Firmware ,于是默默地把它默认禁用掉了:
www.phoronix.com/news/Linux-Disabling-X-Elite-GPU Linux Patch To Disable The Snapdragon X Elite "X1E80100" GPU By Default - Phoronix
至于楼主的梦想嘛,你要知道这是个一个巴掌拍不响的问题。GPU 驱动是个很小的圈子,公开的东西大部分又是 Linux 的,其次是 Windows 的,Mac 的基本没人搞。所以等到条件成熟时,楼主可能对火星殖民更感兴趣。
另见
v2ex.com/t/910242#r_12602055