Страницы

вторник, 26 марта 2013 г.

О поддержке видеокарт Intel/AMD/NVidia в Linux. Часть I

В данной заметке, я буду собирать сведения, которые обычно находятся в разрозненном виде. Общий обзора графической подсистемы Linux найти сложно. Что за проблемы присутствуют, - только форумы.
Сведения в заметке могут легко устареть через месяц-два, но она позволит охватить одним взглядом сложившееся положение с графическим ускорением в Linux. Это вводная часть. Также может содержать неточности и разночтения, меру моего понимания и пр.

Intel/AMD/NVidia - три крупнейших производителя видеокарт для персональных компьютеров. Все трое, мало уделяют внимания поддержке своего оборудования в Linux. Последнее время, движение в правильном направлении наметилось, но ещё не достаточно. Правильное направление - это качественные открытые графические драйверы, с поддержкой 2D-3D ускорения и всего того спектра возможностей, о которых я читаю в рекламных проспектах. Пусть это будет один производитель, но чтобы качественно.


Столкнувшись с практической неработоспособностью видеодрайвера для графического процессора Intel GMA3650, я решил внимательнее посмотреть на текущую ситуацию, с обеспеченностью графических процессоров работоспособными драйверами.

Март 2013 года.
Версии приведены по состоянию на март 2013 года. Дополнения вносятся в Августе 2013 года.
Оборудование, для настольных персональных компьютеров, доступное в розницу в России, г. Воронеж, на момент написания заметки.


AMD - Advanced micro devices

Сайт компании: http://www.amd.com/

Фирменный драйвер (closed-source) компании AMD, для её видеокарт, носит название Catalyst
Общая страница технологии Catalist на сайте компании: http://www.amd.com/us/products/technologies/amd-catalyst/Pages/catalyst.aspx


Процессор APU: AMD Trinity A10-5800K, встроенный граф.ускоритель Radeon 7660D.

Последний отдельный графический ускоритель: AMD Radeon HD 7950
Последняя, наиболее производительная серия: AMD Radeon HD 7000 Series (codename Southern Islands)
Последний наиболее производительный ускоритель: AMD Radeon HD 7970 GHZ Edition
7000 серия обеспечивает аппаратную поддержку спецификации OpenGL 4.2, OpenCL 1.2

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

Привходящий APU: AMD Richland A10-6800K, встроенный графический ускоритель Radeon HD 8670D. лето 2013 года
Привходящая серия: AMD Radeon HD 8000 Series, 4 квартал 2013 года
Привходящий, наиболее производительный ускоритель: AMD Radeon HD 8970 GHZ Edition

Особенности текущей политики AMD - ежегодное обновление линейки процессоров APU.


Последняя версия фирменного драйвера Catalyst для Linux:
13.4 от 29 мая 2013 года.
13.1 от 17 января 2013 года.
Драйвер ранее, в эпоху ATI, назывался fglrx.

Привходящая версия драйвера Catalyst для Linux: 13.8 beta
Ссылка на страницу последнего драйвера для Linux: http://support.amd.com/us/gpudownload/linux/Pages/radeon_linux.aspx


Общая ссылка на страницу выбора драйвера: http://support.amd.com/us/gpudownload/Pages/index.aspx


Ссылка на страницу предыдущих версий драйвера для Linux:
http://support.amd.com/us/gpudownload/embedded/previous/Pages/embedded_linux.aspx

Основной способ установки: распаковка и запуск скрипта инсталляции, из-под суперпользователя.


Открытый драйвер (open-source), для видеокарт AMD и процессоров AMD APU



Поддержка графических ускорителей AMD Radeon, в оконной системе X Window, в основном обеспечивается драйвером с названием Radeon (x86-video-ati)
Страница с описанием драйвера Radeon: http://www.x.org/wiki/radeon
Последние изменения драйвера: Версия 7.1.0 от 30 января 2013 года, добавлена полная поддержка ускорения двумерной графики (2D acceleration) S.Islands, т.е. серии AMD Radeon HD 7000 Series.
Из интересного: Поддержка AMD APU Trinity добавлена 28 марта 2012 года

Страница со сводной таблицей возможностей, реализованных в открытом драйвере Radeon: http://www.x.org/wiki/RadeonFeature

Для 3d-ускорения видеокарт 7000 и 8000 серии используются т.н. Gallium-драйвер - RadeonSI (сокр. Radeon Southern Islands). Очень базовая поддержка.
Открытый драйвер для встроенной графики процессора AMD APU Trinity (Radeon HD 7660D) в настоящее время разрабатывается.



Intel - Integrated Electronics

Сайт компании: http://www.intel.com/

Последнее кодовое наименование процессоров: ivybridge
Последнее семейство настольных процессоров: Intel Core i7 3-d generation
Последняя серия встраиваемых графических ускорителей Intel: Intel HD Graphics 4000

Привходящее кодовое наименование: haswell
Привходящее кодовое наименование настольных процессоров: haswell-dt
Привходящее семейство настольных процессоров: Intel Core i7,i5,i3 4-d generation
Привходящая серия встраиваемых графических ускорителей Intel: Intel HD Graphics 4600 ( GT2), Intel HD Graphics 5200

Открытый драйвер для оконной системы X Window: x86-video-intel
Последняя версия: 2.21.5 от 20 марта 2013 года

Страница со сводной таблицей возможностей драйвера x86-video-intel: http://www.x.org/wiki/IntelGraphicsDriver

Открытый драйвер x86-video-intel поддерживает SNA/UXA ускорение двумерной графики.



Список наборов микросхем графических ускорителей, поддерживаемых
открытым драйвером Intel: https://01.org/linuxgraphics/about/supported-hardware

Увы, в этом списке, не указана поддержка Intel GMA3650, которая входит в процессор Intel Atom N2800, установленный на материнской плате Intel DN2800MT, на которой эта заметка написана.


NVidia

Сайт: http://www.nvidia.com/

Страница загрузки фирменных драйверов для видеокарт NVidia:
 http://www.nvidia.com/object/unix.html

Последняя версия фирменного драйвера nv: 310.40 от 8 марта 2013 года

Последний отдельный графический ускоритель для настольных компьютеров: Geforce GTX Titan
Аппаратно поддерживает Open GL 4.3, OpenCL, CUDA


Открытый драйвер x86-video-nouveau

Страница с описанием драйвера Nouveau: http://nouveau.freedesktop.org/wiki/
Последние изменения драйвера: 1.0.6
Поддерживается ускорение двумерной графики (2D EXA).
Технология Nvidia Optimus не поддерживается в настоящее время свободным драйвером neuveau.

nouveaufb - драйвер для виртуальной консоли.



Технологии, графические подсистемы, прикладные интерфейсы

X.Org

X.Org - свободная реализация оконной системы X Window system.
Сайт: http://www.x.org/wiki/


Чтобы узнать версию установленного X сервера:
$ X -version

X.Org X Server 1.13.3
Release Date: 2013-03-07
X Protocol Version 11, Revision 0

Журнал загрузки X сервера: /var/log/Xorg.0.log

Mesa

Mesa - открытая реализация интерфейса прикладного программирования трехмерной графики (API OpenGL), в виде библиотеки.

Сайт разработчика спецификации OpenGL: http://www.khronos.org/opengl

Последняя версия спецификации: OpenGL 4.3, OpenGL Shading Language 4.30, от 6 августа 2012 года


Сайт библиотеки Mesa: http://www.mesa3d.org/
Последняя версия: 9.2 от 27 августа 2013 года

Уровень поддержки спецификации OpenGL
Для достижения полной поддержки спецификации OpenGL 3.2 осталось реализовать язык "shader language 1.5" - GLSL 1.5.


Проверка версии Mesa в системе Ubuntu 13.04 установленной на плате Intel DN2800MT - команда glxinfo

gimmor@oko$ glxinfo | grep "OpenGL"
OpenGL vendor string: VMware, Inc.
OpenGL renderer string: Gallium 0.4 on llvmpipe (LLVM 0x301)
OpenGL version string: 2.1 Mesa 9.0.3
OpenGL shading language version string: 1.20
OpenGL extensions:

Откуда сразу становиться понятно, что версия в пакетах Ubuntu - не самая последняя, но устаревающая. Используется программный отрисовщик трехмерной графики. Поддерживается спецификация OpenGL версии 2.1, shading language 1.2.

Помимо OpenGL, библиотека Mesa поддерживает API OpenGL ES 1 и ES 2, OpenVG и EGL.

Gallium3D

Gallium3D - унифицирующий слой API. В настоящее время - часть исходных кодов библиотеки Mesa.
Унификация прикладного интерфейса породила термин Gallium-драйвер, это та часть, которая отличается, - своя для каждого графического ускорителя.

EXA 2D acceleration

Стандартный способ ускорения двумерной графики графическим ускорителем,  используемый в X сервере.
В настоящее время, большинство графических драйверов X Windows реализуют EXA ускорение.

XAA XFree86 Acceleration Architecure 

Устаревший способ ускорения двумерной графики - XAA, удалён из базы исходных кодов, начиная с версии X.Org 1.13.



SNA/UXA 2D acceleration

Способы ускорения двумерной графики используемые в открытом драйвере Intel для X Window.
UXA - первый реализованный способ, SNA - его дальнейшее развитие.
SNA - Sandy Bridge New Acceleration

Отличительная черта UXA - использование GEM (Graphics Execution Manager). GEM включен в состав ядра Linux и используется для поддержки работы драйвера intel.
Отличие SNA от UXA в переработанной внутренней структуре.


CLAMOR 2D acceleration - 2D over OpenGL

Ускорение отрисовки двумерной графики (2d), посредством 3d-драйвера.
Впервые введён в кодовой базе открытого драйвера x86-video-intel.

Новейший RadeonSI также поддерживает такую возможность.
Опция «AccelMethod» «glamor» в секции Device конфигурационного файла xorg.conf


OpenCL - Open Computing Language

OpenCL - каркас - полузабытое слово, способ организации программирования графических ускорителей (GPU), для использования
в обычных вычислениях. Содержит язык C99 и прикладной интерфейс
программирования.
Последняя версия спецификации: OpenCL

OpenVG
Ускорение векторной графики.
Сайт: http://www.khronos.org/openvg/


LLVM Low lever virtual machine

Унифицирующая технология компиляторов.
В Mesa используется программным ускорителем llvmpipe.


LLVMPipe

LLVMPipe - "пипе - ага, вот откуда пошла пипетка" - программный3d-растеризатор, как замена аппаратному ускорителю в графическом процессоре. Используется в т.н. "fallback" - безопасном режиме, при неработоспособности аппаратуры.

http://www.mesa3d.org/llvmpipe.html



VA-API Video acceleration application program interface

VA-API (Video acceleration application program interface) - открытый прикладной интерфейс, библиотека, обеспечивающая аппаратное ускорение декодирования видеоформатов.

http://www.freedesktop.org/wiki/Software/vaapi

Предложен фирмой Intel, в её свободных драйверах для своей встроенной графики.


VDPAU Video Decode and Presentation API

Наиболее поддерживаемый прикладной API для ускорения декодирования видеоформатов.
Предложен NVidia. Выступает как альтернатива иным прикладным интерфейсам ускорения декодирования видеоформатов (см. выше. VA-API).

XvBA X-Video Bitstream Acceleration

Открытый (open-source) прикладной API для ускорения декодирования видеоформатов, но работающий на закрытом драйвере AMD/ATI (Catalyst, быв. fglrx), предложенный фирмой AMD.
Может выступать как исполняющаяся часть VA-API.


VESA

VESA - стандартный графический драйвер, без ускорения.

FB Framebuffer
FB графический драйвер виртуальной консоли


AIGLX

$ cat /var/log/Xorg.0.log | grep AIGLX
[    19.390] (==) AIGLX enabled
[    19.826] (II) AIGLX: Screen 0 is not DRI2 capable
[    19.826] (II) AIGLX: Screen 0 is not DRI capable
[    19.863] (II) AIGLX: Loaded and initialized swrast

Direct rendering - способ прямого доступа к аппаратуре графического ускорителя

Изначально, ядро Linux, не разрешало прямого доступа к аппаратуре, в силу архитектуры своих корней Unix. Задумывалось скрыть оборудование от пользователя слоем абстрации. Однако, позже это вызвало трудности использования графических ускорителей в пользовательском пространстве, что и привело к созданию интерфейса DRI.

DDX

Драйвер внутри X Window



DRI - Direct Rendering Infrastructure

Страница проекта DRI: http://dri.sourceforge.net/

DRI2 - Direct Rendering Infrastructure  2

Страница проекта DRI2: http://www.x.org/wiki/DRI2/
Новая архитектура DRI.

DRM - Direct Rendering Manager
DRM - часть инфраструктуры DRI, находится в ядре.


LibDRM

Часть системы X Window, ответственная за прямой доступ к аппаратному ускорению.


KMS - Kernel Mode Settings

Mode settings - установка режима работы видеокарты - резрешения и числа цветов (битность, глубина цвета), выходов (outputs).

KMS в настоящее время поддерживают графические драйверы radeon, intel, nouveau

Используется для установки консоли высокого разрешения. Стандартная консоль имеет размер 80 символов на 25 строк.


GRUB2 - загрузчик (bootloader)

Опции, передаваемые ядру при загрузке (через GRUB):
text - загрузка в текстовом режиме
xforcevesa - принудительная (силой) загрузка драйвера стандарта VESA. Использовать когда невозможно загрузить обычный видеодрайвер. Т.е. это похоже на безопасный режим. Любая видеокарта поддерживает VESA режимы. Однако не будет 2D-ускорения.
nomodeset - отключение установки режимов, посредством KMS
video - установки режимов

Утилита xrandr

Управление выводами видеокарты, режимами, цветом,  компоновкой многомониторных конфигураций. Часть системы X Window.

Последняя версия: 1.2
Привходящая версия: 1.4


Wayland

Новый графический сервер. Запущен в разработку компаниями Intel и Reg hat. (синий волк и красная шапочка).

Страница http://wayland.freedesktop.org/
Последняя версия: 1.2


XWayland

Слой интеграции между X.Org и Wayland.

Mir

Новый собственный графический сервер (стэк) от Canonical.
Основное преимущество - работа на разнообразных платформах, от ПК до телефонов.
Ожидается и уже работает в Ubuntu 13.10.


XMir

Прослойка, позволяющая запускать приложения оконного сервера X, на сервере Mir.


NVidia Optimus

Технология переключения видеокарт "на лету".


bumblebee-nvidia

Поддержка технологии NVIDIA Optimus с использованием несвободного драйвера NVIDIA.


Unified Video Decoder UVD

В графических процессорах AMD - блок аппаратного декодирования битовых потоков, закодированных в стандартах H.264, AVC, VM-1 и пр.

В открытых драйверах Radeon появляется поддержка UVD.


VCE Video Codec Engine

В новейших графических процессорах AMD (AMD Radeon HD 7970) - блок аппаратного кодирования видеопотоков (VCE).
Данный аппаратный модуль присутствует и в гибридных процессорах AMD APU.


DPM Dynamic Power Management 

Технология управления потреблением питания, а значит и скоростью графической части в процессорах AMD APU.
Поддержка недавно введена в ядро Linux 3.11.
Обеспечивает существенное увеличение графической производительности встроенного в APU графического ядра, по сравнению с предыдущими.

Опция ядра: radeon.dpm=1

Что же будет когда все возможности чипов AMD будут использоваться открытыми драйверами.



libglvnd

Библиотека-диспетчер (Vendor-Neutral GL Dispatch Library). Прослойка позволяющая иметь одновременно в системе различные реализации OpenGL, от различных поставщиков. По идее, если я правильно понял, можно будет иметь видеокарты от AMD и NVidia в одной системе.

Linux OpenGL ABI

Исходные коды и более развернутое описание libglvnd: https://github.com/NVIDIA/libglvnd


Intel QuickSync

Аппаратная технология Intel для ускорения кодирования/декодирования видеоформатов.
Официально, в операционной системе Linux поддержка Intel QuickSync не осуществляется. 
Существуюет свободный декодер видеоформатов поддерживающий Intel QuickSync decoder.


Выводы. Intel vs AMD

Для нормальной рабочей конфигурации рассчитанной на использование двумерной графики(разработка программ, почта, интернет и пр.) - выбор прост - Intel HD4000 и соответственно платформа Intel, т.к. существуют открытые драйверы.

Для экспериментов с поддержкой графики AMD - выбор APU AMD. Жаль, AMD выпускает процессоры дешевле Intel, с хорошей встроенной графикой, но не ориентируется на аудиторию Linux - это маркетинговый просчёт, либо специальные соглашения с "оффтопик". А потребность существует, огромна и нормальный открытый драйвер для APU позволит очистить склады моментально. Увы, - "денег не надо" ©Д.Е.Г.

Высокая частота обновления графических процессоров не оставляет шансов устаревшим версиям на полноценную поддержку, в результате получается - новые процессоры ещё не поддерживаются, а старые уже не поддерживаются. ИМХО.

Для моих целей (разработка) выбор может быть любым. И только открытый драйвер.


Ресурсы

. http://en.wikipedia.org/wiki/Radeon_HD_7000_Series
. Запуск поддержки Glamor: http://phoronix.com/forums/showthread.php?78512-Running-radeonsi-on-Ubuntu-13-04
. О текущей поддержке спецификации OpenGL в свободной библиотеке Mesa/Gallium3D. http://www.phoronix.com/scan.php?page=news_item&px=MTMzMzI
. Форум Ixbt - i3 vs A10, http://forum.ixbt.com/topic.cgi?id=8:24062
- Компания AMD открыла код для ускорения декодирования видео силами UVD-декодеров GPU. http://www.opennet.ru/opennews/art.shtml?num=36571
- О технологии Intel QuickSync. http://ru.wikipedia.org/wiki/Intel_Quick_Sync_Video
- Свободный декодер на основе Intel QuickSync. http://sourceforge.net/projects/qsdecoder/
- AMD Fusion Linux Gallium3D Performance Has Improved A Lot. http://www.phoronix.com/vr.php?view=19007
- http://en.wikipedia.org/wiki/X-Video_Bitstream_Acceleration
- NVIDIA Publishes Vendor-Neutral GL Dispatch Library. http://www.phoronix.com/scan.php?page=news_item&px=MTQ0NzU

1 комментарий:

Dmitriy комментирует...

Замечательная новость касающаяся поддержки VCE Engine 1.0 в Linux (аппаратный блок кодирования H.264) в APU процессорах
http://www.phoronix.com/scan.php?page=news_item&px=Radeon-VCE-Trinity-Richland