LINUX.ORG.RU
ФорумTalks

Зачем видеодрайвера в Линуксе засунули в ядро?

 , , ,


0

3

Вначале же было хорошо сделано с DDX драйверами и установкой видеорежима в X.Org, что более портабельно, безопасно и надёжно (падение видеодрайвера не приводит к kernel panic и его можно перезапустить). Потом зачем-то выдумали DRM-KMS с миллионами строк кода видеодрайверов в ядре прибитые гвоздями к внутренностям Линукса, так что в *BSD/Solaris и др. приходится проводить много работы чтобы портировать этот код на своё ядро. Зачем так надо было делать и вставлять палки в колёса другим ОС?

В Haiku например основная часть видеодрайвера – это динамически загружаемый модуль в пользовательском пространстве. Ядерный драйвер небольшой и отвечает за определение видеокарты, управление видеопамяти и предоставление доступа к видеокарте из пространства пользователя. Ядро не умеет устанавливать видеорежим и начальный видеорежим устанавливается загрузчиком через VESA/EFI GOP.

В Windows значительная часть видеодрайверов работает в пользовательском режиме и может быть прозрачно перезапущена с сохранением открытых окон. Из новых открытых систем в Fushia видеоподсистема работает в пространстве пользователя и реализовано аппаратное ускорение для некоторых видеокарт. В Линуксе самый устаревший и монолитный подход.

★★★★★

Набрасываешь?

Потом зачем-то выдумали DRM-KMS

Вангую, это чтобы больше игры не тормозили.

Шутка.

Korchevatel ★★★★★
()

В Windows значительная часть видеодрайверов работает в пользовательском режиме

Поэтому всё зависает и падает в BSOD

zgen ★★★★★
()
Ответ на: Набрасываешь? от Korchevatel

Набрасываешь?

Да просто хочу сделать аппаратное видеоускорение в Haiku. Драйвера Vulkan пользовательского режима собираются и запускаются (но не видят видеокарты так что толку мало) без особых проблем, а что делать с ядерным драйвером пока не знаю. Возникает стойкое желание взять и переписать чтобы работало по крайней мере на моём железе. Портировать драйвера X.Org старой архитектуры было бы намного проще.

X512 ★★★★★
() автор топика
Ответ на: комментарий от X512

Возникает стойкое желание взять и переписать чтобы работало по крайней мере на моём железе.

Так в чём дело? Дерзай!

Зная тебя, могу утверждать, что у тебя может даже получиться.

Korchevatel ★★★★★
()

По ходу пора выпиливать x11 из избранного 😔

Stil ★★★★★
()
Ответ на: комментарий от X512

Портировать драйвера X.Org старой архитектуры было бы намного проще.

Учитывать стоимость портирования на маргинальные платформы – это к Столлману, а не Линусу.

Stil ★★★★★
()

Зачем так надо было делать

чтобы был универсальный API в юзерспейс а не куча костылей и подпорок у каждого производителя

вставлять палки в колёса другим ОС?

не вижу логики в твоих словах

в Fushia видеоподсистема работает в пространстве пользователя

у фуксии микроядро

spbob
()
Ответ на: комментарий от spbob

чтобы был универсальный API в юзерспейс

У X.Org разве не универсальный API драйверов (DDX и т.п.)?

не вижу логики в твоих словах

Драйвер пользовательского режима намного легче портировать, чем драйвер ядра. Перенесли драйвер в ядро – затруднили портирование на другие ОС.

X512 ★★★★★
() автор топика
Ответ на: комментарий от X512

О, оно ещё живо

На HURD кстати как дела с видеодрайверами?

Понятия не имею, меня линупс устраивает.

Stil ★★★★★
()

Drmkms это и есть маленький драйвер в ядре. Просто кроме управления памятью он умеет ещё переключать видеорежим. Все ускорение в юзерспейсных libdrm драйверах и в юзерспейсной мезе.

iliyap ★★★★★
()

Вначале же было хорошо сделано с DDX драйверами и установкой видеорежима в X.Org

Нет, это было очень плохо и очень больно, особенно DDX. Intel вообще на него забила, например.

Зачем так надо было делать и вставлять палки в колёса другим ОС?

Наверное потому что разработчики ими не пользуются? Зачем им заботиться о других если они пишут под Linux?

В Haiku например

Опять пиар этой.....ОС? Любой повод найдёшь чтобы её впихнуть.

Fushia видеоподсистема работает в пространстве пользователя

Там микроядро, иначе просто быть не может.

В Линуксе самый устаревший и монолитный подход.

И он работает

Sunderland93 ★★★★★
()
Ответ на: комментарий от X512

У X.Org разве не универсальный API драйверов (DDX и т.п.)?

ты видел андроид на иксорге ? а с DRM он работает и это сейчас дефолт

Перенесли драйвер в ядро – затруднили портирование на другие ОС.

портируй DRM и все драйверы заработают

spbob
()

С точки зрения пользователя, который умеет нажимать make на клавиатуре, разница между модульным и монолитным ядром исчезает. Ну вот улетел у тебя драйвер в сегфолт, а ось работает: и что? Ютубчик всё равно не посмотришь.

luke ★★★★★
()

Вот и разработчики других систем в своё время не поняли, зачем это Intel пропихивает свой KMS в ядро Linux. Ведь Intel никакого отношения к играм и 3D-акселерации не имела.

Когда дело было сделано, разработчикам сторонних ОС была поставлена чёрная метка: либо они реализуют линуксовый KMS у себя в ядре, либо сваливают из сообщества свободных разработчиков X.Org.

Тут и AMD подкатила со своим программным компилятором шейдеров на CPU посредством LLVM. И потихоньку тихой сапой Mesa DRI уже не смог обойтись без этого фреймворка.

Я помню те времена, когда xorg-minimal занимал около 35 МБ и было всего шесть или семь больших пакетов для базовой графики. Никаких LLVM/Clang в системе не требовалось вообще - всё собиралось GCC. xf86-video-ati поддерживал нормальное 2D-ускорение, достаточное для воспроизведения FullHD-видео на полном экране с обычной частотой кадров. 3D-ускорение OpenGL на AMD-видеокартах было по большей части программным.

Nvidia надолго отстранилась от этого вертепа и продолжала выпускать видеодрайвер в архитектуре DDX.

iZEN ★★★★★
()
Последнее исправление: iZEN (всего исправлений: 1)
Ответ на: комментарий от luke

улетел у тебя драйвер в сегфолт

А если не улелетел, а просто обновить? Винда умеет обновить драйвер видеокарты так, чтобы окошки остались открытыми, только на пару секунд экран моргает. А в GNU/Linux как так сделать?

ls-h ★★★★★
()
Ответ на: комментарий от luke

Ну вот улетел у тебя драйвер в сегфолт, а ось работает: и что?

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

X512 ★★★★★
() автор топика
Ответ на: комментарий от ls-h

И как часто такое надо? Новое ядро раз в неделю можно и руками обновить.

Ну или когда-нибудь научатся всё ядро менять на лету…

luke ★★★★★
()

А в HAIKU там вообще сейчас что? Есть хоть какое 2D/3D ускорение или только просто VESA? Давно её пробовал и с этим вопросом тогда не разобрался.

ls-h ★★★★★
()
Ответ на: комментарий от X512

Ну круто, Танненбаум такое на embedded world в каком-то 13 году показывал, только вот никто не впечатлился почему-то.

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

luke ★★★★★
()
Ответ на: комментарий от ls-h

Есть modesetting драйвера, на некоторых есть аппаратное 2D ускорение и курсор. Аппаратное 2D ускорение практически не используется потому что по замерам на современном железе оно работает медленнее, чем всё рисовать на процессоре. Часть 2D ускорения можно задействовать для борьбы с тирингом что я планирую сделать в ближайшее время.

3D ускорения пока нет. Есть программный рендеринг OpenGL и Vulkan (пока экспериментальный). Собраны драйвера аппаратного ускорения Vulkan пользовательского режима, но они не видят видеокарты без ядерной части DRM.

X512 ★★★★★
() автор топика
Последнее исправление: X512 (всего исправлений: 1)
Ответ на: комментарий от X512

DDX это не API. Просто одна часть кода сервера называется DIX (device independent x), а другая называется DDX (device dependent x). API между ними множество наросло за годы развития: DGA, XAA, EXA, UXA, SNA. И эти API не универсальны. А ещё они все про 2D-акселерацию, а не про 3D.

iliyap ★★★★★
()
Ответ на: комментарий от Exmor_RS

Ну дык ТС противопоставляет плохое в линуксе хорошему в винде, говоря что стабильность страдает, а на деле никаких отличий в стабильности нет - что там что там всё валится к чертям собачьим

zgen ★★★★★
()
Ответ на: комментарий от luke

И как часто такое надо?

Согласен, что не каждый день. Но удобно же! Кстати, у меня есть смутное подозрение, что именно поэтому можно подключаться к текущей локальной сессии через RDP, там как раз происходит смена драйвера настоящей карты на некий специальный (забыл название).

ls-h ★★★★★
()
Ответ на: комментарий от zgen

Я в Windows не раз наблюдал перезапуск видеодрайверов. Почему-то VLC любит валить видеодрайверы. В Линуксе видимо будет kernel panic.

X512 ★★★★★
() автор топика
Ответ на: комментарий от X512

Так вот кто главный вредитель.

всё они правильно сделали - дискретные видеокарты отсыхают, а для SoC dma-buf то что доктор прописал. Странно что ты занимаешься RISC-V где концепция куча ускорителей под задачи заложена изначально и не понимаешь этого, у Linux в ядре реализована поддержка zero copy для SoC

https://01.org/linuxgraphics/gfx-docs/drm/driver-api/dma-buf.html

spbob
()
Ответ на: комментарий от X512

Так зрелый продукт решающий реальные задачи. И спектр поддерживаемого оборудования широк. И разные виды видеопамяти (шареная между CPU и GPU, выделенная GPU с memory mapped io, выделенная GPU с DMA).

iliyap ★★★★★
()
Ответ на: комментарий от iliyap

Рисование в X.Org и xrandr как-то умеют обращаться ко всем доступным драйверам, значит слой абстракции имеется. Сейчас там везде Glamor и обёртка над DRM.

X512 ★★★★★
() автор топика
Последнее исправление: X512 (всего исправлений: 2)
Ответ на: комментарий от Sunderland93

И до него слой абстракции был, правда специфичный для X.Org. libdrm – это по сути обёртка над ioctl драйверов ядра, а драйвера DDX сами всё делали.

X512 ★★★★★
() автор топика
Последнее исправление: X512 (всего исправлений: 1)
Ответ на: комментарий от X512

Так DDX из сервера никуда не делся. Вот драйверы nvidia. Можно загрузить ядерный модуль nvidia-drm.ko, реализующий drm-kms. Но использовать при этом в сервере DDX драйвер modesetting_drv.so не получится – не заработает. Заработает только с DDX драйвером nvidia_drv.so.

iliyap ★★★★★
()
Ответ на: комментарий от X512

DDX сейчас есть один универсальный - xf86-video-modesetting. Ну универсальный естественно для открытых дров. Nvidia в пролёте.

Sunderland93 ★★★★★
()
Ответ на: комментарий от LikeABoss

Я такое только в Fedora наблюдал, она вообще крайне капризная в плане блоба нвидии. В остальных он просто пересобирался через dkms, но если поддержки нового ядра нет - ниче не поделаешь.

Sunderland93 ★★★★★
()
Последнее исправление: Sunderland93 (всего исправлений: 1)

Haiku

Напомните, зачем оно нужно и почему кому-то на это не насрать? Оригинальная BeOS умерла где-то в 90х, ничего особо не получив при жизни. Зачем это нужно в 2021?

LikeABoss
()
Ответ на: комментарий от X512

Можно не загружать. Тогда не будут работать drmfb, plymouth, wayland-композиторы, kmscon, и т.п. программы, использующие drm api.

iliyap ★★★★★
()

потому что линукс теперь это корпорации для корпораций )

nerfur ★★★
()

в *BSD/Solaris и др. приходится проводить много работы чтобы портировать этот код на своё ядро.

Зачем так надо было делать и вставлять палки в колёса другим ОС?

Пермиссивщикам не достаточно удобно воровать гнутый софт? Иронично.

moonmadness
()
Ответ на: комментарий от ls-h

А в GNU/Linux как так сделать?

С user-space так можно. с kernel-space сложнее.

У меня на AMD стоят AMDGPU, AMDGPU-PRO OpenGL (для давинчи), AMDGPU-PRO OpenCL, RADV, AMDVLK. Переключаются без черного экрана, но с перезапуском приложений, потому что они не знают, что там за библиотеки им подсунули и в рантайме их не меняют, даже при изменении библиотек на диске.

Есть еще карточка от NVIDIA, преимущественно для виртуалки. Т.к. через нее графика не выводится на прямую, то kernel-space драйвер тоже переключается без черного экрана, а user-space драйвер задействуется через PRIME. Так же как с драйверами AMD.

P.S. Через PRIME на NVIDIA используется проприетарный драйвер, можно и nouveau прикрутить, но тогда придется самому указывать какой драйвер использовать в kernel-space, а так он сам переключается на VFIO и обратно при запуске виртуалки

SR_team ★★★★★
()
Последнее исправление: SR_team (всего исправлений: 3)
Ответ на: комментарий от moonmadness

Гнутый софт теперь проприетарщина и пользоваться его кодом нельзя? А они ещё что-то про свободу говорят… На деле vendor lock на Линукс получается.

X512 ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.