V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jjxtrotter
V2EX  ›  分享发现

NVIDIA 全面转向开源 GPU 内核模块

  •  
  •   jjxtrotter · 129 天前 via iPhone · 1491 次点击
    这是一个创建于 129 天前的主题,其中的信息可能已经有所发展或是发生改变。
    source: https://developer.nvidia.com/zh-cn/blog/nvidia-transitions-fully-towards-open-source-gpu-kernel-modules/

    以后 Apple silicon 电脑有没有可能连上 Nvidia 显卡?

    Mac Pro 的 pcie 接口终于能有点用了
    6 条回复    2024-07-20 11:23:17 +08:00
    skrbug
        1
    skrbug  
       129 天前
    我对 Nvidia 驱动一直比较迷惑,ubuntu 里面安装的驱动时候看到过其他的版本 例如 nouveau

    有没有大佬科普一下,内核模块和驱动有何区别,以及这个决定能带来什么影响
    skrbug
        2
    skrbug  
       129 天前
    驱动应该还是闭源的吧?
    chenqh
        3
    chenqh  
       129 天前
    太阳从西边出来了吗?
    secondwtq
        4
    secondwtq  
       129 天前   ❤️ 3
    这个模块两年前就发布了(并且更早之前似乎就有 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.solibnvidia-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
    jjxtrotter
        5
    jjxtrotter  
    OP
       128 天前 via iPhone
    @secondwtq 感谢科普
    skrbug
        6
    skrbug  
       128 天前
    @secondwtq 学到了,谢谢科普
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1075 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 19:43 · PVG 03:43 · LAX 11:43 · JFK 14:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.