LINUX.ORG.RU

XDC: доклад о XMir и XWayland

 , ,


1

7

С 23 по 25 сентября проводилась очередная X Developers Conference, XDC2013. На ней было несколько докладов, полезных для широкой публики — и одним из них был доклад о XMir и XWayland. Автор — Chris Halse Rogers из компании Canonical, ранее занимавшийся сопровождением X-сервера в убунту и теперь привлечённый к разработке Mir и XMir. Здесь будет изложен краткий конспект этого доклада, взятый из PDF-слайдов и видеозаписи.

Прежде чем рассказывать про вложенные X-серверы внутри Mir и Wayland, следует рассказать о Mir — ведь на данный момент немногие подробно изучили его кодовую базу. Mir — это

  • Библиотека для создания сущностей, выполняющих задачи дисплейного сервера, композитора окон и оболочки рабочего стола
  • Библиотека для взаимодействия с созданными сущностями со стороны прикладного ПО
  • И примерно 90 тысяч LoC (осмысленных строк кода) на C++, включая заголовки и тесты. Тесты составляют половину общего числа LoC.

Дизайн Mir имеет отличия от дизайна Wayland

  • Это библиотечный API, а не межпроцессный протокол или механизм
  • Буферы цвета для окон создаются на стороне сервера (прим. — в трёхмерной графике есть множество других буферов, хрянящих не цветовые значения пикселей — потому и возникло понятие color buffers). Приложение получает буфер цвета на время рисования кадра и затем отдаёт его обратно в обмен на другой буфер, а владеет этими буферами сам Mir.

Цели, к которым идёт Mir, также отличаются. Wayland стремится быть полезным для всех, например, над ним активно работают разработчики Tizen и сообщество вокруг Rasberry Pi. В то же время Mir создан для достижения задач Canonical — но, как надеются его разработчики, может пригодиться и для решения более общих задач. Mir нацелен на улучшение работы Unity.

После этой части доклада Крису задали несколько вопросов, в том числе — о буферах цвета на стороне сервера. Wayland может сам владеть буферами и выдавать их приложениям по запросу, а может использовать буферы, переданные клиентом — в чём тогда различие между Wayland и Mir в управлении буферами цвета? Дело в том, что Rasberry Pi и все мобильные операционные системы стремятся передать владение буферами дисплейному серверу, потому что это позволяет забирать буферы у неактивных (suspended) приложений и тем самым получать серьёзную экономию памяти. Однако mesa оперирует только клиентскими буферами, и поэтому на десктопном компьютере не получится просто так получить буфер, которым владеет дисплейный сервер. Кроме того, разработчики тулкитов и приложений по сути могут сделать выбор так, как им захочется, ограничившись только одним из двух режимов работы wayland. (прим. — Крис вроде бы упоминал о способе обойти это с помощью «wayland shared buffer extension», но я не понял, о чём именно идёт речь).

Как XMir, так и XWayland запускают вложенный X-сервер, используя механизм расширений Xfree86. Через этот механизм обеспечивается вывод графики средствами Mir и Wayland, передача событий ввода X-серверу, drag&drop, управление окнами и остальные вещи, нужные для полноценной работы иксов. Когда Mir и Wayland встраиваются во вложенный X-сервер, они диктуют ему следующее:

  • Пожалуйста, не трогай реальный дисплей
  • Возьми буферы цвета
  • Дай нам реализовать RANDR самим
  • И несколько более сложным образом реализуется работа GLX

Есть различия в организации передачи изображения на реальный дисплей. Wayland для каждого окна использующего X приложения запускает отдельный вложенный X-сервер, и благодаря этому основанный на Wayland композитор захватывает буфер цвета окна (которым владеет X). Mir сам владеет всеми буферами цвета и к тому же всегда использует как минимум двойную буферизацию (т.е. для передачи изображения на дисплей обязательно придётся делать операцию swap buffers), поэтому он не может использовать аналогичный подход: ведь иксовые приложения, не использующие XGL, имеют один буфер и на каждом кадре просто рисуют нечто новое поверх старого. Поэтому Mir имеет два дополнительных буфера, эмулирующих двойную буферизацию — и на каждом кадре он отслеживает изменения, которые были сделаны в единственном буфере X-сервера, и копирует изменённые области в свой активный буфер; затем он делает swapBuffers.

Как показывают тесты Phoronix, подход Mir не приводит к существенному падению или увеличению производительности. Если рассматривать мелкие различия, то XMir работает чуть быстрее стандартного X-сервера на обычном многооконном десктопе в сочетании с композитным менеджером окна, и чуть медленнее — в полноэкранных играх. Замедление в полноэкранных играх, в свою очередь, можно исправить — ведь сам по себе XGL использует двойную буферизацию, как и Mir, и не нуждается в отслеживании и копировании изменённых областей. Единственным исключением из этих правил является KDE, работа которого чуть замедляется как на многооконном десктопе, так и в полноэкранных играх — дело в том, что оконный менеджер kwin сам по себе отслеживает изменённые области экрана и копирует только их; этот механизм используется в нём уже несколько лет. Это также объясняет, почему разработчики Kubuntu не хотят использовать XMir в Ubuntu 13.10 и 14.04.

Несмотря на различия в XWayland и XMir, часть кода может быть переиспользована в обоих проектах:

  • Для вложенного X-сервера с системой ускорения GLAMOR иксовый видеодрайвер может быть написан один раз и использоваться в обоих проектах, и такой драйвер уже написан в рамках Wayland.
  • Прокси для оконного менеджера (это не очень-то нужно для XWayland, который держит отдельный X-сервер для каждого окна, но полезно для XMir)
  • И, возможно, libxcwm — библиотеку, позволяющую запускать иксовые приложения на системах, где вообще нет X-сервера, таких как Mac OS X, Windows, Wayland и Mir. Подробнее...

Иксовый драйвер ввода не получится переиспользовать, потому что модели обработки ввода в Mir и Wayland сильно различаются между собой.

После этого опять был перерыв на вопросы, и выяснилось, что подход XWayland (отдельный сервер на каждое окно) не только позволяет убрать прокси для оконного менеджера, но и делает управление окнами гораздо более простой задачей: поскольку каждое окно для Wayland представляет собой отдельный буфер, то композитор (он же оконный менеджер, в терминологии Wayland) может легко трансформировать окна по отдельности, и попытка сделать эффект волшебной лампы для сворачивающегося окна не приведёт к труднейшей задаче разделения окон, рисующих в один буфер одного X-сервера. С другой стороны, некоторые приложения начинают работать неправильно, если конфигурация предоставленного им X-сервера не соответствует реальной конфигурации мониторов, или если они не могут изменять конфигурацию мониторов, такую как разрешение экрана; в XMir такие приложения будут работать корректно.

>>> PDF-слайды доклада

★★★★

Проверено: Shaman007 ()
Последнее исправление: quiet_readonly (всего исправлений: 5)
Ответ на: комментарий от tailgunner

>>>> wayland - для достижения задач редхата

>>> Wayland это проект инициированный Intel, а Red Hat подключился к нему гораздо позже. Причем с целью иметь возможность нагадить Ubuntu ... У Red Hat нет задач для которых нужны Wayland, Gnome 3, Systemd и т.д

>> Казалось бы, при чём тут Intel...

> Про Гном3 слышал? Вот при этом Redhat.

Он же спросил причём тут Intel!

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

>> Еще раз: иксы устаревшая, ненужная и только мешающая нормальному развитию графической подсистемы сущность. Чем раньше их закопают, тем раньше мы получим нормальную графику и нормальную подсистему ввода.

> Это ты сам придумал, или кто подсказал?

Иксы - кривые и глючные, устаревшие на 20 лет и работающие через ненужную сетевую прозрачность, подпёртую со всех сторон костылями! Тиринг, фризы при ресайзе окнон, тормозное перемещение окон... Давайте переведём Linux на Mir вместо X11, и тогда точно наступит вендекапец!

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

X11 запускаем в фреймбуфере и усё.

да никакого усе.

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

Прошли те времена. Кончились гуглы и эпплы, чтобы миллиарды в разработку всего вкладывать. Нынче во встраиваемой технике минимум два ядра и универсальная ОС.

Было. И фреймбуфер, кстати, в них использовали. Причём с Qt. У меня даже такое устройство было. И много у кого ещё.

А у меня было с иксами и fltk. И что? Вопрос в количестве этих устройств и их цене.

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

Он модульный. В чём проблема отключить лишнее?

Все равно монстрик.

Зачем этот GLES на десктопе нужен, когда есть полноценный OpenGL. GLES вообще сделали только потому, что в те же армы хотелось что-то попроще запихать, чем полноценный 3D-ускоритель для OpenGL.

Для армов и нужен. чтоы десктоп жрал 6 ватт и летал красиво.

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

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

это кстате пошло бы на пользу и Mir тоже :-) ..

маркетологи из Canonical смогли бы заявить: «адаптируйте свои програмные GUI-каркасы для Mir и вы сразу убъёте двух зайцев! оно сможет работать и в Wayland»

(правда это заявляение не прокатит в случае когда все программные каркасы УЖЕ будут адаптированы для Wayland :))

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

типичная аргументация закапывателей. знаний у них просто нуль, зато шумят так, что уши закладывает.

но вообще, есть такое психическое расстройство — неофилия. очевидно, что везти дискуссию с психами бесполезно.

anonymous
()

Wayland для каждого окна использующего X приложения запускает отдельный вложенный X-сервер

Переведите для неграмотных. Это что получается будет форкаться по одному процессу на каждый запущеный gcalctool? Или речь только о том, что будет создаваться отдельный буфер в недрах вяленого?

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

Так XI2 еще и не Стоун разрабатывал? O_o

Стоун поддерживал XInput и XKB. Спецификация XKB, конечно, не подарок. Адовейшая. Без литрухи не поймешь. Реализация, полагаю, еще адовее. Если я правильно помню, это и было фабулой телеги Стоуна. Типа, лучше бы я этого не видел. :)

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

Вяленый это протокол, а не его реализация. Нет вроде никакого libwayland. Есть weston - эталонная реализация части протокола, правда не планируемая к реальной жизни. Скоро kwin станет ещё одной реализацией. Потом глядишь ещё кто-нибудь.

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

Плохо то, что что-то другое тоже должно быть юнитиклоном или страдать. Как обычно бывает.

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

Ну он никак не автор XI2. Он может быть соавтором *документа* + какие-то патчи. У тебя спецификация из 7.7, а вот спецификация 7.6:

http://www.x.org/releases/X11R7.6/doc/inputproto/XI2proto.txt

Как видно, никакого Daniel Stone нет. И не было вовсе до этого момента.

Zubok ★★★★★
()
Ответ на: комментарий от no-dashi

Угу. Вместо того, чтобы сделать rootles X-сервер. Круто, чо. Примерно настолько же разумно, насколько разумно пришивать рубашку к пиджаку.

с одной стороны да, но с другой, это решение гармонирует с вопросами безопасности и разделением управления. Плюс рутлес иксы глючные, как я ни за знаю что.

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

Потом глядишь ещё кто-нибудь.

как кто? известно кто — gnome-shell :)

user_id_68054 ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

Что ещё видишь ты в своём хрустальном шаре?

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

А в Mac OS X разве нативные приложения не целиком через OpenGL рисуются?

Нет.

QuartzGL не особо доработан, и, судя по всему, не особо нужен.

Я пробовал включать его (там в девелоперских тулзенях особая галка есть) — артефактило страшно. И тормозило.

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

Так ты же сам диагноз там написал, лол.

Зачитай его, а то у меня показ аватар отключен.

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

XWayland (в отличии от XMir) — запускает для каждого окна — свой собственный X-сервер

Это просто жестокая жесть. Это как запускать несколько джава приложений, для каждой поднимается своя тяжелая JVM.

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

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

no-dashi ★★★★★
()
Ответ на: комментарий от AP

Осталось выяснить - у нас ничто ещё «Май» не называется? ;-)

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

И протокола, и либы, и эталонной реализации композитора

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

А gtk+ пилилась для достижения задач gimp. Ну и что?

И ничего. Не вижу никакой связи. GIMP что, работает на одном дистрибутиве как unity? Нет, он работает на всех. Тогда при чём тут вообще GIMP?

mbivanyuk ★★★★★
()

Тут все понимают, что срач о временных костылях к мирландам? А то читая тред у меня появились сомнения, что все это осознают.

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

Любая программа на 99% пишется для удовлетворения запросов разработчика

Да? Ну применительно к Canonical наверное так и есть. Кроме них их Mir никому и не нужен. А вообще программы пишутся для удовлетворения запросов пользователей.

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

Это просто жестокая жесть. Это как запускать несколько джава приложений, для каждой поднимается своя тяжелая JVM.

хуже того...

это как если бы каждый раз каждый человек мыл бы руки перед едой..

представляете что было бы, если бы было бы вот так? какой вой бы поднялся бы?

«что? опять идти мыть руки?! и опять открывать\закрывать кран? снова?!»

...а как часто бы ломалась бы сантехника, от всех этих действий над ней....

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

Да? Ну применительно к Canonical наверное так и есть. Кроме них их Mir никому и не нужен. А вообще программы пишутся для удовлетворения запросов пользователей.

Ну если только это одни и теже люди...

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

«что? опять идти мыть руки?! и опять открывать\закрывать кран? снова?!»

Представь что к тебе пришла в гости толпа в 100 человек, и вместо того чтобы всех пустить и один раз открыть/закрыть дверь ты перед каждым ее закрываешь.

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

> «что? опять идти мыть руки?! и опять открывать\закрывать кран? снова?!»

Представь что к тебе пришла в гости толпа в 100 человек, и вместо того чтобы всех пустить и один раз открыть/закрыть дверь ты перед каждым ее закрываешь.

ды я даже ещё больше могу привести примеров! :)

представь что ты работаешь кондуктором троллейбуса [без турникетов], и вместо того чтобы обилетить сразу всех вошедших пассажиров (одним большом билетом) — ты подходишь к каждому и производишь над каждым индивидуально сделку {деньги}=>{билет+сдача}...

...при этом наверняка ещё пришлось бы кричать какую-нибудь фразу, типа — «кто тут у нас ещё не обилечен? передаём за проезд!».. ну или что-то такое :)

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

Когда HL3 выйдет только под Wayland, все битвы «Wayland vs Mir» прекратятся сами собой, ке-ке-ке ;)

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

представь что ты работаешь кодуктором троллейбуса и вместе с тобой в том же троллейбусе работает ещё пара десятков кондукторов, по одному на каждого пасажира

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

Когда HL3 выйдет, ке-ке-ке

убрал лишнее

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

представь что ты работаешь кодуктором троллейбуса и вместе с тобой в том же троллейбусе работает ещё пара десятков кондукторов, по одному на каждого пасажира

чёрт.. а это кстате чертовски отличная идея!

можно всех обилетить за один кондукторский такт! :) :) :D

[шучу, шучу.. на самом деле — да, я таки-понял всю абсурдность:)]

# UPDATED:

кстате — чтобы реализовать эту идею — кондукторы должны динамически появляться и исчезать [в зависимости от того сколько народу вошло на очередной остановке].. может быть в троллейбусе должна быть ,например, скрытая тайная комната.. когда излишние кондукторы не нужны они заходят в «тайную комнату» и там погружаются в крио-сон (находящиеся в состояния крио-сна кондукторы — хранятся в капсулах, которые можно более экономно разместить рядом друг с другом)... :)

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

Когда HL3 выйдет только под Mir, все битвы «Wayland vs Mir» прекратятся сами собой, ке-ке-ке ;)

Вот так должно быть.

Какой мб HL3 под Wayland если Steam OS основана на Ubuntu, а значит к релизу Ubuntu 16.04 перейдет на Mir + клиент Steam официально поддерживает лишь Ubuntu, а она перейдет на Mir уже в 14.10.

p.s: теперь Я БУДУ ВАС ШОКИРОВАТЬ - Valve давно узнала про Mir ибо оный начали делать чуть-чуть раньше релиза Steam for Linux. В тоже время Valve приглашали людей из Canonical для обсуждений. Не могли Valve не узнать про Mir, а значит изначально готовы на него перейти в 16.04 LTS.

anonymous
()

Уважаемые, объясните, все - теперь каждое приложение будет само растеризовать шрифты, создавать картинки, кисти, перья и все такое? Прощай, аппаратное ускорение, и да здравствует большой расход памяти и процессорного времени?

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

если сами — то ведь это не обозначает что обязательно именно без апаратного ускорения?

наоборот! теперь каждая программа сможет реализовать своё самое-самое «хитрое» аппаратное ускорение :)

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

Какое-такое «свое»? Ускорение только за счет железа видекарты. Вообще, эти новомодные протоколы предполагают сообщать приложениям аппаратные возможности железа. И да, получается, перерасход памяти и ресурсов процессора в этих протоколах by design.

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

Уважаемые, объясните, все - теперь каждое приложение будет само растеризовать шрифты, создавать картинки, кисти, перья и все такое?

Это уже давно так.

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

Как будто что-то хорошее... И, да, у меня разрыв шаблона. Меня учили всегда разделять владельца ресурса и пользователя ресурса.

Так трудно поправить рисовалку X'ов, добавить полилайны, кривые Безье и пути?

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