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

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

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

Переход с драйвера nouveau будет сопровождаться низким разрешением экрана терминала при загрузке.

Для загрузчика GRUB, обратитесь к GRUB/Tips and tricks#Setting the framebuffer resolution, чтобы увеличить разрешение.

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

Для rEFInd добавьте esp/EFI/refind/refind.conf и /etc/refind.d/refind.conf (последний опционален, но рекомендуется):

use_graphics_for linux

Небольшая оговорка заключается в том, что это скроет отображение параметров ядра во время загрузки.

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

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

X with a TV (DFP) as the only display

Сервер X откатывается к CRT-0, если нет автоматически определённого монитора. Это может стать проблемой при использовании подключения ТВ через DVI как основной монитор, и сервер X был запущен при выключенном ТВ или он был не подключен.

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

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

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

$ startx -- -logverbose 6

После окончания иницализации сервера X закройте его, ваш лог файл сохранится в /var/log/Xorg.0.log. Извлеките блок EDID используя nvidia-xconfig:

$ 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.edid"

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

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

Если вышеуказанные изменения не работают, в xorg.conf в секции Device вы можете попробовать удалить строку Option "ConnectedMonitor" "DFP" и добавить следующие строки:

Option "ModeValidation" "NoDFPNativeResolutionCheck"
Option "ConnectedMonitor" "DFP-0"

Опция драйвера NVIDIA NoDFPNativeResolutionCheck предотвращает отключение всех режимов, которые не подходят к основному разрешению.

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

В 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 можно выяснить текущий источник питания видеокарты. Для этого нужно получить значение параметра 'GPUPowerSource' с помощью утилиты nvidia-settings (0 - питание от сети переменного напряжения, 1 - питание от батареи):

$ nvidia-settings -q GPUPowerSource -t
1

Прослушивание ACPI-событий

Драйверы NVIDIA автоматически пытаются подключиться к демону acpid и получать уведомления о ACPI событиях (подключение/отключение источника питания, некоторые горячие клавиши и т.д.). Если соединение завершается неудачей, то X сервер выведет следующее предупреждение:

~/.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's 8800GS.

nvidia-settings

Для отображения температуры графического ядра в оболочке используйте nvidia-settings как указано ниже:

$ nvidia-settings -q gpucoretemp

Вывод должен быть примерно такой:

Attribute 'GPUCoreTemp' (hostname:0.0): 41.
'GPUCoreTemp' is an integer attribute.
'GPUCoreTemp' is a read-only attribute.
'GPUCoreTemp' can use the following target types: X Screen, GPU.

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

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

$ nvidia-settings -q gpucoretemp -t
41

nvidia-smi

nvidia-smi может читать температуру прямо с графического процессора без использования сервера X. Это важно для небольшой группы пользователей, которые не имеют запущенного сервера X, те, кто используют ОС для серверных приложений. Отображение температуры графического процессора с использованием nvidia-smi:

$ nvidia-smi

Пример вывода результата работы программы:

$ nvidia-smi
Fri Jan  6 18:53:54 2012       
+------------------------------------------------------+                       
| NVIDIA-SMI 2.290.10   Driver Version: 290.10         |                       
|-------------------------------+----------------------+----------------------+
| Nb.  Name                     | Bus Id        Disp.  | Volatile ECC SB / DB |
| Fan   Temp   Power Usage /Cap | Memory Usage         | GPU Util. Compute M. |
|===============================+======================+======================|
| 0.  GeForce 8500 GT           | 0000:01:00.0  N/A    |       N/A        N/A |
|  30%   62 C  N/A   N/A /  N/A |  17%   42MB /  255MB |  N/A      Default    |
|-------------------------------+----------------------+----------------------|
| Compute processes:                                               GPU Memory |
|  GPU  PID     Process name                                       Usage      |
|=============================================================================|
|  0.           ERROR: Not Supported                                          |
+-----------------------------------------------------------------------------+

Только температура:

$ nvidia-smi -q -d TEMPERATURE

==============NVSMI LOG==============

Timestamp                           : Sun Apr 12 08:49:10 2015
Driver Version                      : 346.59

Attached GPUs                       : 1
GPU 0000:01:00.0
    Temperature
        GPU Current Temp            : 52 C
        GPU Shutdown Temp           : N/A
        GPU Slowdown Temp           : N/A

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

$ nvidia-smi --query-gpu=temperature.gpu --format=csv,noheader,nounits
52

Ссылка на руководство: https://www.question-defense.com/2010/03/22/gpu-linux-shell-temp-get-nvidia-gpu-temperatures-via-linux-cli.

nvclock

Используйте nvclockAUR.

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

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

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

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

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

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

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

Значение Coolbits - сумма его составляющих битов в двоичной системе исчисления. Типы битов:

  • 1 (bit 0) - Включает возможность разгона для старых (до архитектуры Fermi) ядер, вкладка Clock Frequencies в nvidia-settings.
  • 2 (bit 1) - Когда бит установлен, драйвер "будет пытаться инициализировать режим SLI, когда используются два графических процессора с разным количеством видеопамяти".
  • 4 (bit 2) - Включает ручное управление охлаждением графического процессора вкладка Thermal Monitor в nvidia-settings.
  • 8 (bit 3) - Включает возможность разгона на вкладке PowerMizer в nvidia-settings. Доступна с версии 337.12 для архитектур Fermi и новее. [1]
  • 16 (bit 4) - Включает возможность повышения напряжения через параметры командной строки nvidia-settings. Доступна с версии 346.16 для архитектур Fermi и новее.[2]

Чтобы включить несколько свойств, сложите значения 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 разгона

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

Option "RegistryDwords" "PerfLevelSrc=0x2222"

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

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

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

Изменение лимита 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-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. [3]

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

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

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

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

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

/etc/modprobe.d/nvidia.conf
options nvidia-drm modeset=1 
options nvidia NVreg_UsePageAttributeTable=1

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

/etc/modprobe.d/nvidia.conf
options nvidia NVreg_RegistryDwords="OverrideMaxPerf=0x1"

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

По умолчанию драйверы NVIDIA Linux сохраняют и восстанавливают в ждущем режиме только основные распределения видеопамяти. Цитируя NVIDIA ([6], также доступно с пакетом nvidia-utils в /usr/share/doc/nvidia/html/powermanagement.html): Потеря содержимого видеопамяти частично компенсируется драйверами NVIDIA и некоторыми приложениями, но может привести к таким сбоям, как повреждение рендеринга и сбои приложений при выходе из циклов управления питанием.

Пока ещё экспериментальная система позволяет сохранять всю видеопамять (при наличии достаточного места на диске или в оперативной памяти). Интерфейс доступен через файл /proc/driver/nvidia/suspend и работает следующим образом: запишите "suspend" (или "hibernate") в /proc/driver/nvidia/suspend непосредственно перед записью в обычный файл /sys/power/state, запись "resume" в /proc/driver/nvidia/suspend сразу после пробуждения или после неудачной попытки ухода в ждущий или спящий режим.

Драйверы NVIDIA полагаются на определённую пользователем файловую систему для хранения данных. Выбранная файловая система должна поддерживать безымянные временные файлы (ext4 подходит) и иметь достаточный объём для хранения распределения видеопамяти (например, как минимум (сумма объёма памяти всех видеокарт NVIDIA) * 1.02). Используйте команду nvidia-smi -q -d MEMORY для получения списка объёмов памяти всех GPU в системе.

Чтобы выбрать файловую систему, используемую для хранения видеопамяти во время сна системы (и изменить стратегию сохранения/восстановления видеопамяти по умолчанию на сохранение и восстановление всех распределений видеопамяти), необходимо передать две опции модулю ядра "nvidia". Например, запишите следующую строку в /etc/modprobe.d/nvidia-power-management.conf и перезагрузитесь:

options nvidia NVreg_PreserveVideoMemoryAllocations=1 NVreg_TemporaryFilePath=/tmp-nvidia

Можно заменить /tmp-nvidia а другой желаемый вами путь.

Взаимодействие с /proc/driver/nvidia/suspend обрабатывается простым скриптом /usr/bin/nvidia-sleep.sh, который сам будет вызван таким инструментом вроде systemd. Пакет nvidia-utils поставляется с соответствующими службами systemd (которые, по сути, просто вызывают nvidia-sleep.sh): nvidia-suspend, nvidia-hibernate, nvidia-resume. Вопреки инструкциям NVIDIA, в настоящее время нет необходимости включать nvidia-resume (и на самом деле, возможно, это не очень хорошая идея), потому что скрипт /usr/lib/systemd/system-sleep/nvidia делает то же самое, что и эта служба (но немного раньше) и включен по умолчанию (systemd вызывает его после пробуждения). Включите nvidia-suspend и/или nvidia-hibernate.

Драйвер persistence

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

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