Терминальные клиенты для запуска графических приложений
Задача
Запуск приложений, активно использующих двумерные и трёхмерные графические функции, на удаленном компьютере (сервере) с просмотром на локальном (клиенте).
Преимущества
- Унификация ПО
- Упрощённое администрирование клиентских компьютеров
Недостатки
- Сложность доступа к внешним устройствам клиентского компьютера
- Падение производительности
- Зависимость от качества сети
- Более сложный принцип масштабирования
Варианты решения
- «Публикация приложений»: базовая установка ОС на клиент + запуск специфических приложений на сервере
+: «прозрачный» запуск
+: меньшая нагрузка на сервер
+/-: разнообразие клиентских ОС и профилей
--: необходимость синхронизации локального и удалённого файловых пространств
«Удалённый рабочий стол»: специфическая минимальная установка ОС на клиент (т. н. прошивка) + запуск всех приложений на сервере с доступом по терминальному протоколу
+: возможность отключения и подключения сеанса, в т. ч. при смене рабочего места
-: необходимость доступа к локальным внешним устройствам
-: большая загрузка сервера
- «Удалённая виртуальная машина»: прошивка на клиенте + запуск на сервере персонального виртуального окружения с полной клиентской ОС
+: установка индивидуальной ОС в каждое виртуальное окружение
-: необходимость доступа к локальным внешним устройствам
-: ещё большая загрузка сервера
-: потеря производительность за счёт виртуализации
Подзадачи
- 2D-рендеринг
- 3D-рендеринг
- Рендеринг потокового видео
- Доставка изображения
Сопутствующие подзадачи:
- Подготовка, модификация и доставка прошивки.
Учёт аппаратных ресурсов
- Загрузка сервера и клиента
- Производительность рендеринга
- Пропускная способность сети
Ссылки
http://www.virtualgl.org/ — рендеринг 3D на сервере
- Пересылка с помощью LD_PRELOAD вызовов OpenGL на местный X-сервер
- Пересылка экзотических GL-запросов напрямую (например, в виде indirect-запросов)
- Собственный транспорт при работе с X11 протоколом
- Возможность 2D-рендеринга как на клиенте (X11+VGL), так и на сервере (VNC)
- Встроенные средства измерения производительности
- Возможность расширения с помощью plugin-ов
http://www.cendio.com/products/thinlinc/ — какие-то люди, фарцующие жёлтыми штанамитерминальными клиентами под Linux, спасибо им за предыдущую ссылку
- Несвободная лицензия на продукт в целом
- На диске с демо-сервером есть некоторые исходники; в частности, VNC server, RDP server и SSH пересобраны с какими-то патчами, есть и свои свободные наработки
- В целом создаётся впечатление, что значимо убыстрить графику по сравнению с аналогичным полностью свободным программным наполнением им не удаётся
Поддержка 3D в VirtualBox под Linux пока не до конца работает, см., например, https://forums.virtualbox.org/viewtopic.php?f=4&p=100671
3D-рендеринг
Если исключить вопросы прямой производительности и пропускной способности, главная задача — обеспечить производительный 3D-рендеринг, т. к. 2D не потребляет слишком много ресурсов, и может быть просчитан на процессоре как клиента, так и сервера.
3D-рендеринг на клиенте
- Строго говоря, поддерживается при использовании «голого» X11 протоколом OpenGL с помощью indirect-запросов (LIBGL_ALWAYS_INDIRECT и т. п.)
Имеются проблемы с 2D (возможно, обработкой 2D с помощью GL из-за доставки толстого 2D-потока), померять
VMWare заявляют, что задача ими как-то решена (скорее всего, закрытые драйверы и клиентские программы для некоторых ОС)
- Что-то подобное есть в Windows, только они этим совсем не хвастаются; похоже, не работает
3D-рендеринг на сервере
- !VirtualGL
???
Распознавание и обработка потокового видео
Если часть довольно большой картинки постоянно меняется, возникает проблема доставки потока.
TODO: исследовать возможности распознавания и/или декларации таких областей (NX? VNC?), отказа от декодирования видео на сервере (с передачей кодированного потока на клиент) и т. п.
Стенд
- «Публикация приложений»: virtualgl → X11+VGL
+ «Прозрачная» отсылка к 3D-рендерингу на сервере, не требуется адаптация приложений
- Большое потребление сетевых ресурсов (по утверждению авторов, >100Mb/s, померять)
-- Использование одного X-сервера всеми приложениями (разных пользователей!) — издевательство над безопасностью
- SETUID и SETGID игнорируют LD_PRELOAD, приходится извращаться
- «Удалённый рабочий стол»: virtualgl + VNCserver → VNCclient
+ Регулировка объёма доставляемого потока качеством картинки VNC
- Использование одного X-сервера VNC-серверами различных пользователей
«Удалённая виртуальная машина»: virtualgl + VirtualBox + VNCserver → VNCclient
- Недостаточная поддержка 3D-рендеринга в VirtualBox (гостевая ОС видит видеокарту "VirtualBox", а не, скажем, NVIDIA)
- Отсутствие поддержки VirtualBox в libvirt и отсутствие 3D-рендеринга в подсистемах виртуализации, поддерживающихся libvirt
Не проверена работоспособность 3D-рендеринга в гостевых ОС Linux