Nouveau драйвер:
Смена проприетарного драйвера от NVIDIA на Nouveau
- Перейдите в режим root:
su -- Удалите
nvidia_glx_common:
apt-get remove nvidia_glx_commonepm -e nvidia_glx_common- Удалите
initcall_blacklistиnvidia-drm.modeset, если они есть:
mcedit /etc/sysconfig/grub2- Сгенерируйте
grub.cfg
grub-mkconfig -o /boot/grub/grub.cfg- Удалите правила, запрещающие Nouveau, если они есть:
rm /etc/modprobe.d/blacklist-nvidia-x11.conf- Удалите изменение размещения видеопамяти, если оно есть:
rm /etc/modprobe.d/nvidia_videomemory_allocation.conf- Установите драйвер (пример для ядра
un-def):
apt-get install kernel-modules-drm-nouveau-un-defepm -i kernel-modules-drm-nouveau-un-def- Если у Вас видеокарта Curie или старше, удостоверьтесь, что у вас установлен пакет xorg-drv-nouveau с DDX-драйвером Xf86-video-nouveau:
apt-get install xorg-drv-nouveauepm -i xorg-drv-nouveauИнформация
Xf86-video-nouveau — это DDX-драйвер для Xorg, необходимый для поддержки 2D и 3D-ускорения на старых видеокартах.
Для новых видеокарт существует универсальный modesetting-драйвер Xf86-video-modesetting, который уже входит в пакет Mesa и не нуждается в установке.
- Перезагрузите систему
su -
rebootКак только система загрузилась можно убедиться в том, что Nouveau заработало (в выводе сборки initrd должен присутствовать Nouveau):
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:
mcedit ~/.bashrcВнимание
Zink, как говорилось выше, нестабильный, и может ухудшить опыт работы с системой. Если наблюдаются вылеты приложений или иные проблемы, рекомендуется убрать параметр.
Оптимизация ввода-вывода Zink
Дополнительная оптимизация для Zink, в некоторых случаях позволяющая улучшить отзывчивость. В частности, убирает лаг курсора мыши при использовании Zink.
На момент лета 2024 года она всё ещё не внедрена в систему по умолчанию, т.к. ждёт изменения CTS тестов, тем не менее её можно запустить, добавив в переменные окружения ZINK_DEBUG=ioopt.
Как один из вариантов, можно добавить строку export ZINK_DEBUG=ioopt в конец ~/.bashrc:
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 для их нормальной загрузки обязательно требуют внедрение прошивки. Если при первой установке или запуске системы на устройстве с видеочипом одной из этих архитектур наблюдаются проблемы, можно временно перейти на другой видеорежим
- Установка прошивки:
apt-get install firmware-nouveauepm -i firmware-nouveauРучная установка прошивки
- Распакуйте прошивку:
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- Установите прошивку:
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.:
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 и видеопамяти.
- Проверьте доступные состояния питания:
su -
cat /sys/kernel/debug/dri/0/pstateОжидаемый вид вывода
07: core 405 MHz memory 810 MHz
0f: core 653-954 MHz memory 1600 MHz
AC: core 953 MHz memory 1600 MHz- Проверьте интересующее состояние на работоспособность:
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:
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:
su -
cat << _EOF_ > /etc/modprobe.d/nouveau_nvboost.conf
options nouveau config=NvBoost=1
_EOF_
make-initrdУправление скоростью вентиляторов (от Rankine до Maxwell)
Видеочипы от Rankine до Maxwell имеют поддержку управления вентиляторами.
Чтобы узнать точно, есть ли поддержка, нужно проверить, есть ли файлы управления:
ls /sys/class/drm/card0/device | grep pwm1Ожидаемый вид вывода
pwm1
pwm1_enable
pwm1_max
pwm1_min| Файл управления | Описание |
|---|---|
pwm1 | Управление постоянной скоростью. |
pwm1_enable | Включение режимов управления скоростью: 0 (выключить), 1 (вручную), 2 (автоматически) |
pwm1_max | Установка максимальной скорости. |
pwm1_min | Установка минимальной скорости. |
Путём добавления процентных значений скоростей в эти файлы (кроме pwm1_enable, где выбираются режимы), ими можно управлять
Пример
- Включение ручного управление (если будет
0или2, указывать скорости нет необходимости)
su -
echo 1 > /sys/class/drm/card0/device/pwm1_enable- Установка мощности вентилятора на 40%
su -
echo 40 > /sys/class/drm/card0/device/pwm1Один из вариантов управления — сделать изменения постоянными. Для этого нужно занести их в udev правила.
- Пример ручного управления:
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_- Пример автоматического управления:
su -
cat << _EOF_ > /etc/udev/rules.d/50-nouveau-hwmon.rules
ACTION=="add", SUBSYSTEM=="hwmon", DRIVERS=="nouveau", ATTR{pwm1_enable}="2"
_EOF_- Пример управления минимальными и максимальными значениями:
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 | Отключить обнаружение ТВ-выхода |
Владислав Бабенко
Давид Султаниязов
Олег Щавелев
Владислав Темнов