NVIDIA/提示和技巧 - Arch Linux 中文维基
主页
维基
ArchWiki
论坛
AUR
[archlinuxcn] 仓库
下载
跳转到内容
为避免本站因各种原因无法访问,建议用户安装
arch-wiki-docs-zh-cn
CNRepo
或者
arch-wiki-docs-zh-tw
CNRepo
离线文档包备用,也可尝试使用经由Cloudflare CDN的替代版本
aw.lilydjwg.me
来自 Arch Linux 中文维基
NVIDIA
翻译状态:
本文(或部分内容)译自
NVIDIA/Tips and tricks
,最近一次同步于 2025-01-24,若英文版本有所
更改
,则您可以帮助同步与
翻译
更改的内容。
您可以在
ArchWiki 的对应页面
找到本文翻译的
原始
修订历史。
本文可能与英文原文存在出入。
这篇文章或章节的
翻译
质量不佳。
原因:
先前使用的 AI 翻译存在较多问题,此页需要修改,目前请先阅读英文 ArchWiki 上的对应页面。(在
Talk:NVIDIA/提示和技巧#
中讨论)
修复终端分辨率
编辑
编辑源代码
从 nouveau 切换可能会导致启动终端以较低分辨率显示。
对于 GRUB,请参阅
GRUB/Tips and tricks#设置帧缓冲分辨率
获取详细信息。
[1]
[2]
对于
systemd-boot
,请在
esp
/loader/loader.conf
中设置
console-mode
。详情请参阅
systemd-boot#启动选单配置
对于
rEFInd
,请在
esp
/EFI/refind/refind.conf
中设置
use_graphics_for +,linux
[3]
一个小问题是,这会在启动时隐藏内核参数的显示。
提示:
如果上述方法无法修复您的终端分辨率,可能需要在 UEFI 设置中完全禁用 Legacy BIOS 模式(通常称为兼容性支持模块,CSM 或 Legacy Boot)。在继续之前,请确保所有设备都配置为使用 UEFI 启动。
使用电视输出
编辑
编辑源代码
参见
Wikibooks:NVIDIA/TV-OUT
使用电视(DFP)作为唯一显示器的 X 配置
编辑
编辑源代码
如果未自动检测到显示器,X 服务器会回退到 CRT-0。当使用 DVI 连接的电视作为主显示器,并且在电视关闭或断开连接时启动 X 时,这可能会成为一个问题。
要强制 NVIDIA 使用 DFP,请将 EDID 的副本存储在文件系统中的某个位置,以便 X 可以解析该文件,而不是从电视/DFP 读取 EDID。
要获取 EDID,请启动
nvidia-settings
。它会以树形格式显示一些信息,暂时忽略其他设置,选择 GPU(相应的条目应标为 "GPU-0" 或类似名称),点击
DFP
部分(同样,
DFP-0
或类似名称),点击
获取 EDID
按钮并将其存储在某个位置,例如
/etc/X11/dfp0.edid
如果前端没有连接鼠标和键盘,可以仅使用命令行获取 EDID。运行一个足够详细的 X 服务器以打印出 EDID 块:
$ startx -- -logverbose 6
X 服务器完成初始化后,关闭它,您的日志文件可能会在
/var/log/Xorg.0.log
中。使用
nvidia-xconfig
提取 EDID 块:
$ nvidia-xconfig --extract-edids-from-file=/var/log/Xorg.0.log --extract-edids-output-file=/etc/X11/dfp0.bin
编辑
xorg.conf
,在
Device
部分添加:
Option "ConnectedMonitor" "DFP"
Option "CustomEDID" "DFP-0:/etc/X11/dfp0.bin"
ConnectedMonitor
选项强制驱动程序将 DFP 识别为已连接。
CustomEDID
为设备提供 EDID 数据,这意味着它将像在 X 进程期间电视/DFP 已连接一样启动。
这样,您可以在启动时自动启动显示管理器,并在电视开机时拥有一个正常工作和正确配置的 X 屏幕。
如果上述更改没有生效,您可以在
xorg.conf
Device
部分尝试删除
Option "ConnectedMonitor" "DFP"
并添加以下行:
Option "ModeValidation" "NoDFPNativeResolutionCheck"
Option "ConnectedMonitor" "DFP-0"
NoDFPNativeResolutionCheck
防止 NVIDIA 驱动程序禁用所有不符合原生分辨率的模式。
无显示器(Headless)分辨率
编辑
编辑源代码
在无显示器模式下,分辨率会回退到 640x480,这是 VNC 或 Steam Link 使用的分辨率。要以更高的分辨率(例如 1920x1080)启动,请在
xorg.conf
Screen
子节中指定一个
Virtual
条目:
Section "Screen"
[...]
SubSection "Display"
Depth 24
Virtual 1920 1080
EndSubSection
EndSection
提示:
使用无显示器模式可能会比较复杂且容易出错。例如,在无显示器模式下,桌面环境和
nvidia-utils
不提供图形化的方式来更改分辨率。为了便于设置分辨率,可以使用 DP 或 HDMI 虚拟适配器,模拟连接到该端口的显示器的存在。然后可以通过远程会话(如 VNC 或 Steam Link)正常更改分辨率。
检查电源来源
编辑
编辑源代码
NVIDIA X.org 驱动也可以用来检测 GPU 当前的电源来源。要查看当前的电源来源,请检查 'GPUPowerSource' 只读参数(0 - 交流电,1 - 电池):
$ nvidia-settings -q GPUPowerSource -t
监听 ACPI 事件
编辑
编辑源代码
NVIDIA 驱动程序会自动尝试连接到
acpid
守护进程,并监听诸如电池电量、扩展坞、某些热键等 ACPI 事件。如果连接失败,X.org 将输出以下警告:
~/.local/share/xorg/Xorg.0.log
NVIDIA(0): ACPI: failed to connect to the ACPI event daemon; the daemon
NVIDIA(0): may not be running or the "AcpidSocketPath" X
NVIDIA(0): configuration option may not be set correctly. When the
NVIDIA(0): ACPI event daemon is available, the NVIDIA X driver will
NVIDIA(0): try to use it to receive ACPI event notifications. For
NVIDIA(0): details, please see the "ConnectToAcpid" and
NVIDIA(0): "AcpidSocketPath" X configuration options in Appendix B: X
NVIDIA(0): Config Options in the README.
虽然完全无害,但你可以通过在
/etc/X11/xorg.conf.d/20-nvidia.conf
中禁用
ConnectToAcpid
选项来消除此消息:
Section "Device"
...
Driver "nvidia"
Option "ConnectToAcpid" "0"
...
EndSection
如果你使用的是笔记本电脑,安装并启用
acpid
守护进程可能是个好主意。
在 shell 中显示 GPU 温度
编辑
编辑源代码
有三种方法可以查询 GPU 温度。
nvidia-settings
要求你正在使用 X,而
nvidia-smi
nvclock
则不需要。另外请注意,
nvclock
目前不适用于较新的 NVIDIA 显卡,如 GeForce 200 系列显卡以及嵌入式 GPU,如 Zotac IONITX 的 8800GS。
nvidia-settings
编辑
编辑源代码
要在 shell 中显示 GPU 温度,请使用
nvidia-settings
,如下所示:
$ nvidia-settings -q gpucoretemp
Attribute 'GPUCoreTemp' (hostname:0[gpu:0]): 49.
'GPUCoreTemp' is an integer attribute.
'GPUCoreTemp' is a read-only attribute.
'GPUCoreTemp' can use the following target types: GPU.
该主板的 GPU 温度为 49 °C。
为了仅获取温度以用于
rrdtool
conky
等工具:
$ nvidia-settings -q gpucoretemp -t
49
nvidia-smi
编辑
编辑源代码
使用
nvidia-smi
,它可以直接从 GPU 读取温度,而无需使用 X,例如在运行 Wayland 或无头服务器时。
要在 shell 中显示 GPU 温度,请使用
nvidia-smi
$ nvidia-smi
Wed Feb 28 14:27:35 2024
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 550.54.14 Driver Version: 550.54.14 CUDA Version: 12.4 |
|-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 NVIDIA GeForce GTX 1660 Ti Off | 00000000:01:00.0 On | N/A |
| 0% 49C P8 9W / 120W | 138MiB / 6144MiB | 2% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+

+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| 0 N/A N/A 223179 G weston 120MiB |
+-----------------------------------------------------------------------------------------+
仅获取温度:
$ nvidia-smi -q -d TEMPERATURE
==============NVSMI LOG==============

Timestamp  : Wed Feb 28 14:27:35 2024
Driver Version  : 550.54.14
CUDA Version  : 12.4

Attached GPUs  : 1
GPU 00000000:01:00.0
Temperature
GPU Current Temp  : 49 C
GPU T.Limit Temp  : N/A
GPU Shutdown Temp  : 95 C
GPU Slowdown Temp  : 92 C
GPU Max Operating Temp  : 90 C
GPU Target Temperature  : 83 C
Memory Current Temp  : N/A
Memory Max Operating Temp  : N/A
为了仅获取温度以用于
rrdtool
conky
等工具:
$ nvidia-smi --query-gpu=temperature.gpu --format=csv,noheader,nounits
49
nvclock
编辑
编辑源代码
安装
nvclock
AUR
包。
注意:
nvclock
无法访问较新的 NVIDIA 显卡(如 GeForce 200 系列显卡)上的温度传感器。
nvclock
nvidia-settings
nv-control
报告的温度之间可能存在显著差异。根据
nvclock
的作者(thunderbird)在
这篇帖子
中的说法,
nvclock
的值应该更准确。
超频与散热
编辑
编辑源代码
警告:
超频可能会永久损坏您的硬件。您已被警告。
在 nvidia-settings 中启用超频
编辑
编辑源代码
注意:
如果 Xorg 服务器以无根模式运行,则无法应用超频设置。考虑
以 root 身份运行 Xorg
启用 DRM 内核模式设置可能会导致超频不可用,无论 Coolbits 值如何。
超频通过
Device
部分中的
Coolbits
选项控制,该选项启用了各种不受支持的功能:
Option "Coolbits" "
value
提示:
可以使用
nvidia-xconfig
轻松控制
Coolbits
选项,它会操作 Xorg 配置文件:
# nvidia-xconfig --cool-bits=
value
Coolbits
值是二进制数系统中其组成位的总和。组成位如下:
(位 0) - 在
nvidia-settings
时钟频率
页面上启用旧版(Fermi 之前)核心的超频。
(位 1) - 设置此位时,驱动程序将“尝试在使用具有不同显存量的 GPU 时初始化 SLI”。
(位 2) - 在
nvidia-settings
温度监控
页面上启用手动配置 GPU 风扇速度。
(位 3) - 在
nvidia-settings
PowerMizer
页面上启用超频。自 337.12 版本起适用于 Fermi 架构及更新架构。
[4]
16
(位 4) - 使用
nvidia-settings
CLI 选项启用超压。自 346.16 版本起适用于 Fermi 架构及更新架构。
[5]
要启用多个功能,请将
Coolbits
值相加。例如,要启用 Fermi 核心的超频和超压,请设置
Option "Coolbits" "24"
Coolbits
的文档可以在
/usr/share/doc/nvidia/html/xconfigoptions.html
这里
找到。
注意:
另一种方法是在 DOS 下(首选)或在 Win32 环境中通过
nvflash
NiBiTor 6.0
编辑并重新刷写 GPU BIOS。刷写 BIOS 的优势在于不仅可以提高电压限制,而且通常比 Coolbits 等软件超频方法更稳定。
Fermi BIOS 修改教程
设置静态 2D/3D 时钟
编辑
编辑源代码
使用
kernel module parameter
参数以最大性能级别启用 PowerMizer(没有此设置,VSync 将无法工作):
/etc/modprobe.d/nvidia.conf
options nvidia NVreg_RegistryDwords="PerfLevelSrc=0x2222"
降低 GPU Boost 时钟
编辑
编辑源代码
对于
Ampere (NV170/GA
XXX
GPU 及更高版本,时钟提升的工作方式不同,最大时钟在启动时设置为支持的最高限制。如果这是您想要的,则无需进一步配置。
缺点是电源效率较低。随着时钟速度的提高,需要增加电压以保持稳定性,从而导致功耗、发热和风扇噪音的非线性增加。因此,降低提升时钟限制将提高效率。
可以使用 nvidia-smi 更改提升时钟限制,以 root 身份运行:
列出支持的时钟速率:
$ nvidia-smi -q -d SUPPORTED_CLOCKS
将 GPU 提升时钟限制设置为 1695 MHz:
# nvidia-smi --lock-gpu-clocks=0,1695 --mode=1
将内存提升时钟限制设置为 5001 MHz:
# nvidia-smi --lock-memory-clocks=0,5001
为了优化效率,请使用 nvidia-smi 检查运行您最喜欢的游戏时的 GPU 利用率。VSync 应开启。降低提升时钟限制将增加 GPU 利用率,因为较慢的 GPU 将使用更多时间来渲染每一帧。最佳效率是在不会导致卡顿的最低时钟下实现的,当利用率达到 100% 时会出现卡顿。然后,每一帧都可以渲染得足够快以跟上刷新率。
例如,在 RTX 3090 Ti 上使用上述设置而不是默认设置,在 4K@60 下玩 Hitman 3 时,功耗降低了 30%,温度从 75 度降至 63 度,风扇速度从 73% 降至 57%。
保存超频设置
编辑
编辑源代码
通常,在
nvidia-settings
界面中插入的时钟和电压偏移不会保存,重启后会丢失。
幸运的是,有一些工具提供了在专有驱动程序下进行超频的界面,能够保存用户的超频偏好并在启动时自动应用它们。
其中一些工具是:
gwe
AUR
- 图形界面,在桌面会话启动时应用设置
nvclock
AUR
systemd-nvclock-unit
AUR
- 图形界面,在系统启动时应用设置
nvoc
AUR
- 基于文本,配置文件位于
/etc/nvoc.d/
,在桌面会话启动时应用设置
否则,可以在
启动
时在
nvidia-settings
的命令行界面中设置
GPUGraphicsClockOffset
GPUMemoryTransferRateOffset
属性。例如:
$ nvidia-settings -a "GPUGraphicsClockOffset[
performance_level
]=
offset
$ nvidia-settings -a "GPUMemoryTransferRateOffset[
performance_level
]=
offset
其中
performance_level
是最高性能级别的编号。如果机器上有多个 GPU,则应指定 GPU ID:
[gpu:
gpu_id
]GPUGraphicsClockOffset[
performance_level
]=
offset
自定义 TDP 限制
编辑
编辑源代码
现代 NVIDIA 显卡会限制频率以保持在 TDP 和温度限制内。为了提高性能,可以更改 TDP 限制,这将导致更高的温度和更高的功耗。
例如,将功耗限制设置为 160.30W:
# nvidia-smi -pl 160.30
要在启动时设置功耗限制(无需驱动程序持久性):
/etc/systemd/system/nvidia-tdp.timer
[Unit]
Description=Set NVIDIA power limit on boot

[Timer]
OnBootSec=5

[Install]
WantedBy=timers.target
/etc/systemd/system/nvidia-tdp.service
[Unit]
Description=Set NVIDIA power limit

[Service]
Type=oneshot
ExecStart=/usr/bin/nvidia-smi -pl 160.30
现在
启用
nvidia-tdp.timer
在登录时设置风扇速度
编辑
编辑源代码
本文或本章节的语言、语法或风格需要改进。参考:
帮助:风格
原因:
请参阅
#在 nvidia-settings 中启用超频
以了解
Coolbits
的描述。(在
Talk:NVIDIA/提示和技巧
讨论)
您可以使用
nvidia-settings
控制台界面调整显卡的风扇速度。首先确保您的 Xorg 配置已在
Coolbits
选项中启用了位 2。
注意:
GeForce 400/500 系列显卡目前无法使用此方法在登录时设置风扇速度。此方法仅允许通过
nvidia-settings
在当前 X 会话中设置风扇速度。
将以下行放入您的
xinitrc
文件中,以在启动 Xorg 时调整风扇速度。将
替换为您要设置的风扇速度百分比。
nvidia-settings -a "[gpu:0]/GPUFanControlState=1" -a "[fan:0]/GPUTargetFanSpeed=
您还可以通过增加 GPU 和风扇编号来配置第二个 GPU。
nvidia-settings -a "[gpu:0]/GPUFanControlState=1" -a "[fan:0]/GPUTargetFanSpeed=
" \
-a "[gpu:1]/GPUFanControlState=1" -a [fan:1]/GPUTargetFanSpeed=
" &
如果您使用
GDM
SDDM
等登录管理器,可以创建一个桌面条目文件来处理此设置。创建
~/.config/autostart/nvidia-fan-speed.desktop
并将此文本放入其中。再次将
更改为您想要的速度百分比。
[Desktop Entry]
Type=Application
Exec=nvidia-settings -a "[gpu:0]/GPUFanControlState=1" -a "[fan:0]/GPUTargetFanSpeed=
X-GNOME-Autostart-enabled=true
Name=nvidia-fan-speed
注意:
在驱动程序版本 349.16 之前,使用
GPUCurrentFanSpeed
而不是
GPUTargetFanSpeed
[6]
要调整多个显卡的风扇速度,请运行:
$ nvidia-xconfig --enable-all-gpus
$ nvidia-xconfig --cool-bits=4
注意:
在某些笔记本电脑上(包括 ThinkPad
X1 Extreme
P51/P52
),有两个风扇,但都不由 nvidia 控制。
使用 NVML 的简单超频脚本
编辑
编辑源代码
Nvidia 管理库 (NVML) 提供了一个 API,可以管理 GPU 的核心和内存时钟偏移以及功耗限制。要使用此功能,您可以安装
python-nvidia-ml-py
AUR
,然后使用以下 Python 脚本与您所需的设置。此脚本需要在每次重启后以 root 身份运行以重新应用超频/降压。
#!/usr/bin/env python

from pynvml import *

nvmlInit()

# 这将设置 GPU 进行调整 - 如果这给您带来错误或您有多个 GPU,请设置为 1 或尝试其他值
myGPU = nvmlDeviceGetHandleByIndex(0)

# GPU 时钟偏移值应替换下面行中的 "000"。
nvmlDeviceSetGpcClkVfOffset(myGPU, 000)

# 内存时钟偏移应 **乘以 2** 以替换下面的 "000"
# 例如,偏移量为 500 意味着在下一行中插入值 1000
nvmlDeviceSetMemClkVfOffset(myGPU, 000)

# 功耗限制可以在下面以 mW 为单位设置 - 216W 变为 216000,等等。如果您不想调整功耗限制,请删除下面这行。
nvmlDeviceSetPowerManagementLimit(myGPU, 000000)
内核模块参数
编辑
编辑源代码
本文或本章节的语言、语法或风格需要改进。参考:
帮助:风格
原因:
提供高级示例而不解释其作用是没有意义的。(在
Talk:NVIDIA/提示和技巧
讨论)
一些选项可以设置为内核模块参数,完整的列表可以通过运行
modinfo nvidia
或查看
nv-reg.h
获得。另请参阅
Gentoo:NVidia/nvidia-drivers#Kernel module parameters
例如,启用以下选项将启用 PAT 功能
[7]
,这会影响内存的分配方式。PAT 最早在 Pentium III 中引入
[8]
,并且大多数较新的 CPU 都支持此功能(参见
wikipedia:Page attribute table#Processors
)。如果您的系统支持此功能,它应该会提高性能。
/etc/modprobe.d/nvidia.conf
options nvidia NVreg_UsePageAttributeTable=1
在某些笔记本电脑上,要启用任何 NVIDIA 设置调整,您必须包含此选项,否则会返回“不支持设置应用程序时钟”等错误。
/etc/modprobe.d/nvidia.conf
options nvidia NVreg_RegistryDwords="OverrideMaxPerf=0x1"
注意:
根据
Kernel module#Using modprobe.d
,如果您使用
early KMS
,则需要
regenerate the initramfs
保留挂起后的显存
编辑
编辑源代码
默认情况下,NVIDIA Linux 驱动程序在系统挂起和恢复时仅保存和恢复必要的显存分配。引用 NVIDIA 的话:
由此导致的显存内容丢失部分由用户空间的 NVIDIA 驱动程序和某些应用程序进行补偿,但在退出电源管理周期时可能会导致渲染损坏和应用程序崩溃等故障。
“仍处于实验阶段”的接口允许保存所有显存(前提是磁盘或 RAM 上有足够的空间)。
要保存和恢复所有显存内容,需要为
nvidia
内核模块设置
NVreg_PreserveVideoMemoryAllocations=1
内核模块参数
。虽然 NVIDIA 默认不设置此参数,但 Arch Linux 为支持的驱动程序设置了此参数,使得保留功能开箱即用。
要验证
NVreg_PreserveVideoMemoryAllocations
是否已启用,请执行以下命令:
# cat /proc/driver/nvidia/params | sort
输出中应包含一行
PreserveVideoMemoryAllocations: 1
,以及
TemporaryFilePath: "/var/tmp"
,您可以在下面阅读有关此内容的更多信息。
根据上游要求,必要的服务
nvidia-suspend.service
nvidia-hibernate.service
nvidia-resume.service
在支持的驱动程序上默认已
启用
有关更多详细信息,请参阅
NVIDIA 的文档
本文或本章节的事实准确性存在争议。
原因:
当使用早期 KMS 时,即在 initramfs 中加载
nvidia
模块时,它无法访问存储先前显存的
NVreg_TemporaryFilePath
。换句话说,如果需要休眠,则不应使用早期 KMS。(在
Talk:NVIDIA/提示和技巧
中讨论)
注意:
根据
内核模块#使用 modprobe.d
,如果使用
早期 KMS
,则需要
重新生成 initramfs
显存内容默认保存到
/tmp
,这是一个
tmpfs
NVIDIA 建议
使用其他文件系统以获得最佳性能。如果内存大小不足,这也是必需的。因此,Arch Linux 在支持的驱动程序上默认设置
nvidia.NVreg_TemporaryFilePath=/var/tmp
所选文件系统需要支持未命名的临时文件(例如 ext4 或 XFS),并且有足够的容量来存储显存分配(即至少比所有 NVIDIA GPU 的内存容量总和多 5%)。使用命令
nvidia-smi --query-gpu=memory.total --format=csv,noheader,nounits
列出系统中所有 GPU 的内存容量。
虽然
nvidia-resume.service
被 NVIDIA 标记为必需,但它可以是可选的,因为它的功能也由
systemd-sleep(8)
钩子(
/usr/lib/systemd/system-sleep/nvidia
)提供,并且后者会自动调用。请注意,
使用 Wayland 的 GDM
明确要求启用
nvidia-resume.service
驱动持久化
编辑
编辑源代码
NVIDIA 提供了一个可以在启动时选择运行的守护进程。在标准的单 GPU X 桌面环境中,持久化守护进程并不是必需的,实际上可能会引发一些问题
[9]
。更多详情请参阅 NVIDIA 文档中的
驱动持久化
部分。
要在启动时启动持久化守护进程,请
启用
nvidia-persistenced.service
。有关手动使用的信息,请参阅
上游文档
Forcing YCbCr with 4:2:0 subsampling
编辑
编辑源代码
If you are facing
limitations of older output standards
that can still be mitigated by using YUV 4:2:0, the NVIDIA driver has an undocumented X11 option to enforce that:
Option "ForceYUV420" "True"
This will allow higher resolutions or refresh rates but have detrimental impact on the image quality.
检索自“
分类
:​
图形
X 服务器
使用「模板:风格」标记的页面或章节
隐藏分类:​
使用「模板:糟糕的翻译」标记的页面或章节
使用「模板:准确性」标记的页面或章节
NVIDIA/提示和技巧
添加话题