Skip to content

Nouveau драйвер:

Смена проприетарного драйвера от NVIDIA на Nouveau

  • Перейдите в режим root:
shell
su -
  • Удалите nvidia_glx_common:
shell
apt-get remove nvidia_glx_common
shell
epm -e nvidia_glx_common
  • Удалите initcall_blacklist и nvidia-drm.modeset, если они есть:
shell
mcedit /etc/sysconfig/grub2
  • Сгенерируйте grub.cfg
shell
grub-mkconfig -o /boot/grub/grub.cfg
  • Удалите правила, запрещающие Nouveau, если они есть:
shell
rm /etc/modprobe.d/blacklist-nvidia-x11.conf
  • Удалите изменение размещения видеопамяти, если оно есть:
shell
rm /etc/modprobe.d/nvidia_videomemory_allocation.conf
  • Установите драйвер (пример для ядра un-def):
shell
apt-get install kernel-modules-drm-nouveau-un-def
shell
epm -i kernel-modules-drm-nouveau-un-def
  • Если у Вас видеокарта Curie или старше, удостоверьтесь, что у вас установлен пакет xorg-drv-nouveau с DDX-драйвером Xf86-video-nouveau:
shell
apt-get install xorg-drv-nouveau
shell
epm -i xorg-drv-nouveau

Информация

Xf86-video-nouveau — это DDX-драйвер для Xorg, необходимый для поддержки 2D и 3D-ускорения на старых видеокартах.

Для новых видеокарт существует универсальный modesetting-драйвер Xf86-video-modesetting, который уже входит в пакет Mesa и не нуждается в установке.

  • Перезагрузите систему
shell
su -
reboot

Как только система загрузилась можно убедиться в том, что Nouveau заработало (в выводе сборки initrd должен присутствовать Nouveau):

shell
su -
make-initrd
reboot

Осторожно

Для видеокарт Maxwell потребуется обязательное внедрение прошивки NVIDIA.

OpenGL и Zink

Zink по умолчанию

В настоящее время команда Mesa работает над OpenGL-драйвером Zink и в будущем рассчитывает сделать его стандартом для видеокарт Turing и новее. На момент лета 2024 года, в нём всё ещё активно устраняют ошибки, тем не менее, он уже сейчас во многих случаях превосходит стандартный Nouveau OpenGL-драйвер.

Стандартный Nouveau OpenGL-драйвер (NVC0) всё ещё актуальный и работает стабильно, но если хотите за счёт стабильности увеличить производительность, можете уже сейчас попробовать Zink и добавить NOUVEAU_USE_ZINK=1 в переменные окружения.

Как один из вариантов, можно добавить строку export NOUVEAU_USE_ZINK=1 в конец ~/.bashrc:

shell
mcedit ~/.bashrc

Внимание

Zink, как говорилось выше, нестабильный, и может ухудшить опыт работы с системой. Если наблюдаются вылеты приложений или иные проблемы, рекомендуется убрать параметр.

Оптимизация ввода-вывода Zink

Дополнительная оптимизация для Zink, в некоторых случаях позволяющая улучшить отзывчивость. В частности, убирает лаг курсора мыши при использовании Zink.

На момент лета 2024 года она всё ещё не внедрена в систему по умолчанию, т.к. ждёт изменения CTS тестов, тем не менее её можно запустить, добавив в переменные окружения ZINK_DEBUG=ioopt.

Как один из вариантов, можно добавить строку export ZINK_DEBUG=ioopt в конец ~/.bashrc:

shell
mcedit ~/.bashrc

Информация

Параметр работает только в связке с Zink.

Внедрение прошивки NVIDIA

Большинство видеочипов NVIDIA имеют встроенный аппаратный декодер, и некоторые видеочипы для его работы отдельно требуют извлечённую из драйвера прошивку NVIDIA. Прошивка NVIDIA требуется для видеокарт с аппаратным декодером: VP1, VP2, VP3, VP4.0, VP4.2, VP5 или VP6+. Список видеокарт с данными декодерами можно посмотреть на странице Video Acceleration в блоке Which card has what engine

Информация

Хоть вышеупомянутые аппаратные декодеры и требуют прошивку NVIDIA, не во всех реализована её поддержка. Статус поддержки для конкретного декодера смотрите на сайте Video Acceleration в блоке Video engine support status

Осторожно

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

  • Установка прошивки:
shell
apt-get install firmware-nouveau
shell
epm -i firmware-nouveau
Ручная установка прошивки
  • Распакуйте прошивку:
shell
mkdir -p /tmp/nouveau && cd /tmp/nouveau
wget http://us.download.nvidia.com/XFree86/Linux-x86_64/340.108/NVIDIA-Linux-x86_64-340.108.run
wget https://raw.github.com/envytools/firmware/master/extract_firmware.py
sh NVIDIA-Linux-x86_64-340.108.run --extract-only
python3 extract_firmware.py
  • Установите прошивку:
shell
su -
cd /tmp/nouveau
mkdir /lib/firmware/nouveau
cp -d nv* vuc-* /lib/firmware/nouveau/

Управление питанием (Turing и новее)

Nouveau — драйвер с открытым исходным кодом для графических процессоров NVIDIA, развивается посредством реверс-инжиниринга. До архитектуры Turing, в управлении питанием возникали проблемы, о чём можно посмотреть на странице Power Management.

Начиная с архитектуры Turing, видеокарты получили полную поддержку управления питанием благодаря GSP-прошивкам от NVIDIA. Видеокарты на базе архитектур Ampere и Ada Lovelace имеют эту поддержку по умолчанию. Для видеокарт на базе архитектуры Turing необходимо указать специальный параметр ядра.

Для того, чтобы на видеокартах Turing заработало управление питанием, можно прописать в параметр GRUB_CMDLINE_LINUX_DEFAULT значение nouveau.config=NvGspRm=1 и сгенерировать новый grub.cfg, либо прописать в файле /etc/modprobe.conf.:

shell
su -
cat << _EOF_ > /etc/modprobe.d/nouveau_power_management.conf
options nouveau config=NvGspRm=1
_EOF_
make-initrd

Управление частотами через Reclocking (для GM10x Maxwell, Kepler и Tesla G94-GT218)

Видеочипы до архитектуры Turing не имеют поддержку управления питания на Nouveau, из-за чего остаются в режиме пониженного энергопотребления и пониженными частотами. Но на Maxwell, код которых начинается с GM10x, Kepler и Tesla G94-GT218 есть возможность менять частоты GPU и видеопамяти через уже заготовленные пресеты частот GPU и видеопамяти.

  • Проверьте доступные состояния питания:
shell
su -
cat /sys/kernel/debug/dri/0/pstate
Ожидаемый вид вывода
shell
07: core 405 MHz memory 810 MHz
0f: core 653-954 MHz memory 1600 MHz
AC: core 953 MHz memory 1600 MHz
  • Проверьте интересующее состояние на работоспособность:
shell
su -
echo pstate > /sys/kernel/debug/dri/0/pstate

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

В примере будет указано значение 0f, которое перевели в десятеричный формат (15)

ПараметрОписание
nouveau.config=NvClkMode=15На этапе загрузки устанавливает необходимое состояние питания.
nouveau.config=NvClkModeAC=15На этапе загрузки устанавливает необходимое состояние питания, если устройство работает от сети.
nouveau.config=NvClkModeDC=15На этапе загрузки устанавливает необходимое состояние питания, если устройство работает от батареи.

Можно прописать в параметр GRUB_CMDLINE_LINUX_DEFAULT и сгенерировать новых grub.cfg, либо прописать в файле /etc/modprobe.conf.

Пример записи в /etc/modprobe.conf:

shell
su -
cat << _EOF_ > /etc/modprobe.d/nouveau_recloking.conf
options nouveau config=NvClkMode=15
options nouveau config=NvClkModeAC=15
options nouveau config=NvClkModeDC=15
_EOF_
make-initrd

Осторожно

Хоть эта поддержка и существует давно, она имеет статус MOSTLY (всё основное сделано, но имеется ряд нерешённых проблем) и, скорее всего, останется таким навсегда.

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

Управление частотами через NVBoost (для Fermi, Kepler, Maxwell, Pascal и Volta):

Для Fermi, Kepler, Maxwell, Pascal и Volta существует способ управления частотами через 3 режима:

РежимОписание
0Базовые тактовые частоты (по умолчанию)
1Тактовые частоты в режиме Boost
2Максимальные тактовые частоты

Управление происходит через параметр config.NvBoost.

Например, установка тактовых частот в режиме boost будет config.NvBoost=1

Можно прописать это в параметр GRUB_CMDLINE_LINUX_DEFAULT и сгенерировать новый grub.cfg, либо прописать в файле /etc/modprobe.conf.

Пример записи в /etc/modprobe.conf:

shell
su -
cat << _EOF_ > /etc/modprobe.d/nouveau_nvboost.conf
options nouveau config=NvBoost=1
_EOF_
make-initrd

Управление скоростью вентиляторов (от Rankine до Maxwell)

Видеочипы от Rankine до Maxwell имеют поддержку управления вентиляторами.

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

shell
ls /sys/class/drm/card0/device | grep pwm1
Ожидаемый вид вывода
shell
pwm1
pwm1_enable
pwm1_max
pwm1_min
Файл управленияОписание
pwm1Управление постоянной скоростью.
pwm1_enableВключение режимов управления скоростью: 0 (выключить), 1 (вручную), 2 (автоматически)
pwm1_maxУстановка максимальной скорости.
pwm1_minУстановка минимальной скорости.

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

Пример
  • Включение ручного управление (если будет 0 или 2, указывать скорости нет необходимости)
shell
su -
echo 1 > /sys/class/drm/card0/device/pwm1_enable
  • Установка мощности вентилятора на 40%
shell
su -
echo 40 > /sys/class/drm/card0/device/pwm1

Один из вариантов управления — сделать изменения постоянными. Для этого нужно занести их в udev правила.

  • Пример ручного управления:
shell
su -
cat << _EOF_ > /etc/udev/rules.d/50-nouveau-hwmon.rules
ACTION=="add", SUBSYSTEM=="hwmon", DRIVERS=="nouveau", ATTR{pwm1_enable}="1", ATTR{pwm1_enable}="40"
_EOF_
  • Пример автоматического управления:
shell
su -
cat << _EOF_ > /etc/udev/rules.d/50-nouveau-hwmon.rules
ACTION=="add", SUBSYSTEM=="hwmon", DRIVERS=="nouveau", ATTR{pwm1_enable}="2"
_EOF_
  • Пример управления минимальными и максимальными значениями:
shell
su -
cat << _EOF_ > /etc/udev/rules.d/50-nouveau-hwmon.rules
ACTION=="add", SUBSYSTEM=="hwmon", DRIVERS=="nouveau", ATTR{pwm1_enable}="1", ATTR{pwm1_min}="10", ATTR{pwm1_min}="90"
_EOF_

Осторожно

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

Список параметров Nouveau для ядра

Существует список параметров для ядра, про которые мало что можно написать или просто мало информации.

Файл управленияОписание
runpmПринудительное включение (1) или отключение (0), управление питанием во время работы. По умолчанию только для систем Optimus установлено значение -1
noaccelОтключение ускорение ядра / abi16 (1 — отключить ускорения, 0 — включить)
nofbaccelОтключение ускорения fbcon (1 — отключить ускорение, 0 — включить)
modesetДолжен ли быть включён драйвер. 0 для отключённого, 1 для включённого, 2 для "безголового?"
config.NvAGPРежим agp (0 для отключения, 1 для включения
config.NvBiosУказать источник VBIOS, как один из OpenFirmware / PRAMIN / PROM / ACPI / PCIROM / PLATFORM или имя файла, переданное в request_firmware
config.NvFanPWMВключить использование ШИМ для вентилятора, автоматическое определение по умолчанию
config.NvForcePostНужно ли принудительно выполнять POST устройства, по умолчанию отключено
config.NvMemExecПринудительное включение/отключение выполнения сценария синхронизации памяти.
config.NvGrUseFWИспользовать прерывания MSI, включённые по умолчанию на чипсетах, которые их поддерживают
config.NvMXMDCBОчистка выходов DCB из BIOS, включено по умолчанию
config.NvPCIEТолько семейство NV40, использовать ли PCI-E GART, включено по умолчанию.
config.NvPmEnableGatingВключает синхронизацию для графических процессоров Kepler
vram_pushbufСоздать push-буферы DMA во VRAM
duallinkРазрешить двухканальную TMDS (включено по умолчанию)
tv_normДефолтный ТВ норм. По умолчанию — PAL. Допустимые значения: PAL, PAL-M, PAL-N, PAL-Nc, NTSC-M, NTSC-J, hd480i, hd480p, hd576i, hd576p, hd720p, hd1080i. Это применимо только к картам, у которых нет внешних кодировщиков
tv_disableОтключить обнаружение ТВ-выхода

Источники:

Авторы

The avatar of contributor named as Владислав Бабенко Владислав Бабенко
The avatar of contributor named as vlad196 vlad196
The avatar of contributor named as x1z53 x1z53
The avatar of contributor named as Oleg Shchavelev Oleg Shchavelev
The avatar of contributor named as Vladislav Babenko Vladislav Babenko
The avatar of contributor named as trashb1t trashb1t

История изменений