понедельник, 15 мая 2017 г.

VMware Blast, H.264 и графические адаптеры

Одним из нововведений, появившихся в VMware Horizon 7, стала поддержка протокола Blast Extreme, который использует кодек H.264 (или как еще его называют MPEG-4 AVC) для кодирования и декодирования передаваемого изображения.

Практически во всех современных графических адаптерах реализована аппаратная поддержка данного кодека, что позволяет существенно снизить нагрузку на центральный процессор как клиентского устройства, там и сервера (при использовании поддерживаемых графических адаптеров в виртуальной машине). В этом плане Blast смотрится более выгодно на фоне другого часто используемого протокола - PCoIP, для которого применяются специализированные адаптеры и нулевые клиенты на базе чипов Teradici.

Использование H.264 не требует выполнения каких-либо дополнительных настроек - по умолчанию агент и клиент Horizon автоматически выбирают совместимые параметры для кодирования и декодирования, однако, при планировании архитектуры VDI и выборе оборудования важно знать несколько нюансов работы данной технологии.

Кодирование (сжатие) изображения на виртуальной рабочей станции в режиме H.264 может выполняться как программным способом, за счет ресурсов центрального процессора, так и аппаратным, за счет графического адаптера. На текущий момент аппаратное кодирование Blast Extreme в Horizon поддерживается только для графических адаптеров Quadro и GRID/Tesla производства NVIDIA (за счет использования NVIDIA NVENC - NVIDIA Hardware Video Encoder) и только в режимах проброса графического адаптера vGPU или vDGA. Ни vSGA, ни графические адаптеры AMD (несмотря на то, что у них тоже есть аппаратный кодек H.264) не поддерживают аппаратное кодирование.

Определить, какой режим кодирования используется, можно посмотрев файлы журналов Blast на виртуальной рабочей станции: "C:\ProgramData\VMware\VMware Blast\Blast-Worker-SessionId<#>.txt".

При обработке H.264 центральным процессором в журнале будут отображаться строки вида:
0x0e14 bora::Log: VNCENCODE 5 VNCEncodeChooseRegionEncoder: region encoder h264. Screen 1/1 @ Resolution: 2560 x 1440
0x0e14 bora::Log: VNCEncodeRegionH264LoadLibrary: Loaded x264 shared library "libx264-144.dll"

При обработке средствами графического адаптера NVIDIA:
0x0138 bora::Log: VNCENCODE 5 VNCEncodeChooseRegionEncoder: region encoder NvFBCToDX9 H264. Screen 1/1 @ Resolution: 2560 x 1440
0x0138 bora::Log: VNCEncodeRegionNvFBCDX9NvEncLoadLibrary: Loaded NVIDIA SDK shared library "NvFBC64.dll": The operation completed successfully

Если кодирование H.264 вообще не используется:
0x0138 bora::Log: VNCENCODE 5 VNCEncodeChooseRegionEncoder: region encoder adaptive. Screen 1/1 @ Resolution: 2560 x 1440

Что касается клиентских устройств, будь то компьютер с клиентом Horizon Client, тонкий клиент под Linux или планшет на iOS, для них декодирование H.264 может выполняться исключительно средствами графического адаптера. Если графический адаптер в клиентском устройстве по каким-либо причинам не поддерживает декодирование H.264 с нужными параметрами, то и виртуальная рабочая станция, и клиент автоматически переключаются на использование JPEG/PNG кодека (или как его еще называют - адаптивный кодек), который обрабатывается только центральным процессором, даже в случае, когда внутри ВМ используется графический адаптер NVIDIA.

Посмотреть режим декодирования можно в журналах (например, для клиента Horizon под ОС Windows: "C:\Users\<%username%>\AppData\Local\Temp\vmware-<username>\vmware-mks-<#>.log").

При использовании аппаратного декодирования:
I125: VNC CLIENT: H264 hardware decoding available
VNC CLIENT: H264 support enabled

При использовании адаптивного кодека:
W115: VNCClientH264FillSlice: H.264 H/W decoder error or unsupported mode (streamId=0, screen x,y,w,h=0,0,2560,1440, mode=0)
VNC DECODER: disabled H.264 for current resolution (2560x1440)
VNCClientH264FillSlice: H.264 successfully disabled for current resolution

Казалось бы, в чем проблема? Все современные графические адаптеры, хоть в Raspberry Pi, хоть в iPhone, хоть встроенные в процессоры Intel и AMD, поддерживают аппаратное декодирование H.264.

Но всегда есть нюансы. Например, в тонком клиенте HP t620 Thin Client, о котором я недавно писал, используется графическое ядро Radeon HD 8280E, которое поддерживает аппаратное декодирование только Full HD видео, несмотря на то, что сам тонкий клиент может работать с двумя мониторами с разрешением 2560 x 1600. Поэтому при использовании мониторов в разрешении более 1920 x 1200, будет использоваться адаптивный кодек.

То же касается, Apple iPad 3, у которого разрешение экрана составляет 2048 x 1536, но также поддерживается только декодирование Full HD H.264 видео. Есть информация, что iPad Air 2 и Iphone 6 поддерживают 4K H.264 кодек, но у меня нет ни одного устройства под рукой, чтобы это проверить.

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

Также следует помнить, что до версии Horizon 7.1 в многомониторных конфигурациях использовался только адаптивный кодек, независимо от того, поддерживал ли клиент H.264 или нет.

Кодирование H.264 может быть отключено на уровне групповых политик (Group Policy шаблон VMware Blast -> H.264: Disabled).

H.264 выполняет сжатие изображения с потерями (Lossy), поэтому при при использовании Lossless режима (Group Policy шаблон VMware Blast -> PNG: Enabled) H.264 также отключается.

Кроме того, адаптивный режим используется в HTML5-клиенте (при подключении через веб-браузер). Единственный браузер, который на текущий момент поддерживает H.264 - это Google Chrome (что позволяет использовать Chromebook в качестве недорогих и мобильных тонких клиентов).

Если говорить о влиянии аппаратного декодирования H.264 на производительность виртуальной рабочей станции, то, например, при использовании адаптивного режима для разрешения 2560 x 1440 при проигрывании Full HD видео, протокол Blast может легко занять порядка 20% ресурсов четырехпроцессорной ВМ. А учитывая, что графический адаптер может еще и выпонять декодирование видео (когда не используется функция Multimedia Redirection), то разницу вы можете увидеть самостоятельно.

Аппаратное кодирование Blast Extreme + аппаратное декодирование видео:

Программное кодирование Blast Extreme + программное декодирование видео:

Комментариев нет:

Отправить комментарий