[Community News] deepin 20.7.1——谈谈我们的N卡驱动开发心得!
Tofloor
poster avatar
white777
deepin
OM
2022-10-14 21:37
Author

deepin 20.7.1 即将到来之际,各位小伙伴在参与内测的过程中,有没有发现安装N卡驱动时不同寻常的变化呢?

n卡驱动开发心得.jpg

20.7.1版本可以根据当前你机器的上NVIDIA显卡,自动匹配合适的闭源驱动版本进行安装。在其他Linux发行版安装N卡驱动时,可能会出现这样的问题:由于N卡闭源驱动版本无法完全向下兼容,一旦装错版本,容易出现黑屏死机的问题。而这一次,我们则通过直接从终端安装的方式,将这些可能出现的问题“一网打尽”。

下面,就来和大家一起唠一唠我们开发过程中的“脑回路”吧!

众所周知,Linux系统上有两套NVIDIA显卡驱动, 一是开源社区开发的nouveau ,它的特点是代码全部开源,但稳定性较差,总容易冒出各种问题。比如,部分机型在待机机后唤醒不了、开机过程中出现花屏现象等等。

另外一个则是NVIDIA厂商提供的驱动。相比较而言,这位的稳定性就要好上很多,但因为它的代码是闭源的,没有合入到内核,需要手动安装、配置。这个安装、配置过程(尤其是双卡笔记本的配置)对很多开发人员来说都难以忍受,众多还处在小白阶段的朋友们想要上手,岂不是还没开始,就已结束?

此外还有一个问题—— NVIDIA厂商提供的闭源驱动不能向下兼容 。怎么理解?简单来说,就是高版本的驱动不能完全支持覆盖旧的显卡,比如470.86这个版本可以支持GT 730显卡,当驱动版本升级到510.xx后,再去带GT 730显卡机器上安装,闭源驱动就会安装失败,系统重启后直接黑屏。

所以,在分析了以上NVIDIA闭源驱动的问题后,我们着力去做了以下几个操作。

多版本共存

首先,为了让系统仓库中所带的驱动版本能支持足够多的NVIDIA显卡型号,我们重构了上游驱动包,重构后的包名=旧包名+大版本号,让系统仓库能够同时存在多个驱动版本。举个例子,比如之前驱动包名叫【nvidia-driver】,重构后它的新名字是【nvidia-driver-470】。

目前,我们仓库总共存在340、390、470、510四个版本的驱动包,大概可以覆盖近15年内发布的显卡。

驱动包预装

再者,为了让各位安装完系统后,即可使用上闭源驱动,无需再手动安装、徒增烦恼,我们增加了NVIDIA驱动预装功能。

其实按照常规思路,要解决这个问题,只需把驱动包预装到镜像就可以了。但可惜的是,这一思路对NVIDIA显卡驱动来说并不适用。原因是NVIDIA驱动不能向前兼容,没有哪一个驱动版本可以全部覆盖支持所有的NVIDIA显卡。

为了解决这一问题,就有了我们在安装器阶段增加的功能——根据当前机器上的NVIDIA显卡,自动选择匹配一款驱动进行安装。

双卡(I+N)笔记本配置

不知道deepiner们是否还有印象?之前,我们的应用商店中有一款名叫 “显卡驱动管理器” 的应用,负责安装显卡驱动以及双卡笔记本配置。

640.png

对于I+N卡这一类的双卡笔记本,这款app上提供了 “使用intel集成显卡”、“使用大黄蜂方案”、“使用NV-Prime方案” 。第1种方案是关闭NVIDIA独显,只使用集显;第2、3种方案则是I卡和N卡混合使用。

话说回来,它的上架在当时可堪称“出道即巅峰”,短时间内就获得了颇为可观的点击和下载量,也侧面说明了大家对双卡(I+N)笔记本配置需求还是相当迫切的!不过收获高关注度的同时,各式各样的吐槽也像雪花般砸来:安装切换驱动方案时间过长、大黄蜂方案配置不成功、安装切换驱动显示失败······

这使得我们认为首先要针对这几个问题,做一个简单的解释:

  • 安装切换驱动方案时间过长!怎么破?

大家提到的“安装切换驱动方案时间过长”,主要是因为显卡驱动管理器为了保证正确安装(即安装成功后重启不会黑屏), 利用overlayroot技术设计了回退机制 ,因此总共需要三轮重启。

第一轮,overlayroot会在根文件系统上增加一次保护层,每次切换驱动时,首先在这个保护层上进行一遍,然后重启。第二轮,当系统起来后会跑一个3D测试程序(小茶壶),当3D测试程序运行成功,需要用户确认显示画质没有问题,点击确定,系统会再次重启。第三轮,退出overlayroot,在没有保护层的系统上进行安装。

当然,我们在后续的方案中会去掉这一回退机制。 过去之所以加上它,其实是担心用户安装完驱动后出现最坏的情况——系统起不来,黑屏!但实际上,出现这一问题的根本原因是仓库只有一个驱动版本,一旦安装在不支持的显卡机器上时,大概率会发生可怕的黑屏事件。

但今时可不同往日, 仓库已经有了多个版本的匹配安装,我们只需保证匹配准确率就可以了 ,自然无需再留下这样繁琐的机制,也不会再出现“爷爷,您的切换驱动终于安装好了!”这样悲伤的情况了~

  • 大黄蜂方案配置不成功?

大黄蜂配置失败的原因,其实是因为上游从2012年后就没有继续更新这个软件包。在之前使用418版本的NVIDIA闭源驱动版时,这个方案仍能配置成功。但后来我们系统仓库的N卡闭源驱动升级到460版本后,它的诸多问题就开始涌现出来。

在这一块,我们没有做修复原因主要有两个。第一,当前已经有更好的替代方案,即NV-Prime。第二,大黄蜂方案实际上并不太好。怎么定义这个“不太好”?这就体现在每次用户程序需要NVIDIA独显进行渲染显示时,都会在此用户程序前面加一个前缀(optirun)。

这是因为大黄蜂的前端程序会通过socket后台进程(bumblebeed)发送一个请求,这个时候,后台程序会另起一个Xorg用户程序,导致每次运行用户程序时,前面都会出现这个别扭的家伙,让人多少感觉到有些奇怪。

  • 关于双卡(I+N)笔记本配置一些改进计划

说了这么多关于显卡驱动管理器的情况,再说说我们接下来对双卡(I+N)笔记本配置的一些改进计划吧!

后续,我们打算只考虑三种配置方案—— 只使用I卡、只使用N卡、I卡和N卡混合使用(Prime offload) ,原本还有不少方案可供选择,但这些方案本身已经可以覆盖大部分的用户场景,所以我们将以这三种方案为主。另外,内核会提供配置接口,比如一个命令行工具,通过这个接口,用户就可以灵活自由地切换三种方案。

内核部分,目前我们将首先提供一个命名行工具,以完成上述安装、配置、切换任务,将最大程度地保证驱动安装和配置的准确性。而在交互界面上,前端部门可能会开发一个与之配套的交互界面,以保证大家在操作时的便捷性、易用性。前端和后端相互解耦,这样就能做到带给大家带来更好的使用体验,也方便我们去进行后续的维护。

到这里,我们的N卡驱动开发心得也就和大家唠的差不多了!

实际上,双显卡笔记本除了上述说的I+N卡这种组合机型,市面上还有很多A+N的机型,只不过关于这一块的配置目前我们还在摸索研究中。欢迎大家在20.7.1版本正式发布后积极试用,于文章下方留言,或在论坛分享你的见解,给我们更多宝贵的意见吧!

Reply Favorite View the author
All Replies
4 / 4
To page
Amber
deepin
2022-10-24 06:35
#61
神末shenmo

A+N泣不成声

就是啊,不过我是台式机,但是我是A+A(一般只用独显)

Reply View the author
我只管用
deepin
2022-10-30 12:36
#62

我特么反手就是一个赞

Reply View the author
tongge
deepin
2022-10-30 19:16
#63

事实证明,GT645M命令安装nvidia-legacy-390xx-driver还是可以驱动的,只是我设置了xorg.conf文件,大大们能不能优化一下

Reply View the author
skylighty
deepin
2022-11-01 23:59
#64

老版的显卡还是没自动安装好~

Reply View the author
xiang0703
deepin
2022-11-02 15:07
#65

GTX650,完全不行,字还是那么大。

Reply View the author
skylighty
deepin
2022-11-02 17:02
#66

在安装系统的时候可以搞个手动选择显卡驱动的界面,每个驱动给个大致的显卡适用范围。

Reply View the author
Leon
deepin
2023-04-04 13:49
#67

这个管理器应用市场里没有啊 怎么下

20.8社区版

Reply View the author
4 / 4
To page