X11 - Экспедирование и эффективность

12

У меня есть графически интенсивное приложение, которое нужно пересылать через X11. Я потратил некоторое время на изучение X11 и его (в) эффективности, включая этот замечательный пост: почему пересылка X11 так неэффективна? ,

Одна вещь, которая мне до сих пор не ясна, зависит от того, зависит ли производительность пересылки X11 от приложения. У меня сложилось впечатление, что весь экран пересылается, независимо от того, что происходит. Тогда пересылка X11 должна быть независимой от приложения.

Итак, есть ли конкретная информация о том, что на самом деле передается и зависит ли производительность ssh -X от приложения?

клык
источник
2
«Итак, есть ли конкретная информация о том, что на самом деле передается и зависит ли производительность ssh -X от приложения?» Да. Для начала посмотрите выступление Даниэля Стоуна « Настоящая история позади Уэйленда и Х» из LinuxConf.au 2013.
sampablokuper
1
«У меня сложилось впечатление, что весь экран пересылается». Трудно понять, что могло бы создать у вас такое впечатление, потому что люди обычно делают с пересылкой SSH X ручное выполнение отдельных приложений на удаленной оболочке; не могли бы вы уточнить, как вы запускаете приложения?
Ракслице
1
Если вы переносите сеанс X по туннелю SSH, обратите внимание: ssh может выполнять сжатие. Это -Cопция в командной строке или Compression: yesопция в файле .ssh / config. Если вы выполняете традиционную переадресацию X из Далласа в Австралию по перегруженному каналу T1, это может быть разницей между тем, что ваша задача состоит в том, чтобы вывести диалог на пять уровней глубоко в интерфейсе и установить флажок из нереалистичной задачи в просто чрезвычайно расстраивает два часа. К счастью, у меня не было необходимости пробовать это с Уэйлендом, но я предполагаю, что это значительно улучшилось.
Эд Гримм
Я не хочу начинать обширную дискуссию в комментариях, тем более что @grawity очень хорошо ответил на мой вопрос. Под «целым экраном» я подразумевал, что данные, передаваемые по туннелю ssh, всегда будут простым описанием пикселей на экране. @ EdGrimm: Спасибо за ваш комментарий о сжатии. Я знаю об этом. В нашем конкретном сценарии X11 пересылается по 10-гигабитному каналу LAN, и сжатие / отсутствие сжатия, по-видимому, не имеет никакого значения.
Клык

Ответы:

29

У меня сложилось впечатление, что весь экран пересылается, независимо от того, что происходит. Тогда пересылка X11 должна быть независимой от приложения.

Нет, на самом деле все наоборот. Пересылка X11 называется «пересылка X11», потому что она транспортирует фактические сообщения X-протокола, используемые приложениями для визуализации своих окон на «X-сервере» (обычно Xorg). Эти сообщения являются командами для создания / перемещения окон, рисования текста и графических примитивов (линий / прямоугольников), рисования растровых изображений и т. Д.

Можно сказать, что это концептуально противоположно протоколам «полноэкранного изображения», таким как VNC / RFB. Я думаю, что это несколько сравнимо с RDP Windows, который также был сделан для передачи команд рисования GDI.

Итак, причины, по которым вы видите различия между программами:

  1. Чтобы процитировать пост, на который вы ссылались, изначально большинство программ на основе X работали так:

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

    Поэтому, когда программа хотела показать кнопку, она просто отправляла несколько коротких команд - «нарисовать прямоугольник», «нарисовать текст» и, возможно, несколько линий, чтобы она выглядела в 3D.

  2. Со временем это изменилось, программы начали выполнять рендеринг самостоятельно, и многие из этих инструкций стали просто «вот растровое изображение, которое я уже отрисовал, поместите это на экран» - очень быстро локально, но очень медленно по сети из-за отсутствия в X11 какого-либо сжатие изображения.

    Это означает, что программы, созданные с использованием современных наборов инструментов, работают намного медленнее по сравнению с сетевым X11, даже если это что-то такое же простое, как сглаженные шрифты.

    (Напротив, RDP адаптировался с течением времени и включает различные формы сжатия изображений, такие как JPEG и даже H.264; вы часто можете заметить артефакты сжатия во время загрузки полного изображения.)

  3. К счастью, большинство инструментариев пользовательского интерфейса, таких как GTK, реализуют отслеживание повреждений, поэтому пересылаются только обновленные регионы. Однако некоторые программы (например, несколько версий Firefox / Thunderbird) не поддерживают это и требуют полного повторного рендеринга всего окна, даже если оно действительно не обновлено.

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

user1686
источник
1
Я помню, как однажды пытался настроить сервер MythTV. Утилита «setup» была приложением Qt, и для отображения каждой страницы конфигурации потребовалось несколько минут, несмотря на разумную ADSL-ссылку в качестве узкого места (почти 8 Мбит / с). Несколько минут работы заняло несколько часов из-за этого - было бы намного проще с пользовательским интерфейсом Curses или даже с приложением X11 с хорошим поведением. Если бы я знал, сколько будет проблем, я бы подождал неделю или две, пока не оказался на месте, и использовал бы один из бездисковых интерфейсных окон для отображения. Я хотел, чтобы сервер работал и работал раньше, чем это.
Тоби Спейт
1
В защиту этих «программ с ошибками» следует указать, что это вина идеологии инструментария X +, которая в основном делает необходимым, чтобы эти программы с ошибками были в первую очередь глючными. Можно подумать, что программа может просто вызвать API (который отправляет команду), чтобы иметь «нормально выглядящее окно», меню и кнопку здесь и полосу прокрутки, но нет. Вы или инструментарий должны делать все вручную. Я на самом деле не большой поклонник MS и тем более Apple, но они все правильно поняли, в то время как экосистема X сосала десятилетиями и до сих пор сосет.
Деймон
Я не уверен, есть ли какая-либо разница, хотя. Что делает Windows UWP, WinForms или comctl32 менее «набором инструментов», чем GTK и QT? Разве они также не делают все "вручную"?
user1686