MyTetra Share
Делитесь знаниями!
Как устроен графический драйвер NVidia под Linux?
Время создания: 23.11.2022 13:49
Текстовые метки: linux, nvidia, X, X11, икс-сервер, wayland, драйвер, модуль, ядро, библиотека
Раздел: Компьютер - Linux - Оконные менеджеры DE и X-сервер X11 в Linux
Запись: xintrea/mytetra_syncro/master/base/1669200571x9l8kc995y/text.html на raw.github.com

Основнаые компоненты Linux-драйвера


Драйвер видеокарты состоит из четырёх основных компонент:


Kernel driver - nvidia.ko
X11 driver - nvidia_drv.so
GLX Server - libglx.so
GLX Client - libGL.so.1


Как можно видеть, собственно сам драйвер поделён на две части (nvidia.ko и nvidia_drv.ko), и OpenGL поделён на две части (libglx.ko и libGL.ko).


Другое объяснение: это всё один драйвер, есть ядерная часть и части в юзерспейс. Библиотека OpenGL - это неотъемлемая часть драйвера - она в рантайме генерирует команды для конкретного GPU. Все четыре файла - это собственно драйвер и есть. Три части в юзерспейс (X11 driver, GLX Server, GLX Client) - это реализации разных API.


В случае, когда все эти части находятся на своих местах, всё работает прекрасно. Если же какая-то часть отсутствует - будут наблюдаться интересные эффекты. Например команда glxinfo может сообщать, что часть OpenGL у нас от Месы, а часть glx - от NVIDIA. Или иксы запускаются с драйвером nvidia_drv.so, и даже изображение на экран выводится - вот только nvidia-settings показывает, что драйвер не работает, потому что nvidia.ko отсутствует.

В 2022 году NVidia открыла под OpenSource-лицензией первый компонент из этих четырёх. И это прекрасно. Теперь будет значительно проще пользоваться Legacy-версиями драйверов на новых системах! А когда откроют вторую, можно будет забыть и про ключик IgnoreABI при выходе новой версии "иксов".

Кроме того, на Wayland вроде как используется KMS, а значит, нету разделения драйвера на две части. Похоже что на Wayland можно будет не ждать, когда в драйвер добавят поддержку нового ABI. В теории и на иксах можно будет заменить nvidia_drv.so на modesetting_drv.so. На Интеле уже пробовали, однако я не знаю, что из этого получилось.

У AMD примерно так же было изначально. Постепенно открытый драйвер в MESA стал настолько хорош что про проприетарный юзермод все как-то позабыли. А он зачем, если MESA даже быстрее и менее глючная? А основой открытого модуля ядра amdgpu стал реверснутый Radeon, что забавно. Прикольно когда производитель окультуривает реверс до продукта, используя свои "внутренние" обозначения регистров и проч.


Про Nouveau


Основной затык MESA+Nouveau в том что оно для актуальных чипов не умело реклок (переключение частоты ядра). Так то оно неплохое, реализует все фичи OpenGL и прочих. Но работа на 20% скорости (или сколько там по дефолту бутовая скорость GPU - в VBIOS прописывается вендором/OEM-ом обычно) - все это портит, получается что все работает - но со скоростью затычки для слота. И радости с того? А документации на реклок в открытом доступе нет, фирмварь обложили через SecureBoot, так что открытые прошивки перестали работать, что хотите то и делайте, дорогие опенсорсеры. А вот в модуле все это, по идее, должно быть.


Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования