NVIDIA (Русский)/Tips and tricks (Русский)

Состояние перевода: На этой странице представлен перевод статьи NVIDIA/Tips and tricks. Дата последней синхронизации: 28 июня 2025. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Исправление разрешения терминала

Поскольку fbdev включен по умолчанию, консоль Linux должна использовать родное разрешение монитора без дополнительных настроек.

Если вы отключили fbdev или используете старую версию драйвера, вы можете заметить, что разрешение экрана в терминале меньше ожидаемого. Для решения можно настроить разрешение через загрузчик.

Для GRUB смотрите раздел GRUB/Tips and tricks#Setting the framebuffer resolution. [1] [2]

Для systemd-boot установите console-mode в esp/loader/loader.conf, смотрите systemd-boot (Русский)#Настройка.

Для rEFInd добавьте use_graphics_for +,linux в esp/EFI/refind/refind.conf. [3] Небольшая оговорка заключается в том, что это скроет отображение параметров ядра во время загрузки.

Совет: Если описанные выше способы не помогли исправить разрешение в терминале, возможно, необходимо полностью отключить Legacy BIOS (часто называемый Compatibility Support Module, CSM или Legacy Boot) в настройках UEFI. Перед этим убедитесь, что все ваши устройства настроены на использование загрузки UEFI.

Использование ТВ-выхода

Смотрите Wikibooks:NVIDIA/TV-OUT.

X с телевизором (DFP) в качестве единственного дисплея

Если сервер X не обнаруживает подключенные мониторы, он откатывается на использование разрешения «по умолчанию» (обычно 640x480). Это может стать проблемой при подключении ТВ через DVI/HDMI/DisplayPort в качестве основного монитора, если сервер X был запущен при выключенном ТВ или он был не подключен.

Для принудительного использования правильного разрешения драйвером NVIDIA сохраните копию EDID в файловой системе там, где его сможет прочитать сервер X, вместо чтения EDID с монитора.

Для получения EDID запустите nvidia-settings, в нём внутри раздела нужной видеокарты (должен называться GPU-0 или типа того) выберите пункт DFP (DFP-0 или что-то похожее), нажмите кнопку Acquire EDID... и сохраните файл куда-нибудь, например в /etc/X11/dfp0.edid.

Если у вас не подключена мышь и клавиатура, EDID можно получить через командную строку. Запустите сервер X с нужным логированием для вывода блока EDID:

$ startx -- -logverbose 6

После окончания инициализации сервера X закройте его и извлеките блок EDID из журнала Xorg с помощью nvidia-xconfig:

$ nvidia-xconfig --extract-edids-from-file ~/.local/share/xorg/Xorg.0.log --extract-edids-output-file ./dfp0.bin

Отредактируйте настройки Xorg, добавив в секцию Device строки:

/etc/X11/xorg.conf.d/20-nvidia.conf
Option "ConnectedMonitor" "DFP"
Option "CustomEDID" "DFP-0:/etc/X11/dfp0.bin"

Опция ConnectedMonitor принуждает драйвер распознавать DFP так, как будто он подключен. CustomEDID предоставляет данные EDID для устройства и говорит, что при загрузке ТВ/DFP как бы был подключен во время процесса запуска X.

Таким образом можно автоматически запускать менеджер экрана при загрузке, иметь рабочий и настроенный экран для X до включения питания ТВ.

Разрешение без подключенных мониторов

В headless-режиме выставляется разрешение 640x480, которое будет использоваться в VNC или Steam Link. Чтобы выставить разрешение побольше, например 1920x1080, пропишите Virtual в подсекции Screen:

Section "Screen"
   [...]
   SubSection     "Display"
       Depth       24
       Virtual     1920 1080
   EndSubSection
EndSection
Совет: Использование headless-режима может быть сложным и чреватым ошибками. Например, среды рабочего стола и nvidia-utils не предоставляют графического способа изменения разрешения. Для облегчения настройки разрешения можно использовать фиктивный адаптер DP или HDMI, который имитирует наличие монитора, подключенного к этому порту. Тогда разрешение можно будет изменить обычными способами с помощью удалённого сеанса, такого как VNC или Steam Link.

Проверка источника питания

С помощью драйвера NVIDIA в сеансе Xorg можно узнать текущий источник питания видеокарты. Для этого нужно получить значение параметра 'GPUPowerSource' с помощью утилиты nvidia-settings (0 — питание от сети, 1 — питание от батареи):

$ nvidia-settings -q GPUPowerSource -t
1

Прослушивание событий 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.

Вы можете запретить вывод этого сообщения, отключив опцию ConnectToAcpid в вашем конфигурационном файле:

/etc/X11/xorg.conf.d/20-nvidia.conf
 Section "Device"
   ...
   Driver "nvidia"
   Option "ConnectToAcpid" "0"
   ...
 EndSection

Однако если у вас ноутбук, то, возможно, более грамотным решением проблемы станет установка и запуск демона acpid.

Отображение температуры видеокарты в терминале

Существует три метода запроса температуры видеокарты. nvidia-settings требует использования X, nvidia-smi или nvclock — не требуют. Также обратите внимание, что nvclock в настоящее время не работает с новыми картами NVIDIA, такими как карты серии GeForce 200, а также интегрированными графическими решениями, такими как Zotac IONITX 8800GS.

nvidia-settings

Для отображения температуры графического ядра в терминале используйте 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.

Температура графического процессора этой платы 49 °C.

Пример того, как получить значение температуры для использования в утилитах вроде rrdtool или conky:

$ nvidia-settings -q gpucoretemp -t
49

nvidia-smi

nvidia-smi может читать температуру прямо с графического процессора без использования X, что удобно, например, при работе в Wayland или на сервере без графического интерфейса.

Отображение температуры графического процессора с использованием 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

Установите пакет nvclockAUR.

Примечание: nvclock не может получить доступ к тепловому сенсору на новых видеокартах NVIDIA, например Geforce 200 series.

Могут быть расхождения значений температуры между nvclock и nvidia-settings/nv-control. В соответствии с этим сообщением от автора nvclock (thunderbird), значения, которые выдаёт nvclock, более точные.

Разгон и охлаждение

Важно: Помните, что разгон может привести к повреждению оборудования и авторы этой страницы снимают с себя любую ответственность за повреждение оборудования, вся информация, в том числе и возможность разгона, указывается изготовителем в спецификации к оборудованию.

Включение разгона через nvidia-settings

Примечание:
  • Некоторые параметры разгона могут не работать, если Xorg запущен без прав суперпользователя. Запускайте Xorg с правами root.
  • Вам также может понадобиться запускать nvidia-settings от имени root.
  • Включение DRM kernel mode setting может привести к тому, что разгон станет недоступным, независимо от значения Coolbits.

В зависимости от версии драйвера некоторые возможности разгона включены по умолчанию. Некоторые неподдерживаемые возможности включаются через опцию Coolbits в секции Device:

Option "Coolbits" "значение"
Совет: Опцию Coolbits можно задать с помощью nvidia-xconfig, которая может управлять файлами конфигурации Xorg:
# nvidia-xconfig --cool-bits=значение

Значение Coolbits — сумма составляющих его битов в двоичной системе счисления. Поддерживаемые биты:

  • 8 (бит 3) — включает дополнительные возможности разгона на вкладке PowerMizer в nvidia-settings. Доступен с версии 337.12 для архитектур Fermi и новее. [4]
  • 16 (бит 4) — включает возможность повышения напряжения через параметры командной строки nvidia-settings. Доступен с версии 346.16 для архитектур Fermi и новее. [5]

Если вы используете неподдерживаемую версию драйвера, вам могут понадобиться следующие биты:

  • 1 (бит 0) — включает возможность разгона для старых (до архитектуры Fermi) ядер, вкладка Clock Frequencies в nvidia-settings. Удалён в версии 343.13.
  • 2 (бит 1) — когда бит установлен, драйвер «будет пытаться инициализировать режим SLI, когда используются два графических процессора с разным количеством видеопамяти». Удалён в версии 470.42.01.
  • 4 (бит 2) — включает ручное управление охлаждением графического процессора вкладка Thermal Monitor в nvidia-settings. Удалён в версии 470.42.01.

Чтобы включить несколько свойств, сложите значения Coolbits. Например, чтобы включить возможности разгона и повышения напряжения для архитектуры Fermi, установите значение Option "Coolbits" "24".

Документация по Coolbits находится в файле /usr/share/doc/nvidia/html/xconfigoptions.html и здесь.

Примечание: Также можно отредактировать и перепрошить BIOS видеокарты через DOS (предпочтительнее) или в окружении Win32 с помощью nvflash и NiBiTor 6.0. Преимущество данного способа в том, что он позволяет не только поднять напряжение, но и повысить стабильность по сравнению с программными методами разгона, такими как Coolbits. Руководство по модификации BIOS архитектуры Fermi (англ.)

Настройка статического 2D/3D разгона

Для включения PowerMizer на максимальную производительность (без этого не будет работать VSync) используйте следующий параметр модуля ядра:

/etc/modprobe.d/nvidia.conf
options nvidia NVreg_RegistryDwords="PerfLevelSrc=0x2222"

Понижение максимальной частоты

На Volta (NV140/GVXXX) и более новых видеокартах увеличение тактовых частот работает по-другому, и допустимый максимум тактовых частот устанавливается на наибольшее поддерживаемое значение при загрузке системы. Если это то, что вам нужно, то дополнительная настройка не требуется.

Недостатком такого решения является снижение энергоэффективности. При увеличении тактовых частот нужно повышать напряжение для сохранения стабильности, что приводит к нелинейному росту энергопотребления, нагрева и шума вентилятора. Снижение допустимого максимума тактовых частот позволяет повысить эффективность.

Для изменения можно использовать nvidia-smi от имени суперпользователя:

  • Просмотр поддерживаемых частот:
    $ nvidia-smi -q -d SUPPORTED_CLOCKS
  • Изменение частоты графического чипа на 1695 МГц:
    # nvidia-smi --lock-gpu-clocks=0,1695 --mode=1
  • Изменение частоты видеопамяти на 5001 МГц:
    # nvidia-smi --lock-memory-clocks=0,5001

Для оптимизации энергоэффективности используйте nvidia-smi, чтобы проверить нагрузку видеокарты в любимой игре. Вертикальная синхронизация (VSync) должна быть включена. Снижение тактовой частоты увеличит нагрузку на видеокарту, поскольку она, будучи замедленной, будет тратить больше времени на рендеринг каждого кадра. Наилучшая эффективность достигается при использовании самых низких тактовых частот, при которых ещё не возникают подвисания, вызванные стопроцентной нагрузкой. Тогда каждый кадр будет отрисовываться достаточно быстро, чтобы не отставать от частоты обновления экрана.

В качестве примера можно привести использование указанных выше настроек вместо стандартных на RTX 3090 Ti при игре в Hitman 3 в 4K@60, что снижает энергопотребление на 30%, температуру с 75 до 63 градусов и скорость вращения вентилятора с 73% до 57%.

Сохранение настроек разгона

Как правило, изменения частоты и напряжения, сделанные через интерфейс nvidia-settings, не сохраняются, теряясь после перезагрузки. К счастью, существуют инструменты, предоставляющие интерфейс для разгона на проприетарном драйвере, способные сохранять настройки разгона пользователя и автоматически применять их при загрузке. Вот некоторые из них:

  • gweAUR — графический, применяет настройки при запуске сеанса рабочего стола
  • nvclockAUR и systemd-nvclock-unitAUR — графический, применяет настройки при загрузке системы
  • nvocAUR — текстовый, профили представляют собой конфигурационные файлы в /etc/nvoc.d/, применяет настройки при запуске сеанса рабочего стола

Помимо них, можно прописывать значения атрибутов GPUGraphicsClockOffset и GPUMemoryTransferRateOffset с помощью команды nvidia-settings, добавив её в автозагрузку. Например:

$ nvidia-settings -a "GPUGraphicsClockOffset[performance_level]=offset"
$ nvidia-settings -a "GPUMemoryTransferRateOffset[performance_level]=offset"

Где performance_level — наибольший номер «Performance Level», доступный для вашей видеокарты. Если видеокарт несколько, то нужно указать GPU ID: [gpu:gpu_id]GPUGraphicsClockOffset[performance_level]=offset.

Изменение лимита TDP

Современные видеокарты NVIDIA сбрасывают частоту, чтобы оставаться в пределах своего TDP и температуры. Для повышения производительности можно изменить предел TDP, что приведёт к повышению температуры и увеличению энергопотребления.

Например, чтобы установить предел энергопотребления на 160,30 Вт:

# 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, добавив нужные команды в автозапуск. На некоторых версиях драйвера требуется, чтобы в файле настроек Xorg в опции Coolbits был установлен бит 2.

Примечание: Для карт GeForce 400/500 series на текущий момент этот метод не устанавливает скорость вентилятора при входе. Также этот метод позволяет настраивать скорость вентилятора только для текущего сеанса X через nvidia-settings.

Поместите следующую строку в ваш файл xinitrc для управления вентилятором при запуске Xorg. Замените n на нужное вам значение скорости вентилятора в процентах.

nvidia-settings -a "[gpu:0]/GPUFanControlState=1" -a "[fan:0]/GPUTargetFanSpeed=n"

Также вы можете указать и вторую видеокарту путём увеличения счётчиков видеокарты и вентилятора.

nvidia-settings -a "[gpu:0]/GPUFanControlState=1" -a "[fan:0]/GPUTargetFanSpeed=n" \
                -a "[gpu:1]/GPUFanControlState=1" -a  [fan:1]/GPUTargetFanSpeed=n" &

Если вы используете менеджер входа вроде GDM или SDDM, вы можете создать файл настроек. Создайте ~/.config/autostart/nvidia-fan-speed.desktop и вставьте следующий текст. Снова измените n на нужное вам значение скорости вентилятора в процентах.

[Desktop Entry]
Type=Application
Exec=nvidia-settings -a "[gpu:0]/GPUFanControlState=1" -a "[fan:0]/GPUTargetFanSpeed=n"
X-GNOME-Autostart-enabled=true
Name=nvidia-fan-speed
Примечание: До версии драйвера 349.16 вместо опции GPUTargetFanSpeed использовалась опция GPUCurrentFanSpeed. [6]

Чтобы можно было регулировать скорость вращения вентиляторов более чем одной видеокарты, выполните команду:

$ nvidia-xconfig --enable-all-gpus
$ nvidia-xconfig --cool-bits=4
Примечание: На некоторых ноутбуках (например, X1 Extreme и P51/P52) есть два вентилятора, но nvidia их не контролирует.

Простой скрипт для разгона с использованием NVML

Библиотека Nvidia Management Library (NVML) предоставляет API, позволяющий управлять смещением частот и ограничением мощности. Для использования установите python-nvidia-ml-pyAUR и используйте приведённый ниже Python-скрипт, вписав в него нужные вам настройки. Этот скрипт необходимо запускать от имени root после каждой перезагрузки для восстановления настроек.

#!/usr/bin/env python

from pynvml import *

nvmlInit()

# Какую видеокарту настраивать - если выдаёт ошибку или у вас несколько видеокарт, попробуйте 1 или другие значения
myGPU = nvmlDeviceGetHandleByIndex(0)

# Смещение частоты графического чипа - замените "000" на нужное значение
nvmlDeviceSetGpcClkVfOffset(myGPU, 000)

# Смещение частоты видеопамяти нужно **умножить на 2**
# Например, для смещения 500 впишите значение 1000
nvmlDeviceSetMemClkVfOffset(myGPU, 000)

# Лимит энергопотребления в мВт - например, 216000 означает 216 Вт
# Удалите эту строку, если это вам не нужно
nvmlDeviceSetPowerManagementLimit(myGPU, 000000)

Параметры модуля ядра

Некоторые параметры могут быть установлены как параметры модуля ядра, полный список можно получить, выполнив modinfo nvidia или посмотрев nv-reg.h. Смотрите также Gentoo:NVidia/nvidia-drivers#Kernel module parameters.

Например, включение следующих параметров включит PAT [7], что влияет на то, как выделяется память. PAT была впервые представлена в Pentium III [8] и поддерживается большинством более новых процессоров (Wikipedia:Page attribute table#Processors). Если ваша система может поддерживать эту функцию, это должно повысить производительность.

/etc/modprobe.d/nvidia.conf
options nvidia NVreg_UsePageAttributeTable=1

На некоторых ноутбуках, чтобы разрешить изменения через nvidia-settings, необходимо включить этот параметр, иначе он будет отвечать «Setting applications clocks is not supported» и т. д.

/etc/modprobe.d/nvidia.conf
options nvidia NVreg_RegistryDwords="OverrideMaxPerf=0x1"
Примечание: После внесения изменений не забудьте пересобрать образ initramfs, если вы используете ранний KMS.

Сохранение видеопамяти в ждущем режиме

По умолчанию драйверы NVIDIA Linux сохраняют и восстанавливают в ждущем режиме только основные распределения видеопамяти. Как сказано в официальной документации:

Потеря содержимого видеопамяти частично компенсируется драйверами NVIDIA и некоторыми приложениями, но может привести к таким сбоям, как повреждение рендеринга и сбои приложений при выходе из циклов управления питанием.

В драйвере есть экспериментальная функция, позволяющая сохранять всю видеопамять (при наличии достаточного места на диске или в оперативной памяти) перед переходом в сон и восстанавливать её при пробуждении из сна.

Для её включения нужно включить параметр модуля ядра NVreg_PreserveVideoMemoryAllocations=1 для модуля nvidia. Хотя NVIDIA не включает его по умолчанию, в пакете Arch Linux этот параметр уже включен, так что всё должно работать из коробки.

Проверить, включен ли этот параметр, можно командой:

# cat /proc/driver/nvidia/params | sort

Среди вывода должна быть строка PreserveVideoMemoryAllocations: 1, а также строка TemporaryFilePath: "/var/tmp", подробнее о которой ниже.

Необходимые службы nvidia-suspend.service, nvidia-hibernate.service и nvidia-resume.service уже включены по умолчанию в официально поддерживаемых драйверах.

Подробнее в официальной документации.

Примечание:
  • После внесения изменений не забудьте пересобрать образ initramfs, если вы используете ранний KMS.
  • По умолчанию NVIDIA в своём драйвере настраивает сохранение содержимого видеопамяти в каталог /tmp, в котором обычно примонтирована файловая система tmpfs. NVIDIA рекомендует указать другую файловую систему для наилучшей производительности. Это также необходимо, если размер оперативной памяти недостаточен для сохранения всей видеопамяти. По этим причинам официально поддерживаемые драйвера в Arch Linux используют по умолчанию другое значение nvidia.NVreg_TemporaryFilePath=/var/tmp.
  • Выбранная вами файловая система должна поддерживать «unnamed temporary files» (например, ext4 или XFS) и иметь достаточно свободного места (то есть минимум на 5% больше общего объёма видеопамяти всех подключенных видеокарт NVIDIA). Узнать объём видеопамяти можно с помощью команды nvidia-smi --query-gpu=memory.total --format=csv,noheader,nounits.
  • Хотя NVIDIA заявляет, что включение службы nvidia-resume.service обязательно, на самом деле это не выглядит обязательным, поскольку эта служба делает то же самое, что уже автоматически делается через хук systemd-sleep(8) (/usr/lib/systemd/system-sleep/nvidia). Имейте в виду, что GDM с Wayland требует включение этой службы.

Dynamic Boost

Dynamic Boost — это общесистемный контроллер питания, который управляет питанием процессора и видеокарты в зависимости от нагрузки на систему. [9]. Он может повысить производительность приложений, активно использующих видеокарту, путём увеличения максимального возможного энергопотребления.

Он доступен на ноутбуках с Ampere и более новыми видеокартами.

Подробнее в разделе CPU frequency scaling#nvidia-powerd.

Совет: Это особенно поможет тем, кто не может вручную увеличить уровень энергопотребления; смотрите раздел NVIDIA Optimus (Русский)#Низкое энергопотребление (TDP).

Драйвер persistence

Есть демон, который можно запускать при загрузке. В стандартной настольной среде с одной видеокартой демон не нужен и может создавать проблемы [10]. Смотрите раздел Driver Persistence документации NVIDIA для получения подробной информации.

Для запуска демона persistence включите службу nvidia-persistenced.service. Для использования вручную смотрите документацию разработчика.

Принудительное использование YCbCr с субдискретизацией 4:2:0

Если вы столкнулись с ограничениями старых стандартов вывода, которые можно обойти использованием YUV 4:2:0, в драйвере NVIDIA есть недокументированная опция X11 для его принудительного использования:

Option "ForceYUV420" "True"

Это позволит использовать более высокие разрешения или частоты обновления, но снизит качество изображения.

Настройка приложений на рендеринг с помощью видеокарты

Смотрите раздел PRIME#Configure applications to render using GPU.