近日,GPU社区迎来了一个大消息,英伟达决定基于GPL/MIT双重协议开源其GPU内核驱动,为Linux内核版本3.10以上提供支持。此消息一出引起了Linux社区的轩然大波,难道英伟达终于开窍了?
开源驱动中的差生
长久以来,AMD为Linux提供专有驱动的同时,也在大力推动开源驱动的支持,不仅积极提供代码,也给到了足够的文档支持。因此,只有需要OpenCL渲染等图形支持时,才需要用到专有驱动。而反观英伟达,他们虽然早早就开始对Linux提供支持,但仅限于其专有驱动。英伟达此举惹恼了不少人,连Linux之父Linus Torvalds多年前被问及英伟达OptimusGPU为何缺乏Linux支持时,都表示英伟达是他们遇见过的最难相处的公司,甚至对其公然大骂。
A100GPU / 英伟达
哪怕是刚进入独立GPU没多久的英特尔在开源驱动上的支持也要好于英伟达,更不用说此前英特尔的集成GPU就对Linux有着极好的开源驱动支持。这或许也是为何一众超级计算机系统选择了用AMD的RadeonInstinct和英特尔的XeGPU,也没有选择英伟达A100的原因。
对于AMD来说,尤其是在Linux下,开源的驱动甚至好过专有驱动,而在英伟达身上,这种状况就反过来了。过去在Linux开发者的眼中,英伟达对于他们的开源社区提供的支持并不多,首先英伟达没有主动支持,再来英伟达没有给出任何文档也没有提交任何开源代码。更糟糕的是,英伟达GPU的开源驱动并不完美。以著名的开源英伟达驱动nouveau为例,这一驱动在没有签名的情况下,GPU是无法全速运转的。
英伟达的GPU驱动开源才刚走出第一步
英伟达显然也意识到了这一点,但出于商业考虑,比如防止技术泄露等,于是在过去这么多年里,都没有选择开源驱动。然而从近日发布的R515驱动开始,英伟达终于决定开放其GPU内核模块驱动,将各多的自由交予Linux下的开发者。他们可以在原有英伟达GPU驱动的基础上进行签名和分发,并加以改进。提供更好的体验,而几大Linux发行版也可以与这些内核模块打包在一起。
R515驱动供用户选择安装开源或闭源核心模块 / 英伟达
英伟达不仅公布了驱动源代码,也提供完全打包好的驱动版本,不过根据GPU架构与定位的不同,其代码仍有一定差异。比如大部分数据中心长期以来用的已经是Linux系统了,加上英伟达去年就开始逐步推行GSP驱动架构,让GSP单元接替CPU来完成GPU初始化和管理任务,因此A100等主要数据中心GPU刚开源的代码已经可以用于生产。
但消费级的GeforceGPU和工作站级的WorkstationGPU就并非如此了,目前这些GPU中并没有GSP单元,所以其代码还是还处于最初期的测试阶段,很难做到不出差错。而且开源的代码也仅限于图灵和安培架构的GPU,图灵架构之前的GPU依然只能选择闭源的内核模块驱动。除此之外,英伟达GPU驱动中最有价值的那部分,也就是CUDA这些用户层的驱动,依然是闭源的。
而将Linux移植到苹果M1系列上的开发者Hector Martin表示,虽然英伟达声称开源内核驱动,但其实将大部分内容都移动到了固件上,所以才开始推行这一开源驱动策略,有种师从博通的既视感。但好在英伟达至少真的开始朝开源驱动这个方向走了。并表示随着开源驱动的质量逐步提高,会慢慢淘汰掉闭源驱动。
英伟达此举确实改善了其GPU产品在Linux下的集成和支持,让开发人员有了更多调试的空间,这倒不是真的因为十年前Linus竖的中指终于让其警醒,更多的还是为了把握企业和数据中心市场。随着机密计算的需求越来越高,英伟达作为机密计算联盟成员之一,自然不能因为闭源驱动给到了开发者限制,而丧失这一市场。