更新到 19.10 后未检测到我的 Nvidia dGPU

Nov*_*Hak 3 gdm graphics nvidia-optimus nvidia-prime 19.10

从主题中可以猜出,我有一台 Optimus 笔记本电脑。只要我运行 19.04,我就能够使用 Prime(通过prime-select {intel|nvidia})切换到 Nvidia dGPU 并返回。不过,\xc2\xa0 升级到 19.10 后情况发生了变化:升级后的第二天,系统冻结,内核抱怨某些任务被卡住,例如某个任务rmmod。我设法通过运行恢复我的系统prime-select nvidia我设法通过在 chroot root 登录环境中

\n\n

我不会过多讨论侧面细节,例如从 initramfs 中删除 iGPU/dGPU 驱动程序(这些驱动程序对 initramfs 有何作用\xc2\xa0?),但现在它至少可以启动,无论有没有dGPU Prime 激活。

\n\n

这就是我遇到问题的地方\xc2\xa0:如果我的系统在激活 intel 配置文件的情况下启动,则切换到 nvidia 配置文件不起作用,因为在硬件中未检测到 dGPU。事实上,它没有出现在 lspci 列表中。我必须重新启动才能再次检测到 dGPU。因此,当我关闭系统时,我应该始终考虑提前激活 nvidia 配置文件,否则我将不得不重新启动才能在下次使用它。

\n\n

这是我的主要问题。另一个不那么烦人的问题是,当我从 nvidia 切换到 intel 时,我总是必须重新启动 gdm 服务。我可以接受这一点,但在 19.04 中我没有这个问题。

\n\n

欢迎就这个问题提出建议\xc2\xa0!要么阻止 dGPU 从硬件列表中消失,要么采用一种方法让系统再次检测到它,而无需重新启动。

\n\n

Fwiw,我的 iGPU 是 Intel HD Graphics 4600,我的 dGPU 是 Nvidia GTX 880M。

\n\n

编辑\xc2\xa0: \n@Syfer Polski,感谢您的信息丰富的回复\xc2\xa0!

\n\n

我注意到有一个按需配置文件,但我放弃了它,因为可能是一些无用的尝试,因为我不久前读到,真正有效的 Optimus 实现不会很快出现......我应该阅读 readme\xc2 \xa0!

\n\n

所以我立即尝试了按需配置文件。起初它不起作用,因为我的 430 驱动程序不支持它。应该有一些驱动程序检查拒绝为不运行支持版本的人启用配置文件,我怀疑这就是我的系统崩溃的原因,因为按需配置文件在升级过程中自动激活(仅假设我没有)暂时不要检查)。

\n\n

无论如何...所以我安装了 435 驱动程序,并且按需配置文件确实有效。然而,我觉得它不够令人满意,因为我的 GPU 在不使用时不会关闭,并且尝试在关闭时关闭电源也行不通。我尝试通过直接 ACPI 调用将其关闭,确实它已关闭,但是\xc2\xa0:

\n\n
NVRM: GPU at PCI:0000:01:00: GPU-9b8a3387-4913-0c33-619e-da118e532a5f\nNVRM: Xid (PCI:0000:01:00): 79, pid=29013, GPU has fallen off the bus.\nNVRM: GPU 0000:01:00.0: GPU has fallen off the bus.\nNVRM: A GPU crash dump has been created. If possible, please run\nNVRM: nvidia-bug-report.sh as root to collect this data before\nNVRM: the NVIDIA kernel module is unloaded.\n
Run Code Online (Sandbox Code Playgroud)\n\n

因此,对我来说不幸的是,只要专有驱动程序在不使用时无法关闭我的 dGPU,我想我会坚持使用经典的 intel/nvidia 配置文件系统。

\n\n

这让我回到了最初的问题,当我在启用英特尔模式\xc2\xa0的情况下启动时:如何在不重新启动\xc2\xa0的情况下恢复我的dGPU?

\n\n

重新扫描 ( echo 1 >/sys/bus/pci/rescan) 在日志\xc2\xa0 中显示它:

\n\n
pci 0000:01:00.0: [10de:1198] type 00 class 0x030000\npci 0000:01:00.0: reg 0x10: [mem 0xf6000000-0xf6ffffff]\npci 0000:01:00.0: reg 0x14: [mem 0xe0000000-0xefffffff 64bit pref]\npci 0000:01:00.0: reg 0x1c: [mem 0xf0000000-0xf1ffffff 64bit pref]\npci 0000:01:00.0: reg 0x24: [io  0xe000-0xe07f]\npci 0000:01:00.0: reg 0x30: [mem 0xf7000000-0xf707ffff pref]\npci 0000:01:00.0: 32.000 Gb/s available PCIe bandwidth, limited by 2.5 GT/s x16 link at 0000:00:01.0 (capable of 126.016 Gb/s with 8 GT/s x16 link)\npci 0000:01:00.0: vgaarb: VGA device added: decodes=io+mem,owns=none,locks=none\n
Run Code Online (Sandbox Code Playgroud)\n\n

但lspci却保持沉默。我可以通过 ACPI 调用随意打开/关闭设备,内核会在重新扫描时显示它,但驱动程序不会检测到它,因此不会加载。一定有事情要做,但是什么\xc2\xa0?

\n

Syf*_*ski 5

nvidia-primeUbuntu 19.04 和 19.10 之间再次发生了变化。

在 Ubuntu 16.04 和 Ubuntu 18.04 之间,Ubuntu 使用bbswitch社区构建的内核模块来关闭 Optimus 笔记本电脑中的 Nvidia GPU。然而,该模块已停止维护,因此在 Ubuntu 18.10(向后移植到 Ubuntu 18.04)中,GPU 之间的切换是通过加载开源驱动程序来处理的nouveau。然而,这并没有完全关闭 GPU(它仍然使用约 2W)。

与此同时,Nvidia 终于致力于与其他 GPU 驱动程序共存。GLVND(图形库供应商中立显示)成为 Xorg 1.20 中的一个东西,允许加载多个 GPU 驱动程序并为显示服务器供电。这允许精细控制 - 每个应用程序都可以使用单独的驱动程序。实际上,Optimus 笔记本电脑中几乎总是使用 Intel 和 Nvidia GPU。现在有三种模式prime-select可供您选择:

  • 英特尔
  • 一经请求
  • 英伟达

intel模式会物理关闭 Nvidia GPU,从而节省额外电量,但需要重新启动才能将其打开,而不仅仅是注销。nvidia是相反的。

对于经常切换模式的人,推荐使用按需模式——在 中on-demand,用于绘制程序的 GPU 由环境变量决定。OpenGL 和 Vulkan 应用程序有不同的环境变量,如果未设置,则使用集成(Intel)GPU。有关所涉及的环境变量的完整说明,请参阅Nvidia 的 README__NV_PRIME_RENDER_OFFLOAD ( 、__GLX_VENDOR_LIBRARY_NAME__VK_LAYER_NV_optimus

根据支持您的 GPU 的驱动程序系列,按需配置文件可能不适合您 - 最旧的受支持驱动程序似乎是 435 系列。