发挥NVIDIA PRIME的全部功力:真·自动切换(一)
Tofloor
poster avatar
risez
deepin
2020-10-03 03:45
Author
本帖最后由 risez 于 2020-10-2 22:51 编辑

先提示:真自动切换的功能默认没有启用!如果你的独显符合要求且正在使用Prime方案,请务必看本文!由于字数限制,我将本文拆分为多篇。
在我发了这篇贴子:https://bbs.deepin.org/post/191741#之后,我收到了坛友们的积极反馈,而且论坛的大佬在写I+N双显卡自动切换教程时多多少少提到了我的贴子,说明I+N双显卡自动切换方案的确是大家的刚需。我很高兴我能为社区做出点贡献。
我在上篇文章中提到,只有turing及更新架构的显卡才支持真正的自动切换,而且在那篇文章里还存在一些我当时在认识上的错误。在这篇文章中,我将纠正错误,并且讲述如何发挥NVIDIA PRIME的全部功力。我不是显卡方面的专家,如果我在这篇文章中还存在一些认识上的错误,欢迎大佬们指出。在语言上我会以通俗易懂的方式写这篇文章,所以不用担心看不懂。
何为真正的自动切换?简单来说,就是需要使用独显时,给独显通电(激活独显),满足使用需求,而在不需要的时候,关闭独显的电源以省电。而我在那篇文章中提到的假自动切换,就是在你需要使用独显的时候,驱动程序会判断应用程序是否需要独显,如果需要,调用独显,让应用程序在独显上跑,如果不需要,则不调用,独显继续保持低功率运行以省电,但就是不能完全关闭电源。既然真自动切换不仅拥有我在假自动切换提到的功能,还可以自动关闭整个独显的电源,对我来说,不去折腾折腾怎么行?
不久前我刚买了一台新电脑,独显刚好是1650(Turing架构),正好测试一下PRIME的关键功能:PCI-Express运行时D3(RTD3)电源管理(机翻,英文名为PCI-Express Runtime D3 (RTD3) Power Management),我称它为动态电源管理。经过我几十次重启+重装三次系统,终于用上这个功能了。为何要如此折腾,直接抄官方文档不就行了吗?官方文档的编写时间离现在有些久远了,不经过充分测试怎么知道官方文档的方案还能不能正常使用?所以才有了这篇文章,这样可以让大家少走弯路。
我的机器配置:

参考文档(本文不是直接复制粘贴官方文档的方法,我还补充了一些官方文档没有讲到的细节问题):
Chapter 22. PCI-Express Runtime D3 (RTD3) Power Management
Chapter 21. Configuring Power Management Support
Chapter 34. PRIME Render Offload
Laptop GPU Power Management

准备
严重警告:这是一项实验性的功能,其稳定性尚未知晓,只有经过大量的测试才能验证。我不能保证该功能可以在你的电脑上正常启用,所以为了你的系统安全,我强烈建议你备份系统,以便随时还原。你可能需要花费大量的时间测试这项功能在你的电脑上是否能稳定的正常运行,包括多次重启,打开一些需要独显的软件测试该功能,等等。如果你愿意花时间参与测试,请将测试情况发到这个贴子,这样可以为社区做贡献。
你的电脑必须满足这些要求,才能使用这个功能:
  • 当前只有笔记本电脑支持这个功能(都过了一两年了,台式机的可以试试,看看有没有变化)
  • 机翻:此功能需要系统硬件以及ACPI支持(控制PCIe电源需要ACPI“ _PR0”和“ _PR3”method),必要的硬件和ACPI支持首先在Intel Coffeelake芯片组系列中添加。因此,Intel Coffeelake芯片组系列支持此功能。
    查看自己的Intel芯片是否为Coffeelake芯片组:
    1. lspci -P | grep 00:00.0
    Copy the Code

    如果输出类似于这样:
    1. 00:00.0 Host bridge: Intel Corporation 8th Gen Core 4-core Processor Host Bridge/DRAM Registers [Coffee Lake H] (rev 07) #注意[Coffee Lake H]
    Copy the Code

    那么CPU的芯片组确实是Coffeelake,如果没有输出,直接lspci -P ,然后自己找到CPU的条目查看。
  • GPU架构必须是Turing及更新架构
  • Linux内核版本必须大于等于4.18,这个功能在低于这个版本的内核上极有可能无法工作
  • 当Linux内核定义CONFIG_PM(CONFIG_PM = y)时,支持此功能。通常,如果系统支持S3(挂起至RAM),则将定义CONFIG_PM。(这个一般都定义了)



一个NVIDIA GPU可能具有一个或多个"CI functions":
  • Function 0: VGA controller / 3D controller(VGA控制器/ 3D控制器)
  • Function 1: Audio device(音频设备)
  • Function 2: USB xHCI Host controller(USB xHCI主机控制器)
  • Function 3: USB Type-C UCSI controller(USB Type-C UCSI控制器)

通过以下命令确认你的显卡有几个PCI functions(可以理解为PCI接口):
  1. lspci | grep NVIDIA
Copy the Code

这是我的输出:
  1. 01:00.0 VGA compatible controller: NVIDIA Corporation TU117M [GeForce GTX 1650 Mobile / Max-Q] (rev a1)
  2. 01:00.1 Audio device: NVIDIA Corporation Device 10fa (rev a1)
Copy the Code

记下那个01:00.0,以此类推,function 1(音频设备)应该是01:00.1,function 2应该是01:00.2,function 3应该是01:00.3,如果不是,请根据自己的实际情况进行记录。


你还必须知道:在这四个接口中,只有function 0才是由NVIDIA驱动程序管理的,其它三个则是由Linux内核提供的驱动进行管理。根据官方文档描述,这三个接口对应的驱动的电源管理还不成熟以及存在一些bug,不能很好的配合NVIDIA驱动程序一起开启/关闭GPU对应的接口,所以这部分就需要坛友们加以测试,我的测试结果会在后面说。

注:另查到这三个接口对应的驱动均拥有了较为成熟的电源管理(Power Management,简称PM),故后面将启用这些接口的电源管理功能,该资料同样来自官方的文档,说明官方文档更新不及时,所以大家在参考官方文档时应多加思考,避免入坑。但即便如此,也需要经过大量测试以验证其有效性。

本文所有部分链接:
一:https://bbs.deepin.org/post/203224#=1##pid786085
二:https://bbs.deepin.org/post/203225#=1##pid786087
三:https://bbs.deepin.org/post/203226#=1##pid786088
四:https://bbs.deepin.org/post/203227#=1##pid786089
五:https://bbs.deepin.org/post/203228#=1##pid786090

Reply Favorite View the author
All Replies
忘记、过去
Moderator
2020-10-03 04:19
#1
感谢大佬打消了我瞎折腾的危险想法

7代u+pascal架构显卡果然是被淘汰了啊......
Reply View the author
lcw0268
deepin
2020-10-03 04:54
#2
然后呢?
下集呢?
Reply View the author
leezn
deepin
2020-10-03 05:25
#3
1060假自动切换,除了耗电外 ,其他可有什么问题影响?
Reply View the author
risez
deepin
2020-10-03 06:26
#4
https://bbs.deepin.org/post/203224
然后呢?
下集呢?

今天编写了一天,太累了,没有及时排好版,马上补
Reply View the author
lcw0268
deepin
2020-10-03 06:32
#5
https://bbs.deepin.org/post/203224
今天编写了一天,太累了,没有及时排好版,马上补

3集我都看了,好文章。
不急,不急,慢慢来。别累着了。
Reply View the author
risez
deepin
2020-10-03 06:40
#6
https://bbs.deepin.org/post/203224
3集我都看了,好文章。
不急,不急,慢慢来。别累着了。

现在已经补好了,文章的最后有链接
Reply View the author
risez
deepin
2020-10-03 06:42
#7
https://bbs.deepin.org/post/203224
感谢大佬打消了我瞎折腾的危险想法

7代u+pascal架构显卡果然是被淘汰了啊...... ...

求大佬快开发一个一键配置插件啊,手动配置太麻烦了
Reply View the author
risez
deepin
2020-10-03 06:53
#8
https://bbs.deepin.org/post/203224
1060假自动切换,除了耗电外 ,其他可有什么问题影响?

没有影响。
Reply View the author
mardou
deepin
2020-10-03 23:26
#9
我确实没看懂你这“系列剧”要解决什么问题。如果在关于显卡驱动问题上列出常见几个问题,并通过终端得以解决相应问题的一二三,那么这样类似我这样的大白们看起来更加通俗易懂,更能模仿操作了。但无论如何要感谢你为坛友们付出了劳动,谢谢。
Reply View the author
mardou
deepin
2020-10-03 23:31
#10
能方便看看的我的情况吗。按照你的方法 ,在终端输入了指令,貌似与你说的情况不同。结果如下:
mardou@mardou-PC:~$ lspci -p | grep 00:00.0
lspci: option requires an argument -- 'p'
Usage: lspci []

Basic display modes:
-mm             Produce machine-readable output (single -m for an obsolete format)
-t              Show bus tree

Display options:
-v              Be verbose (-vv for very verbose)
-k              Show kernel drivers handling each device
-x              Show hex-dump of the standard part of the config space
-xxx            Show hex-dump of the whole config space (dangerous; root only)
-xxxx           Show hex-dump of the 4096-byte extended config space (root only)
-b              Bus-centric view (addresses and IRQ's as seen by the bus)
-D              Always show domain numbers

Resolving of device ID's to names:
-n              Show numeric ID's
-nn             Show both textual and numeric ID's (names & numbers)
-q              Query the PCI ID database for unknown ID's via DNS
-qq             As above, but re-query locally cached entries
-Q              Query the PCI ID database for all ID's via DNS

Selection of devices:
-s [[[[]:]]:][][.[]]   Show only devices in selected slots
-d []:[][:]              Show only devices with specified ID's

Other options:
-i        Use specified ID database instead of /usr/share/misc/pci.ids.gz
-p        Look up kernel modules in a given file instead of default modules.pcimap
-M              Enable `bus mapping' mode (dangerous; root only)

PCI access options:
-A      Use the specified PCI access method (see `-A help' for a list)
-O =  Set PCI access parameter (see `-O help' for a list)
-G              Enable PCI access debugging
-H        Use direct hardware access ( = 1 or 2)
-F        Read PCI configuration dump from a given file
mardou@mardou-PC:~$
Reply View the author
risez
deepin
2020-10-05 07:56
#11
mardou 发表于 2020-10-3 15:26
我确实没看懂你这“系列剧”要解决什么问题。如果在关于显卡驱动问题上列出常见几个问题,并通过终端得以解 ...

该问题解决的是NVIDIA显卡默认不会自己关闭(断掉整个芯片的电源)以便省电的问题,很抱歉我的语文水平有限,不知道如何表达我想说的意思…
Reply View the author
risez
deepin
2020-10-05 07:59
#12
mardou 发表于 2020-10-3 15:31
能方便看看的我的情况吗。按照你的方法 ,在终端输入了指令,貌似与你说的情况不同。结果如下:
mardou@mar ...

把小写-p改成大写的-P
Reply View the author
booting
deepin
2020-10-05 16:54
#13
乏了乏了,每次折腾显卡,加上是Pascal架构的GTX1050,看看就好。大佬给力!
Reply View the author
忘记、过去
Moderator
2020-10-05 22:10
#14
https://bbs.deepin.org/post/203224
乏了乏了,每次折腾显卡,加上是Pascal架构的GTX1050,看看就好。大佬给力!

1050基本上按照楼主以前的帖子搞好 nvidia-prime 之后就没问题了,休眠唤醒不会有 prime 失效的问题。费点电就费点吧
Reply View the author
mardou
deepin
2020-10-06 00:25
#15
https://bbs.deepin.org/post/203224
把小写-p改成大写的-P

我试了一下,发现把小写 -p改为大写 -P的输出结果是一样的。
Reply View the author
lanyun7112
deepin
2020-10-06 00:39
#16
虽然我的显卡不支持,但还是强烈支持大佬!
Reply View the author
risez
deepin
2020-10-14 02:11
#17
https://bbs.deepin.org/post/203224
我试了一下,发现把小写 -p改为大写 -P的输出结果是一样的。

把p换成q试试
Reply View the author
183******19
deepin
2022-01-28 06:43
#18

网上很少讲安装intel的官方核显linux驱动,有的是讲的intel hd630的官方linux驱动,就没有intel uhd630的官方linux驱动。博主能不能出一期关于10代处理器以后的intel核显官方linux的核显驱动安装啊

Reply View the author
183******19
deepin
2022-01-28 06:48
#19

也是笔记本的双显卡,intel uhd630 ,10代处理器,加nvidia 3060的显卡。想先解决intel官方的核显linux驱动,再来双显卡切换方案!

Reply View the author