NVIDIA (Русский)/Tips and tricks (Русский)
Исправление разрешения терминала
Поскольку 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] Небольшая оговорка заключается в том, что это скроет отображение параметров ядра во время загрузки.
Использование ТВ-выхода
Смотрите 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
Проверка источника питания
С помощью драйвера 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-settings/nv-control. В соответствии с этим сообщением от автора nvclock (thunderbird), значения, которые выдаёт nvclock, более точные.
Разгон и охлаждение
Включение разгона через nvidia-settings
- Некоторые параметры разгона могут не работать, если Xorg запущен без прав суперпользователя. Запускайте Xorg с правами root.
- Вам также может понадобиться запускать nvidia-settings от имени root.
- Включение DRM kernel mode setting может привести к тому, что разгон станет недоступным, независимо от значения Coolbits.
В зависимости от версии драйвера некоторые возможности разгона включены по умолчанию. Некоторые неподдерживаемые возможности включаются через опцию Coolbits в секции Device
:
Option "Coolbits" "значение"
# 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
и здесь.
Настройка статического 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.
Поместите следующую строку в ваш файл 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
GPUTargetFanSpeed
использовалась опция GPUCurrentFanSpeed
. [6]Чтобы можно было регулировать скорость вращения вентиляторов более чем одной видеокарты, выполните команду:
$ nvidia-xconfig --enable-all-gpus $ nvidia-xconfig --cool-bits=4
Простой скрипт для разгона с использованием 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"
Сохранение видеопамяти в ждущем режиме
По умолчанию драйверы 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.
Драйвер 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.