Видео подсистема Linux и проблема драйверов

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

Прежде всего давайте выясним теоретически как работает видео подсистема в Linux. Сразу скажу что вывести изображение на экран можно двумя логическими путями и несколькими программными посредством реализации взаимодействия разных библиотек.
Первый вариант через Х сервер, второй практически напрямую к GPU. Смотрим

DRI, инфраструктура прямого рендеринга [Direct Rendering Infrastructure], реализует взаимодействие OpenGL с X сервером. DRI включает четыре основных компонента. Во-первых, это libGL, которая обеспечивает API OpenGL и действует как переключатель между драйверами. Во-вторых, это специфичная для конкретного видео оборудования библиотека DRI, осуществляющая взаимодействие с графическим процессором. Для возможностей OpenGL, не реализованных драйвером DRI, требуется программная эмуляция, для чего используется Mesa. Следует заметить, что Mesa это полная программная реализация OpenGL. Видеокарты, не поддерживающие ускорение, могут реализовывать OpenGL с помощью Mesa. И наконец, DRM, менеджер прямого рендеринга [Direct Rendering Manager]. DRM драйвера выполняются в контексте ядра, управляя видеоподсистемой компьютера и обеспечивая необходимую защиту от несанкционированного доступа.
Интересная черта DRI — это слово прямой [Direct] в названии. Каждое приложение, используя DRI напрямую, управляет видеоподсистемой. В этом отличие от X, где вы посылаете команды отрисовки серверу, и уже сервер обращается к оборудованию. Драйвера DRM обрабатывают множественные запросы для исключения взаимных ошибок. Преимущества такой модели в том, что отрисовка через OpenGL происходит без накладных расходов на обмен и передачу данных серверу. Недостатки — во множественных переключениях контекста видеокарты. Некоторые видеокарты умеют быстро переключать графический контекст, некоторые нет. Microsoft уже столкнулась с этой проблемой, и поддержка аппаратного переключения контекста одно из требований для получения логотипа «Оборудование совместимо с DirectX 10».
DRM также поддерживает концепцию главного пользователя, как известно, обладающего наибольшими правами относительно обычных пользователей. Эти дополнительные права позволяют инициализировать видеокарту и контролировать потребление ресурсов графическим процессором. Текущая реализация X сервера, запускаемого с правами главного пользователя системы, функционирует как «главный пользователь» для DRM. Это не значит, что главный пользователь DRM всегда обязательно должен иметь права главного пользователя всей операционной системы, и существует патч, исключающий такое требование.
Когда видеокарта не поддерживает какую-либо операцию, Mesa реализует её программно. Это называется «возврат ошибочного вызова». Некоторых такое название смущает. Они говорят, что OpenGL не полностью поддерживается X сервером. Подумайте об этом. Аппаратный OpenGL поддерживается не полностью из-за большого количества возможностей функций, в то время как X поддерживает только несколько. Если встречается функция, присутствующую в обоих драйверах, то она будет обработана аппаратно. Если нет, придётся дорабатывать соответствующий драйвер.

ога теперь посмотрим как это будет программно.


вот какие есть варианты взаимодействия библиотек

App -> gtk+ -> X -> XAA -> hw
Работа современной версии X сервера. Приложение взаимодействует с графической библиотекой, которая использует xlib API.X сервер осуществляет отрисовку через драйвера XAA. X сервер и приложение, в данном случае, — два разных процесса.

App -> gtk+ -> Cairo -> X Render -> X -> XAA/EXA -> hw
Работа с графической библиотекой, использующей Cairo (через X сервер). Cairo применяет X Render. В случае поддержки EXA, используется аппаратно ускоренная версия X Render. X сервер и приложение — снова два разных процесса.

App -> qt -> Arthur -> X Render -> X -> XAA/EXA -> hw
Arthur библиотека, входящая в QT4 эквивалентная Cairo, действует почти также.

App -> gtk+ -> Cairo -> glitz -> GL -> hw
Работа с графической библиотекой, использующей Cairo (через glitz). Cairo использует модуль glitz для отрисовки, основанной на OpenGL. Используется аппаратное ускорение, все происходит в одном процессе.

App -> gtk+ -> Cairo -> X Render -> Xgl -> EGL(standalone) -> GL -> hw
Случай применения Cairo, xlib, Xegl. Xegl применяет glitz для отрисовки. Glitz направляет отрисовку на видеокарту. Xegl и приложение являются разными процессами. Заметьте, что графическая библиотека может выбрать прямое использование glitz, а значит и отрисовку в одном процессе.

App -> gtk+ -> Cairo -> X Render -> Xgl -> GLX(X) -> GL -> hw
В этом случае графическая библиотека работает через X Render и Xglx сервер. Xglx не отдельный сервер, а включенный (nested). В то же время, он не совсем обычный включенный сервер: он работает как подчиненный только на ввод, а отрисовывает изображение через OpenGL внутри окна, созданного на основном сервере. В полноэкранном режиме вы не увидите основного сервера. В данном случае работают три процесса: приложение, Xglx и обычный X сервер. Приложение использует Xglx, Xglx рисует напрямую через DRI. Третий процесс (X сервер) используется, так как он обеспечивает окно и ввод. Так же с него запускается Xglx.

Вот и разложили принцип работы графической подсистемы. Проблем много, но они выглядят вполне решаемыми, потомучто X.Org Foundation координирует работу над X серваком, ругелярно выходят новые версии люди набираются опыта, в фонд вкладывают деньги такие компании как Red Hat Intel и многие другие. Остается надеяться на лучшее.

Теперь к проблеме видео драйверов в Linux. Проблема в чем .

1 В нежелании компаний писать качественные драйвера в Linux по причине малой распространенности десктопных версий Linux.
2 Не желание компаний открывать спецификации на видеочип из за боязни утечки технологических решений и нарушения патентов.
3 По причине не открытости спецификаций сообщество открытого программного обеспечения сталкивается с большими трудностями в процессе написания открытых драйверов
Есть ещё проблемы но мне именно эти видятся основными.

И так, как все мы знаем сейчас есть 3 основных производителя видеокарт это Intel, Ati(Amd), NVIDIA.

Посмотрим на состояние их драйверов и попытаемся оценить перспективы на будущее

1 Intel. Как всегда она лидирует в сегменте дешевых офисных видеосистемах, она исправно открывает документацию и исправно сообщество пишет дрова под интеловские видюхи. С этими дровами можно поиграть легкие игры, без напряга на них идет Compiz Fusion, Beryl и т.д

Intel собирается произвести оптимизацию Mesa. В текущий момент проприетарные драйверы от Intel (для Windows), ATI и NVidia выигрывают по производительности от 2 до 10 раз (в зависимости от чипа и приложения). Уже подготовлен первый патч, который состоит из 500 строчек кода. Также стоит отметить, что переход на Gallium3D зачастую приводит к ухудшению производительности.

2 Ati. Эта компания делает лучшие видеокарты на сегодняшний день, но вот на Linux ставить её совсем не желательно. Дрова очень сырые и глючные. Последнее время они стали чаще выпускать драйвера и есть надежда на улучшение положения. Компания периодически открывает спецификации видеочипов и сообщество получило возможность писать открытые драйвера

по состоянию на сегодня по закрытым драйверам мы имеем :

ATI/AMD — Catalyst 10.8.

В новой версии Добавлено:

поддержка SLED/SLES 11 SP1;
полная поддержка OpenGL ES 2.0.
Решены проблемы:

отключение первичного дисплея в режиме clone/dual-head больше не приводит к неправильному запуску Catalyst Control Center после перезагрузки Х-сервера;
X-сервер больше не прекращает работать, если запущено полноэкранное OpenGL приложение с включённым CrossFire, и если второй дисплей выбран в качестве ускоряемого;
Catalyst Control Center теперь запускается нормально при мультиадаптерной конфигурации 2х HD5900 Series;
Glxgears/fgl_glxgears при полноэкранном режиме больше не остаётся при нажатии на кнопку закрытия;
6% падение производительности больше не наблюдается, когда запущены glxgears/fgl_glxgears на некоторых картах;
По-прежнему остаются не решёнными проблемы:

с прокруткой в Firefox при перетаскивании полосы прокрутки;
с падениями при запуске Quake 4 и Enemy Territory: Quake Wars в разрешении 1280х1024 и выше;
и др.

с открытыми драйверами ситуация такая :

разработчики видеодрайверов для видеочипов производства ATI добавили поддержку OpenGL 2.1 через классическую Mesa. Также стоит обратить внимание на данную таблицу. Из таблицы можно сделать следующие выводы о состоянии FOSS драйверов для видеочипов ATI:

В текущий момент нет полнофункционального драйвера ни для одного видеочипа
Наиболее функциональны драйверы у чипов R300/400/500
Для чипов R300/400/500 реализована поддержка OpenGL 2.1 (через Gallium3D), также поддерживается Texture Tiling, управление энергопотреблением (за исключением чипа R300, для которого пока нет поддержки изменения частоты памяти), Suspend, Dual-link DVI и TV выход
Практически полностью реализованы технологии Hyper-Z, GLSL и HDMI Audio
В текущий момент программисты работают над поддержкой VDPAU, VA-API, XvMC (используя Gallium3D) и Anti-aliasing
Для чипа R100 реализована поддержка OpenGL 1.3 и TV Out, технология Texture Tiling практически реализована, Hyper-Z помечен как «WIP», также не поддерживается VDPAU, VA-API, XvMC и изменение частоты видеопамяти (реализация поддержки остальных технологий также завершена полностью, как для R300/400/500)
Ситуация с чипом R200 аналогична с R100, за исключением того, что за реализацию технологии Hyper-Z разработчики ещё не приступали
Для чипов R600/700 реализована поддержка OpenGL 2.1 (через классическую Mesa), DisplayPort, TV out, Dual-link DVI, HDMI audio и энергосбережение. Реализация Texture Tiling помечена как «WIP», а VDPAU, VA-API, XvMC, Anti-aliasing и Hyper-Z помечены как «TODO»
Для чипов R800 пока что реализована поддержка только 2D

по моему ещё хуже. Никому не рекомендую покупать решение от ATI для использования совместно с ОС Linux, пожалейте себя и свои нервы !

3 NVIDIA Вот у этих ребят с дровами все намного лучше! Они исправно выпускают драйвера для всех своих видюх! Драйвера очень производительные! Проблема в том что драйвера закрытые и компания очень неохотно открывает спецификации видеочипов… и разработчики открытых дров не имеют возможности реализовать все функции чипов, вследствие чего открытые драйвера для видюх NVIDIA сырые и малопроизводительные. Кто не хочет проблем ставьте проприетарные и радуйтесь жизни.

и так ситуация с закрытыми дровами такая :

Исправлена ошибка, препятствовавшая инициализации XvMC в большинстве случаев.
Добавлена поддержка видео драйвера ABI версии 8 для xorg-сервера, который будет предоставляться вместе с ожидаемым выпуском xorg-server-1.9.
Исправлена ошибка, замедлявшая визуализацию OpenGL приложений на X экранах, отличных от экрана 0 при использовании композитного менеджера.
Исправлена введенная в 265.35 регрессия, вызывавшая проблемы стабильности на графических процессорах, типа GeForce GT 240.
Исправлено медленное распределение виртуальных адресов ядом, замеченное при запуске и остановке приложений OpenGL, CUDA и VDPAU.
Исправлена ошибка, вызывавшая подвисание системы при одновременном запуске двух или более приложений VDPAU.

Закрытые драйвера очень хорошо и поэтому стоит брать видюхи NVIDIA не пожалеете.
и вот такая с открытыми :

В ядро Linux версии 2.6.36 войдёт код отвечающий за KMS для видеокарт GeForce GTX 470/480. К сожалению, ни 2D EXA, ни 3D с использованием Gallium3D пока поддерживаться не будут.

Также стоит обратить внимание на данную таблицу. Из таблицы можно сделать следующие выводы о состоянии FOSS драйверов для видеочипов NVidia:

В текущий момент нет полнофункционального драйвера ни для одного видеочипа
Наиболее функциональны драйверы у чипов NV30/40/50
Для чипов NV30/40/50 реализована поддержка OpenGL 2.1 через Gallium3D (OpenGL 2.1 — максимальная версия OpenGL которую поддерживает Mesa/Gallium3D)
Реализация поддержки TV выхода есть только для чипа NV30
Технологию Multicard, в текущий момент, поддерживается только для NV40/50
Suspend поддерживается всеми чипами, за исключением Fermi
Технология энергосбережения не поддерживается ни одним чипом на данный момент
Поддержка OpenCL, HDMI audio, SLI тоже пока не реализована
Для чипов NV04/05/10/20 в текущий момент идёт разработка поддержки 3D (через классическую Mesa)
Для чипов Fermi реализована поддержка только KMS

Вот на этом я завершу разбор полетов, пожалуйста комментируйте, критикуйте, спорьте ибо в споре рождается истина!!!
  • +2
  • 03 сентября 2010, 23:13
  • k1b3r_4r7

Комментарии (3)

RSS свернуть / развернуть
+
0
думал, эти проблемы с видюхой на никсах почти решены. Если конечно сравнить, что несколько лет нужно было плясать с бубном, чтоб нормально работало, а оказываеться вот еще столько проблем есть) не знал.
avatar

Biotin

  • 04 сентября 2010, 19:20
+
+1
Да проблем реально много, но щас конечно ситуация явно улучшилась, это лучше чем было. Чем больше люди будут юзать Linux тем быстрее и лучше под него начнут писать. Вот я и надеюсь на Linux Ubuntu :)
avatar

k1b3r_4r7

  • 04 сентября 2010, 19:35
+
0
да, с Ubuntu проблем не бывает. Думаю, это самый лучший дистрибутив, ориентированный на пользователей. Сам сижу на нем уже 2 года и никак не слезу, привык)
avatar

Biotin

  • 04 сентября 2010, 20:14

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.