找回密码
 立即注册
查看: 201|回复: 0

谈谈Nvidia GPU的内核驱动模块开源

[复制链接]
发表于 2022-5-17 12:01 | 显示全部楼层 |阅读模式

Github:github.com/NVIDIA/open-gpu-kernel-modules
刚刚过去的5/11日,Nvidia官方偶然的宣布,将其原本闭源的Linux GPU内核驱动模块作为开放源码发布;但其实早在几天前,NV就已经在其GitHub托管目录内陆续公开了相关代码<open-gpu-kernel-modules repo>;虽然NV承诺Open KMD开源包会陆续的追加更新,但截至目前我们看到的仍是功能单薄的内容。
实则是Nvidia仅提供kernel-mode driver及一部分挂接用户态的功能被开源(类比AMD早年),可以想象是处理器的基础任务再加一个类似RPC client角色的调用功能,去配对用户态程序中的那些图形和计算相关的运行库(闭源),为此Linux主流版本和Nouveau后续社区版本仍旧需要做大幅的重构和分发,这也符合社区利益。好处是Linux用户端开发和配置CUDA的工作简化了,编译简化了,驱动的性能更为可靠且安全;也开放了更多可以汇编/debug的空间。
然而,Linux开发者会用它来做什么?Linux图形开发及应用场景原本就比较小众,反之比如调个频、修改个矿机算力限制或挖矿算法优化,则看来颇为应景;而倘若想修改shader等机制则是万万做不到的。
NV 开源代码基于的是双重许可<GPL/MIT>;并且,许可条款对于分发和repacking的授权进行了规定,以实现分发;另外关于版本号,初代的开源KMD版本会从R515开始发布;提供源码的同时,NV也加入了完整构建和打包的驱动程序版本;这个版本里包含了两个彼此排斥的闭源驱动和开源内核模块的pre-compiled版本,用户可以在安装过程中选择。另外,也可以直接基于源代码构建一个内核模块,再与匹配版本的UMD用户态驱动一起安装。
因为,NV的核心任务都在用户态程序/GSP固件里面(如shader编译),而内核驱动是非核心代码,通常管理一些基础任务比如点亮显示屏(调节分辨率/刷新率)、板载接口控制如PCIe、GPU re-clock、电源管理、内存管理,以及最多加上CUDA单元的作业调度等等...;而用户态的任务场景就丰富多了,是实现OpenGL/Vulkan/CUDA等图形和计算的底层API,包括虚拟化等功能;核心的几个runtime library也都在用户态程序里(比如libcuda.so / libcudart.so等),但这些必须都是闭源的,且与内核驱动彼此是配对使用的。
至于内核模块开源的好处是,无论对于AI/ML/Graphics开发者、游戏玩家或是云虚拟化用户,在其Linux主机的NV显卡可以自动加载官方版本kernel-mode driver而非野生驱动了,对应用户态程序也可以自动挂载并选择使用Nouveau开源openGL或者NV的闭源驱动,无需重新编译内核模块也无需重启OS,安全性和未来迭代都会更有保证。对比之下,想象之前GPU软件栈对于Linux支持的短脚,比如GL驱动走的还是Mesa Zink低效方法(openGL-over-VLK,版本很低;Zink毕竟是驱动上嵌套一层,自己基本没法优化和迭代) 。但其实往后Mesa下的Nouveau开源驱动也不会消失,因为需要支持老显卡;以及往后陆续会增加像Mesa Vulkan这样的驱动,就像AMD之于RADV。
另外,因为这个内核模块已经具备了DMA-BUF支持,其实显得不像 NV专有驱动了。
因此,NV并未开源任何核心代码,而看起来仅像是为IDC类显卡应用提供了相对简化且安全可靠的Linux-based的配置/调用环境,毕竟曾经的闭源驱动安装加载和调试极其不便(往后可以相对便捷的操作调试,比如追踪代码路径、查看内核事件调度如何与workload交互作用等等)。此次面向Linux和Nouveau社区有限开源的是一个官方基础驱动,底层设计依旧隐藏在GSP firmware其中,开源出来的代码本身就像是一个RPC client用来专门与firmware交互(其中大约200多个API call);且在硬件版本兼容上做了限制。但对于Nouveau社区是有利的,因为从前它在有些任务中很不稳定,很多野生bug,且曾经被Chrome/Chromium列入黑名单(预设关闭了Nouveau提供的由显卡加速的WebGL)。
BTW:相比网传的黑客段子,我更相信是前有AMD后有Intel入局独立显卡的危机感,而勉为其难争取Linux社区开发者的"开箱即用"。但考虑到人们很少在Linux开发游戏和图形工作,应用场景不如Win+DX那么多;那么想必Linux下的最劲场景就是矿机了:)刚好偏证的是,开源出来的KMD面向开发者提供的主要福音就是允许GPU频率动态调节(也是曾经nouveau开发的主要硬伤),矿机最适用了~
最后,从发布情况看这个开源内核驱动对硬件版本有要求,仅兼容Tuning/Ampere及以后的产品族(即仅支持基于GSP filmware的显卡)并配对同期的用户态驱动版本和firmware版本才能用,因此旧版本N卡不支持(如Y18之前的存量巨大的Pascal/Maxwell等)。同时,这个内核模块也需要向前/向后兼容性,那么针对用户态的接口还会再迭代新的开源版本;但NV不会开发这个,这是提供给Nouveau社区的工作和利益。当前,NV已经得到一些Linux发行商的配合,使其更紧密与OS集成,以便有利于开发者的调试/集成和反馈工作;接下来这个内核模块和驱动会首先无缝集成到一些项目定制的Linux内核版本,同时Canonical和SUSE也表示会将其封装到Ubuntu和SUSE的企业版,据传RHEL也在准备过程中了。再此后,NV必然会联合各大开源社区和发行商合作,以便规划未来的统一内核驱动--发展出一个对社区和NV都有效的模型。
Github目前公布的代码较为基础,NV也提到接下来陆续公开相应的代码: github.com/NVIDIA/open-gpu-kernel-modules



From Nvidia Developer Web

参考新闻:Nvidia开源了GPU内核驱动;英伟达开放GPU内核模块源代码,开源解决方案供应商/发行商将受惠;
<hr/>

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-5-3 21:38 , Processed in 0.089846 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表