вторник, 11 января 2022 г.

Оптимизируем работу Horizon Blast на медленных каналах

Один из основных сценариев использования VDI - организация удаленной работы сотрудников. Но далеко не все пользователи VDI, работающие вне офиса или подключающиеся из других регионов, могут похвастаться качественным широкополосным доступом в Интернет. Часто пользователи подключаются к VDI через мобильных операторов, либо через местных провайдеров, а в нередких случаях и через спутник.

Horizon содержит множество механизмов, которые из коробки позволяют настроить параметры подключения на медленных и нестабильных каналах, но в ряде случаев администраторам VDI потребуется выполнить дополнительные настройки. В этой статье мы рассмотрим несколько рекомендаций, которые позволят оптимизировать подключение и улучшить качество работы пользователей VDI.


Общие рекомендации

Самая очевидная рекомендация - обновитесь до последней актуальной версии агента и клиента Horizon. Средства удаленного доступа в Horizon активно развиваются, пример тому - улучшение работы кодека BlastCodec и RTAV в Horizon 8 2106 и 2111. Об улучшениях можно прочитать в статьях What's New:

https://techzone.vmware.com/blog/whats-new-horizon-8-2106

https://blogs.vmware.com/euc/2021/12/whats-new-in-vmware-horizon-8-2111-service-security-and-experience-features.html

Также проверьте, что Blast может работать и по TCP, и по UDP. В Blast реализована технология Blast Extreme Network Intelligent Transport (https://blogs.vmware.com/euc/2018/08/blast-extreme-network-intelligent-transport.html), которая может динамически переключать виртуальные каналы Blast между транспортными протоколами в зависимости от параметров канала. Так, например, UDP лучше подходит для передачи потокового видео и приспособлен для работы на каналах с потерями пакетов (5% и более), в то время как TCP лучше работает на каналах с высокими задержками (250 мс и более), а также через SSL VPN. Соотственно, чтобы Blast мог использовать плюсы обоих транспортных протоколов, должны быть открыты соответствующие TCP и UDP порты между клиентами, серверами UAG и десктопами. Диаграмма соединений приведена в документе: https://techzone.vmware.com/resource/network-ports-vmware-horizon

Для работы с периферийными устройствами на WAN каналах не используйте USB Redirection, т.к. данная функция крайне требовательна к полосе пропускания и уровню задержек. Вместо этого применяйте другие механизмы "проброса" устройств, например, VMware Integrated Printing для подключения принтеров, Real Time Audio-Video - для гарнитур и веб-камер, Scanner redirection - для сканеров, Client drive redirection - для USB накопителей, Smart card redirection - для токенов и смарт-карт.

Учтите, что при подключении веб-камеры через RTAV с настройками по умолчанию с клиента будет передаваться изображение в разрешении 320 x 240 и частотой в 15 кадров в секунду. Хотя при таком разрешении можно получить изображение весьма посредственного качества, даже оно будет требовать канал с пропускной способностью ~300 Кбит/с. Изменить настройки изображения можно на клиенте через реестр (Windows) или файлы конфигурации (Linux, Mac), а также через групповые политики на виртуальном десктопе. Подробная информация о настройке RTAV приведена в серии статей https://blogs.vmware.com/euc/2013/07/3370.html. Там же приводится справочная информация о средней утилизации канала при передаче видео различного разрешения с веб-камер.

Хотя RTAV работает с любыми приложениями, при организации ВКС через Microsoft Teams более оптимальным вариантом будет Media Optimization for Microsoft Teams. Данная функция позволяет передавать аудио и видео поток от клиента до клиента, минуя виртуальный десктоп. Такой трафик проще оптимизировать, используя настройки качества звука и видео в самой ВКС,  а также задав приоритезацию на стороне сетевого оборудования. Подробнее о Media Optimization для MS Teams можно прочитать по ссылке: https://techzone.vmware.com/resource/microsoft-teams-optimization-vmware-horizon. Схожие возможности доступны и для других ВКС:

Если у пользователей установлены мониторы с высоким разрешением в 2.5K или 4K, рекомендуйте им настраивать более низкое разрешение виртуального десктопа в Horizon Client: Customize Remote Desktop Settings -> Resolution. В этом случае изображение виртуального десктопа можно будет растягивать на полный эран на клиенте без изменения разрешения экрана в гостевой ОС.


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


Оптимизация ОС

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

В этом может помочь утилита VMware OS Optimization Tools, доступная для загрузки с сайта: https://flings.vmware.com/vmware-os-optimization-tool Она позволяет оптизировать настройки десктопа из одной консоли.

Не забывайте и об оптимизации клиентского устройства. Если пользователь работает со своего домашнего ПК, то параллельно с VDI сессией могут быть запущены и другие приложения, утилизирующие канал: веб-плееры, приложения-лаунчеры игр с автоматическим обновлением, социальные сети и мессенджеры. Посоветуйте пользователям на время работы воздержаться от запуска сторонних приложений.


Оптимизация Blast

Несмотря на то, что Blast умеет подстраиваться под параметры канала, менять качество изображения и переключаться между кодеками в зависимости от информации, отображаемой на экране, вы можете применить следующие настройки групповых политик на виртуальном десктопе для уменьшения требований к полосе пропускания при работе на очень медленных или нестабильных каналах. Я настоятельно рекомендую протестировать указанные настройки на нескольких пользователях VDI перед тем, как применять их на все виртуальные десктопы, чтобы найти золотую середину между качеством изображения и утилизацией канала.

Импортируйте ADMX шаблоны из VMware-Horizon-Extras-Bundle и запустите редактор групповых политик Windows.


Если пользователи не работают с мультимедиа приложениями, отключите поддержку звука (Computer Configuration -> Administrative Templates -> VMware Blast):

Audio playback: Disabled.

Отключите передачу буфера обмена и копирование файлов между клиентским устройством и виртуальным десктопом (Computer Configuration -> Administrative Templates -> VMware View Agent Configuration -> Clipboard Redirection):

Configure clipboard redirection: Disabled

Configure file transfer: Disabled

Задайте минимальный порог полосы пропускания для одной сессии (Computer Configuration -> Administrative Templates -> VMware Blast):

Min Session Bandwidth: 128

Задайте максимальный порог полосы пропускания для одной сессии. Этот лимит включает в себя все типы трафика удаленной сессии: видео, аудио, проброс устройств, передача буфера обмена. Не устанавливайте данный параметр в слишком низкое значение (минимальное значение 256 Кбит/с), т.к. это напрямую повлияет на удобство работы пользователей со своими рабочими столами. Если пользователи подключаются через медленный канал в 1 Мбит/с, укажите в качестве начального значения - 1024, а затем попробуйте уменьшить значение до 768 или 512 Кбит/с, если пропускной способности канала недостаточно:

Max Session Bandwidth: 1024

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

Max Session Bandwidth kbit/s Megapixel Slope: 400

Этот параметр задает лимит в Kbit/s для части экрана размером 1 мегапиксель (условно, 1000x1000 точек), соответственно, чтобы посчитать суммартный лимит канала для видео трафика требуется перемножить кол-во мегапикселей на значение параметра. Например, для экрана с разрешением 1920x1080 точек и значением Slope в 400, ограничение сверху будет: 2 мегапикселя * 400 Кбит/с = 800 Кбит/с.

Выставьте ограничение по максимальной частоте кадров:

Max Frame Rate: 20

Если пользователи не просматривают видео и не работают с графикой, то 15-24 кадров в секунду должно быть достаточно для работы с документами и типовыми офисными приложениями (по умолчанию настроено значение в 30 кадров в секунду).

Остальные настройки зависят от профиля работы пользователя.


Оптимизация для мультимедиа приложений

Если пользователи активно работают с мультимедийными приложениями: просматривают видео или используют ВКС, то для них оптимальным будет использование кодеков H.264 или H.265 с возможность автоматического переключения на BlastCodec (функция Encoder Switch), когда пользователи переключаются на работу с текстом.

Для оптимизации работы H.264 / H.265 задайте следующие настройки (Computer Configuration -> Administrative Templates -> VMware Blast):

Включите поддержку H.264 и H.265:

H.264: Enabled

HEVC: Enabled

Отключите поддержку режима кодирования 4:4:4 (режим High Color Accuracy), т.к. он требует больше полосы пропускания:

H.264 High Color Accuracy: Disabled

HEVC High Color Accuracy: Disabled

Задайте максимальное и минимальное значение параметра квантования (уровня сжатия изображения):

H.264 Quality

- H.264 Maximum QP: 40

- H.264 Minimum QP: 15

Старайтесь не менять значение данных параметров слишком сильно (рекомендуемый диапазон значений Maximum QP: 31-41 и Minimum QP: 5-15). Чем большее значение QP вы устанавливаете, тем больше артефактов сжатия вы будете видеть на экране (максимальное значение - 51). На практике, при установке Minimum QP в значение >30 работать с мелким текстом становится невозможно.

Для включения режима Encoder Switch создайте в реестре виртуального десктопа следующее значение типа REG_SZ:

HKLM\SOFTWARE\VMware, Inc.\VMware Blast\Config\EncoderSwitchEnabled = 1

Включите поддержку BlastCodec:

HKLM\SOFTWARE\VMware, Inc.\VMware Blast\Config\EncoderBlastCodecEnabled = 1

Проверить, что режим Encoder Switch включен, можно с помощью Horizon Performance Tracker (Encoder Name: switch).

Для оптимизации BlastCodec выполните следующие настройки (Computer Configuration -> Administrative Templates -> VMware Blast). 

Отключите поддержку Lossless сжатия:

PNG: Disabled

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

Задайте уровень сжатия изображения для BlastCodec:

Blast Code Quality

- Blast Codec Maximum QP: 0

- Blast Codec Minimum QP: 0

Параметры Maximum QP и Mimum QP определяют значение максимального и минимального качества изображения в диапазоне от 1 до 8. Чем больше значение QP, тем сильнее видны артефакты сжатия. При установке значения QP в 0, качество изображения будет контролироваться другой политикой:

Image Quality: Enabled

- Low JPEG Quality: 10

- Mid JPEG Quality: 20

- High JPEG Quality: 55

Указанные значения позволяют снизить нагрузку на канал при приемлемом уровне сжатия. Не рекомендуется задавать для параметра High JPEG Quality слишком низкое значение, т.к. это приведет к сильному искажению изображения и появлению артефактов.


Оптимизация для текстовых приложений

Если пользователи не работают с мультимедийными приложениями, или канал передачи данных не обеспечивает достаточной пропускной способности, рекомендуется переключиться на использование только BlastCodec. Для этого отключите Encoder Switch, создав в реестре виртуального десктопа следующее значение типа REG_SZ:

HKLM\SOFTWARE\VMware, Inc.\VMware Blast\Config\EncoderSwitchEnabled = 0

Включите поддержку BlastCodec:

HKLM\SOFTWARE\VMware, Inc.\VMware Blast\Config\EncoderBlastCodecEnabled = 1

Отключите поддержку H.264 и HEVC через групповые политики:

H.264: Disabled

HEVC: Disabled

После этого Blast переключится на использование BlastCodec.

Примените остальные рекомендации для BlastCodec через групповые политики (отключение PNG и настройка качества изображения).

Если полученный результат не устраивает пользователей, попробуйте поменять значение некоторых настроек:

  • Для увеличения частоты кадров: увеличьте Max Frame Rate, увеличьте Max Session Bandwidth и Max Session Bandwidth kbit/s Megapixel Slope, снизьте качество изображения (Image Quality, H.264 Quality).
  • Для увеличения качества изображения: уменьшите Max Frame Rate, увеличьте Max Session Bandwidth и Max Session Bandwidth kbit/s Megapixel Slope, увеличьте качество (Image Quality, H.264 Quality).
  • Для снижения утилизации канала: уменьшите Max Frame Rate, уменьшите Max Session Bandwidth и Max Session Bandwidth kbit/s Megapixel Slope, снизьте качество (Image Quality, H.264 Quality).

Дополнительная информация об оптимизации Blast доступна в статье: https://techzone.vmware.com/resource/vmware-blast-extreme-optimization-guide

6 комментариев:

  1. а в BLAST как нибудь можно отключить использование UDP?
    чтобы чисто по tcp работало

    ОтветитьУдалить
    Ответы
    1. Можно отключить UDP через групповую политику на агенте: Computer Configuration -> Administrative Templates -> VMware Blast -> UDP Protocol. Либо можно заблокировать UDP порты.

      Удалить
    2. Да, спасибо, уже нашел данную фишку и тестирую с отключенным UDP протоколом

      Удалить
    3. Андрей, а подскажите, достаточно ли отключение UDP Protocol на агенте вирт рабочего стола чтобы сессия шла только по tcp? По идее, должно работать только через TCP насколько я понимаю
      У нас инсталляция с использование балансировщика на HA proxy, а он не поддерживает UDP к сожалению и идут периодически обрывы сессий
      И второй вопросик - ознакомился с диаграммой (https://techzone.vmware.com/resource/network-ports-vmware-horizon), правильно я понимаю что при подключении через веб (веб акцесс) используется именно tcp и без UDP?

      Удалить
    4. Проверить какой протокол используется при подключении можно с помощью Horizon Performance Tracker или по логам: https://techzone.vmware.com/resource/vmware-blast-extreme-optimization-guide#how-to-verify-the-configuration

      При подключении через веб-браузер используется TCP.

      Я не рекомендую передавать трафик сессии через балансировщик. Достаточно балансировать только HTTPS для первичного подключения, а трафик BLAST уже передавать в обход балансировчика напрямую на UAG или Connection Server.

      Удалить
    5. При подключении через веб-браузер используется TCP.
      вот как раз и было тут подозрение, потому как через веб все прекрасно работает, а через толстый клиент получаем Tunnel Error

      Я не рекомендую передавать трафик сессии через балансировщик. Достаточно балансировать только HTTPS для первичного подключения, а трафик BLAST уже передавать в обход балансировчика напрямую на UAG или Connection Server.
      а вот тут пока не совсем понимаю, у нас перед UAG стоит внешний HAproxy, на котором и расположен VIP для доступа в Хорайзн, то есть траффик так или иначе проходит внешний HA
      может есть какие полезные ссылки, чтобы понять как сделать в обход внешнего балансировщика

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

      Удалить