NVIDIA Optimus (简体中文)
NVIDIA Optimus 是一项允许英特尔(Intel)集成图形处理器(GPU)和英伟达(NVIDIA)独立图形处理器置入并通过一台笔记本电脑访问的技术。
可用方法
这里有几种可行的方法:
- #仅使用英特尔显卡 - 能节约用电,因为此时英伟达图形处理器是完全关闭(不通电)的。
- #仅使用英伟达显卡 - 能比英特尔显卡提供更强的性能表现,但是电量流失也更快(这对移动设备不太友好)。此方法和 optimus-manager 以及 nvidia-xrun 两者一样采用了相同的底层处理,所以在选用一种更自动化的方法之前,应该先利用这个方法来排除故障和验证一些常规功能。
- 两者兼用 (在需要的时候使用英伟达图形处理器,其他时候关闭它以节省电量):
- #使用 PRIME 渲染卸换(render offload) - 英伟达官方支持方法。
- #使用 optimus-manager - 用一个简单的命令切换显卡(需要注销重新登录来生效)。这可实现需要时使用英伟达图形处理器达到最大性能,不用时则将后者关闭。
- #使用 nvidia-xrun - 使用英伟达显卡在另外的 TTY 上运行单独的 X 会话。这可实现需要时使用英伟达图形处理器达到最大性能,不用时则将后者关闭。
- #使用大黄蜂(Bumblebee) - 提供了与 Windows 下相似的功能,可以选择需要的程序使用英伟达显卡,而其他的程序则用英特尔显卡运行。不过大黄蜂有重大的性能问题。
- #使用 nouveau - (与英伟达官方提供的专有驱动相比)提供的性能较差,而且可能导致睡眠和休眠问题。不适用于最新的英伟达图形处理器。
仅使用英特尔显卡
如果只考虑使用某一张显卡而不用切换的话,请检查电脑的 BIOS,那里应该有禁用某一显卡的选项。有些笔记本只允许禁用独立显卡,另一些则相反。但如果只想用两张显卡中的一张的话,还是值得去检查一下 BIOS 的。
如果 BIOS 不允许禁用掉英伟达显卡,那么可以从 Linux 内核本身禁用它。请参阅 Hybrid graphics#Fully Power Down Discrete GPU。
在不切换渲染提供程序情况下使用 CUDA
您可以在不切换渲染到英伟达显卡的情况下使用 CUDA。所要做的就是确保在启动 CUDA 程序前英伟达显卡已经打开(通电),详情请参见 Hybrid graphics#Fully Power Down Discrete GPU。
现在,当启动 CUDA 程序时,会自动加载必要的内核模块。在使用 CUDA 后要关闭英伟达显卡,请必须先将 nvidia
内核模块卸载:
# rmmod nvidia_uvm # rmmod nvidia
仅使用英伟达显卡
专有的英伟达驱动可配置为主渲染提供程序。它也有明显的画面撕裂问题 —— 除非通过启动 DRM 内核模式设定 启用 PRIME Sync,更多信息请参见 [1]。专有驱动确实允许使用独立图形处理器,而且(截至 2017 年一月)它相比 nouveau 驱动有更明显的性能优势。
首先,安装 英伟达驱动和 xorg-xrandr 软件包。然后,配置 /etc/X11/xorg.conf.d/10-nvidia-drm-outputclass.conf
,其中的选项将与软件包提供的 /usr/share/X11/xorg.conf.d/10-nvidia-drm-outputclass.conf
文件结合提供与此配置的兼容性。
/etc/X11/xorg.conf.d/10-nvidia-drm-outputclass.conf
Section "OutputClass" Identifier "intel" MatchDriver "i915" Driver "modesetting" EndSection Section "OutputClass" Identifier "nvidia" MatchDriver "nvidia-drm" Driver "nvidia" Option "AllowEmptyInitialConfiguration" Option "PrimaryGPU" "yes" ModulePath "/usr/lib/nvidia/xorg" ModulePath "/usr/lib/xorg/modules" EndSection
接下来,请在 ~/.xinitrc
文件的开头处添加下列两行内容:
~/.xinitrc
xrandr --setprovideroutputsource modesetting NVIDIA-0 xrandr --auto
现在重启以加载驱动,X 服务器也应该启动了。
如果显示 DPI 不正确,请再添加下列一行:
xrandr --dpi 96
如果在启动 X 服务器时出现黑屏,请确保 ~/.xinitrc
文件中的两个 xrandr
命令后面没有“与(&)”符号。如果有“与(&)”号,窗口管理器似乎可以在 xrandr
命令执行完成前就运行了,从而导致了黑屏。
显示管理器
如果打算使用显示管理器 (Display Manager, DM),就不是使用 ~/.xinitrc
文件了,而是需要为显示管理器创建或编辑显示配置脚本。
LightDM
为 LightDM 显示管理器创建/编辑脚本:
/etc/lightdm/display_setup.sh
#!/bin/sh xrandr --setprovideroutputsource modesetting NVIDIA-0 xrandr --auto
然后赋予脚本可执行权限:
# chmod +x /etc/lightdm/display_setup.sh
通过编辑 /etc/lightdm/lightdm.conf
的 [Seat:*]
部分配置 LightDM 来运行这个脚本:
# nano /etc/lightdm/lightdm.conf
[Seat:*] display-setup-script=/etc/lightdm/display_setup.sh
现在重启,然后显示管理器应该能启动了。
SDDM
为 SDDM 显示管理器创建/编辑脚本(SDDM 是 KDE 的默认显示管理器):
/usr/share/sddm/scripts/Xsetup
xrandr --setprovideroutputsource modesetting NVIDIA-0 xrandr --auto
GDM
要为 GDM 创建启动脚本,请创建两个新的 .desktop 文件,如下:
/usr/share/gdm/greeter/autostart/optimus.desktop /etc/xdg/autostart/optimus.desktop
[Desktop Entry] Type=Application Name=Optimus Exec=sh -c "xrandr --setprovideroutputsource modesetting NVIDIA-0; xrandr --auto" NoDisplay=true X-GNOME-Autostart-Phase=DisplayServer
并且请确保 GDM 使用 Xorg 作为后端。
检查 3D 设置
可通过安装 mesa-demos 并运行以下命令来检查英伟达显卡是否被使用:
$ glxinfo | grep NVIDIA
更多信息
更多信息请参见英伟达官方网页上的这个主题文章 [2]。
疑难解答
垂直同步撕裂
xorg-server需要 1.19 或更高版本,linux内核需要4.5 或更高版本,nvidia需要370.23更高版本。还需要开启DRM kernel mode setting设置项以修复撕裂问题。
官方论坛查看详细信息:forum thread。
Failed to initialize the NVIDIA GPU at PCI:1:0:0 (GPU fallen off the bus / RmInitAdapter failed!)
添加 rcutree.rcu_idle_gp_delay=1
到内核参数。原始话题见[3]。
分辨率和屏幕扫描错误“EDID errors in Xorg.log”
这是由于NVIDIA的驱动程序没有检测显示器的EDID。你需要手动指定路径的EDID文件或以类似的方式提供相同的信息。
增加这些线路和变化部分反映你自己的系统:
/etc/X11/xorg.conf
Section "Device" Option "ConnectedMonitor" "CRT-0" Option "CustomEDID" "CRT-0:/sys/class/drm/card0-LVDS-1/edid" Option "IgnoreEDID" "false" Option "UseEDID" "true" EndSection
如果xorg不会开始尝试更换所有CRT到DFB。显示器连接通过LVDS,card0是标识为英特尔卡。EDID二进制是这个目录。如果硬件配置不同,CustomEDID的值可能有所不同,但这已得到证实。不管怎样,路径都将从/sys/class/drm开始
或者你可以生成你的工具,如读取read-edid,将驱动点指向这个文件。也可以使用modelines,但是务必要修改 "UseEDID" 和 "IgnoreEDID"。
锁定问题(lspci 挂起)
问题:lspci挂起,系统暂停失败,关机时挂起,optirun挂起。多出现在新的笔记本电脑或使用了类似bbswitch GTX的965m时(例如bumblebee)以及nouveau的情况。
当独立显卡接通电源,可能出现这种情况,参见 (kernel bug 156341)。
具体解决方法参见 this issue。
你可以添加acpi_osi="!Windows 2015"
或acpi_osi=! acpi_osi="Windows 2009"
到Kernel parameters中。
笔记本电脑未发现屏幕/NVIDIA Optimus
检查$ lspci | grep VGA
输入内容是否类似:
00:02.0 VGA compatible controller: Intel Corporation Core Processor Integrated Graphics Controller (rev 02) 01:00.0 VGA compatible controller: nVidia Corporation Device 0df4 (rev a1)
NVIDIA驱动自319.12 Beta [4]起已经包含在内核(版本3.9级以上)中。
另一个解决方案是安装Intel驱动进行显示,如果需要运行3D软件,可以使用 Bumblebee (简体中文)来使用NVIDIA显卡。
使用可切换显卡
使用 PRIME 渲染卸换(render offload)
这是英伟达为支持可切换显卡提供的官方方法。
详情请参见 PRIME#PRIME render offload。
使用 nouveau
要了解显卡切换相关内容,请参见 PRIME;要了解开源英伟达驱动相关内容,请参见 nouveau。
使用大黄蜂(Bumblebee)
请参见 Bumblebee。
使用 nvidia-xrun
请参见 nvidia-xrun。
使用 optimus-manager
请参见 Optimus-manager 上游文档。其中包含了在 Arch Linux 系统上的安装和配置方法。