Nouveau (Українська)

From ArchWiki

У цій статті розглядається відкритий драйвер Nouveau для відеокарт Nvidia. Якщо ви хочете ознайомитися із пропієтарним драйвером, перегляньте сторінку NVIDIA.

Щоб визначити функції, які Nouveau підтримує з вашою відеокартою, спочатку знайдіть її в цьому списку (кодові назви Nouveau). Порівняйте потрібну кодову назву з таблицею функцій (Feature Matrix).

Встановлення

  • Для драйвера DDX (який надає 2D прискорення в сесії X.org) встановіть пакунок xf86-video-nouveau
  • Для підтримки 3D-прискорення, встановіть пакунок mesa, який надає драйвер DRI
  • Для підтримки 32-бітних програм встановіть пакунок lib32-mesa (репозитарій multilib).
Примітка: Було запропоновано не встановлювати X.org драйвер xf86-video-nouveau (звіт користувачів), а замість цього використовувати драйвер modesetting для NV50 (Tesla) та новіших відеокарт.

(Необов'язково) Щоб отримати останні вдосконалення Nouveau, встановіть такі пакети:

Апаратне прискорення відео

Nouveau підтримує як і VA-API, так і VDPAU

  • Підтримка є від серії GeForce 8 і до Kepler (NV108) (Але ви ще можете спробувати це все завести на Maxwell).

Але для його роботи потрібно встановити пакет прошивок nouveau-fwAUR, отриманих з бінарного драйвера NVIDIA

За деталями звертайтеся до сторінки Hardware video acceleration

Підготовка до встановлення Mesa NVK Vulkan Драйвера

Примітка: Над цим драйвером триває робота, тому можливі регресії. Можливо, ваша гра або програма не буде працювати з цим драйвером, але є велика ймовірність того, що в найближчому майбутньому вона запрацює.

Для драйвера NVK необхідне ядро версії 6.7 та више і mesa версії 24.1 та вище.

Перш ніж використовувати NVK, ви повинні видалити пропієтарний драйвер. Необхідно видалити ці пакунки з переліку (та їх lib32 і модулі DKMS):

Якщо ви використовуєте гібридний ноутбук або систему з двома графічним процесором, переконайтеся, що ви не внесли Nouveau до чорного списку менеджером графічного процесора в /etc/modprobe.d.

Примітка: Можливо, вам також слід видалити будь-які менеджери GPU у вашій системі, оскільки більшість із них працюють за допомогою модулів у чорному списку, які можуть заважати NVK.

Встановлення Mesa NVK

Для підтримки Vulkan (Turing NV160 та новіших), встановіть пакунок vulkan-nouveau.

Для підтримки 32-бітної версії Vulkan встановіть пакет lib32-vulkan-nouveau

Якщо хочете мати найновішу версію NVK, встановіть пакунок vulkan-nouveau-gitAUR та lib32-vulkan-nouveau-gitAUR, для підтримки 32-бітної версії Vulkan

Використання Mesa NVK

Щоб переконатися, що все працює vulkaninfo з vulkan-tools можна використовувати. Він повинен повідомити, що графічний процесор NVIDIA у вашій системі використовує драйвер NVK.

$ vulkaninfo
...
GPU id : 0 (NVIDIA GeForce RTX 3050 Ti Laptop GPU (NVK GA107)):
      Surface type = VK_KHR_wayland_surface
        Formats: count = 8
...

Поради та підказки стосовно графічних API

Використання NVK на відеокартах NVF0-NV140 і новіші

Якщо визначено до 1 або true, це дозволить перерахувати та використовувати всі GPU Kepler та новіші, включаючи графічні процесори, для яких апаратна підтримка погано протестована або повністю зламана. Джерело

$ NVK_I_WANT_A_BROKEN_VULKAN_DRIVER=1 програма
Примітка: Використовуйте цю змінну, якщо вам потрібна найновіша версія Vulkan або загалом Vulkan на відеокартах нижче NV160.

Використання Zink

Так як виникають проблеми при реалізації нативного OpenGL для драйверу Nouveau, було прийнято рішення використовувати драйвер Zink.

Zink — це драйвер Gallium, який генерує виклики API Vulkan замість того, щоб орієнтуватися на конкретну архітектуру GPU. Це можна використовувати для отримання повної підтримки OpenGL на пристроях, які підтримують лише Vulkan.

Найкраще він зараз працює на відеокартах NV160 та надає OpenGL 4.6 Просто додайте цю змінну перед командою запуску:

$ NOUVEAU_USE_ZINK=1 програма

Як альтернативу, ви можете використовувати змінну MESA_LOADER_DRIVER_OVERRIDE=zink:

$ MESA_LOADER_DRIVER_OVERRIDE=zink програма

Також, якщо у вас відеокарта нижча за NV160, то ви можете комбінувати дві змінні

$ NVK_I_WANT_A_BROKEN_VULKAN_DRIVER=1 NOUVEAU_USE_ZINK=1 програма

Завантаження в систему

Модуль ядра Nouveau повинен завантажуватися автоматично під час завантаження системи. Якщо це не так, перевірте наступне:

  • Пенеконайтеся, що у вас немає зайвих параметрів ядра, на кшталт nomodeset або vga=, оскільки драйвер вимагає Kernel mode setting
  • Перконайтеся, що ви або якісь інші утиліти не занесли драйвер Nouveau в чорний список в /etc/modprobe.d/ або /usr/lib/modprobe.d/.
  • Перевірте файл /etc/X11/xorg.conf або подібні в теці /etc/X11/xorg.conf.d/. Ймовірно, там залишилися якісь конфіги.

Kernel Mode Setting

Налаштування режиму ядра (KMS) підтримується Nouveau і увімкнуто за замовчуванням, починаючи з mkinitcpio v32. Для інших налаштувань див. Налаштування режиму ядра, щоб отримати інструкції щодо того, як увімкнути KMS якнайшвидше під час процесу завантаження.

Поради та підказки

Залишити встановленим драйвер NVIDIA

Якщо ви хочете залишити встановленим пропрієтарний драйвер NVIDIA (і не використовуєте OpenGL), але бажаєте використовувати драйвер Nouveau, виконайте наступні кроки:

Закоментуйте чорний список для драйвера Nouveau у файлах /etc/modprobe.d/nouveau_blacklist.conf та /usr/lib/modprobe.d/nvidia-utils.conf, змінивши їх так:

#blacklist nouveau

Також, можливо, вам потрібно буде закоментувати інші файли конфігурації, які пріоритезують пропрієтарний драйвер, наприклад, у systemd-modules-load /usr/lib/modules-load.d/nvidia-utils.conf, та у Udev /usr/lib/udev/rules.d/60-nvidia.rules. Перевірте, які файли встановив драйвер, за допомогою наступної команди:

# pacman -Ql nvidia-utils | grep conf

Потім переконайтеся, що ви вимкнули всі служби з префіксом nvidia-, які можуть викликати nvidia-modprobe для завантаження модуля під час завантаження системи. Наприклад:

$ systemctl status nvidia-persistenced.service

І якщо ви використовуєте Xorg, скажіть Xorg завантажити nouveau замість NVIDIA, створивши файл /etc/X11/xorg.conf.d/20-nouveau.conf з таким вмістом:

Section "Device"
    Identifier "Nvidia card"
    Driver "nouveau"
EndSection

Перезавантажте систему, щоб зміни набрали чинності. І перевірте, чи все завантажилось правильно, переглянувши повідомлення ядра:

# dmesg

Монітори

Завітайте на сторінку Multihead#RandR, де написано як налаштувати декілька моніторів за допомогою RandR.

Налаштування роздільної здатності консолі

Ви можете виставити роздільну здатність за допомогою video= в параметрах ядра (дивіться додатково: KMS).

Керування живленням (reclocking)

Відсутність належного керування живленням у драйвері nouveau є однією з найважливіших причин проблем із продуктивністю, оскільки під час використання більшість карт залишатимуться в стані низького енергоспоживання з нижчою тактовою частотою. Експериментальна підтримка керування живленням графічного процесора доступна від NV40, і до новіших відеокарт (не враховуючи NV130 та NV140).

Примітка: Відстутність керуванням живленням на відеокартах NV130 та NV140 є завдяки компанії Nvidia, яка запровадила підписані прошивки, які необхідні відеокартам NV140 та NV160. Якщо раніше можна було згенерувати прошивку та написати PMU для відеокарти, то для цих карт потрібна прошивка від Nvidia. Якщо у вас вона є, або ви хочете її видобути з пакету драйверів Nvidia, напишіть будь ласка в канал IRC: #nouveau.

Ця частина вікі (4.3.0, 4.3.2 та 4.4) буде відноситися тільки для серії відеокарт від NV40, і до NV120. Для NV160 дивіться пункт 4.3.1

Для підтримки керування живленням потрібне ядро 4.5 та вище, керувати живленням можна через інтерфейс debugfs, який розташований за шляхом /sys/kernel/debug/dri/*/pstate

Щоб перевірити доступні рівні та поточне значення, виконайте:

# cat /sys/kernel/debug/dri/0/pstate

Щоб виставити потрібний параметр, виконайте

# echo pstate > /sys/kernel/debug/dri/0/pstate

Керування живленням для NV160 та вище

Вам потрібно мати ядро 6.7 та вище. Додайте nouveau.config=NvGspRm=1 до параметрів ядра Linux. Це надає вам змогу використовувати автоматичне керування живленням.

Додаткові утиліти

Встановіть пакунок nouveau-reclockingAUR

Про пакунок:

  • Ця утиліта на Lua має допомогти спростити процес reclocking та зробити це легше, без додаткових зусиль в терміналі. Зауважте, що якщо ваш графічний процесор не підтримує reclocking, то ця утиліта напевно для вас марна витрата часу. Джерело

Для перевірки, передивіться доступні профілі

# nouveau-reclocking --list

Якщо у вас відобразився список pstate, то можна спробувати виставити максимальне число:

# nouveau-reclocking --max
Примітка: Якщо ви використовуєте один із наведених нижче варіантів: --max, --min, або --pstate без уточнення --card, скрипт автоматично виявить картки доступні для повторного блокування та встановіть для них відповідний рівень Pstate. Також зауважте, що будь-які зміни, зроблені без вказівки параметра --save, працюватимуть лише до перезавантаження.

Збережіть профіль, щоб він не скинувся та автоматично застосовувався після перезавантаження:

# nouveau-reclocking --save

Керування вентиляторами

Якщо це реалізовано для вашої карти, ви можете налаштувати керування вентилятором через /sys

$ find /sys -name pwm1_enable
/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/hwmon/hwmon1/pwm1_enable
$ readlink /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/driver
../../../../bus/pci/drivers/nouveau

pwm1_enable можна встановити на 0, 1 або 2, що означає НЕМАЄ, РУЧНИЙ і АВТОМАТИЧНИЙ контроль вентилятора. Якщо встановлено ручне керування вентилятором, ви можете встановити pwm1 вручну, наприклад до 40 на 40%.

Попередження: Використовуйте на свій ризик, не перегрівайте свою відеокарту.

Ви також можете встановити це за правилом udev:

$ cat /etc/udev/rules.d/50-nouveau-hwmon.rules
ACTION=="add", SUBSYSTEM=="hwmon", DRIVERS=="nouveau", ATTR{pwm1_enable}="2"

Джерела:

Optimus

У вас є два рішення для використання Optimus на ноутбуці (гібридна графіка, коли у вас два графічних процесори на вашому ноутбуці): bumblebee та PRIME

Вертикальна синхронізація

Композитори Xorg схильні виявляти проблеми з Nouveau. На відміну від більшості з них, Picom пропонує безліч варіантів налаштування для більш гладкого результату без розривів. Конфігурація, яка, як очікується, дасть хороший результат, буде такою:

$ picom -b --unredir-if-possible --backend xr_glx_hybrid --vsync --use-damage --glx-no-stencil
Примітка: В віконих менеджерах KWin, Mutter, XFWM розривів не помічено.
Порада: Не забудьте вимкнути компонування віконного менеджера DE, наприклад KWin, коли користуєтеся іншим компонувальником.

Усунення несправностей

Щоб отримати додаткову інформацію в логах, додайте drm.debug=14 та log_buf_len=16M до параметрів ядра Створіть докладний журнал Xorg:

$ startx -- -logverbose 9 -verbose 9

Переглянути параметри та значення завантаженого відеомодуля:

$ modinfo -p video

Вимкніть MSI

Якщо у вас все ще виникають проблеми із завантаженням модуля або запуском X-сервера, додайте nouveau.config=NvMSI=0 до ваших параметрів ядра. Джерело: [1]

Фантомний відеовихід

Драйвер nouveau може виявити «фантомні» виходи. Наприклад, і VGA-1, і LVDS-1 відображаються як підключені, але присутній лише LVDS-1. Це спричиняє проблеми з відображенням і/або запобігає призупиненню під час закриття кришки.

Параметри ядра

Проблему можна також подолати, вимкнувши фантомний вихід (VGA-1 у наведених прикладах) за допомогою параметрів ядра:

video=VGA-1:d

Де d = вимкнено

Модуль ядра nouveau також має можливість вимкнути виявлення ТВ-виходу

tv_disable=1

xorg.conf

Фантомний вихід також можна вимкнути в Xorg, додавши наступне до /etc/X11/xorg.conf.d/20-nouveau.conf:

Section "Monitor"
   Identifier "VGA-1"
   Option "Ignore" "1"
EndSection

Джерело вирішення

Xrandr

Xrandr може вимкнути вихід:

$ xrandr --output VGA-1 --off

Це можна додати до конфігурації xinit.

Випадкові блокування з повідомленнями про помилки ядра

Окремі мікросхеми Nvidia з Nouveau можуть спричиняти випадкові блокування системи та частіше викидати багато повідомлень ядра, що спостерігається за допомогою dmesg . Спробуйте додати nouveau.noaccel=1 до параметрів ядра. Джерело.

Зауважте, що використання параметра ядро nouveau.noaccel=1 може спричинити ~%100 використання ЦП на Wayland, якщо немає iGPU або iGPU вимкнено на заводі. Ви можете перейти до сеансу X11 або віддати перевагу додаванню LIBGL_ALWAYS_SOFTWARE=1 змінна середовища для wayland, щоб повністю вимкнути апаратне прискорення OpenGL.

Як альтернативу ви також можете використовувати QT_XCB_FORCE_SOFTWARE_OPENGL=1 змінна середовища , щоб вимкнути прискорення OpenGL у програмах Qt.

Таблиця плоскої панелі недійсна (Flat Panel Table Invalid)

Відеокарти NVIDIA з останніми наборами мікросхем можуть спричинити проблеми із запуском, зокрема неможливість запуску X11 і зависання lspci на невизначений час [2][3][4][5][6].

Це може порушити дію живих дистрибутивів/інсталяційних носіїв. Це можна виявити, запустивши lspci або перевіривши журнал systemd на наявність помилки:

nouveau E[     DRM]Pointer to flat panel table invalid

Система може запуститися, якщо драйвер Nouveau вимкнено шляхом передачі таких параметрів ядра:

modprobe.blacklist=nouveau

Потім драйвер Nouveau можна завантажити за допомогою

# modprobe nouveau

Після цього система повинна працювати правильно. Якщо у вас є інша графічна карта Nvidia або ви просто хочете бути в безпеці, ви можете вимкнути несправну карту за допомогою:

$ echo 1 > /sys/bus/pci/devices/[card device id]/remove