1.HDX Graphics Overview
HDX graphics利用Thinwire技术将要显示的数据分成三类
- 文本、简单图片、实心填充的色块
- 静态图像
- 动态图像
如下图所示,蓝色虚线标注的是文本和简单图片;红色标注的是静态图片;绿色标注的是动态图像。Thinwire使用不同的编码方式来针对不同类型的数据进行压缩和传递。
文本、简单图片、实心填充的色块:行程编码(Run-Length encoding, RLE)或者H.264/H.265
静态图片:JPEG
动态图像:Adaptive JPEG或者H.264/H.265
https://docs.citrix.com/en-us/tech-zone/design/design-decisions/hdx-graphics.html

2.Graphics Mode
- Full-Screen H.264/H.265
- Selective H.264/H.265
- Adaptive JPEG
- Legacy Graphics mode(只适用于Windows Server 2008 及Windows 7)
由于Legacy Graphics Mode只适用于Windows Server 2008 及Windows 7,不再详细介绍。其他Graphics Mode是由 Use video codec for compression 和 visual quality两个策略值决定。

当Visual Quality为Build to lossless时,对于7.17及以前的版本使用Adaptive JPEG,对于7.18及以后的版本使用H.264 (https://support.citrix.com/article/CTX235359)
当Visual Quality为Always lossless时,会使用Adaptive JPEG.
JPEG方式消耗较少VDA端的CPU但会消耗更多传输带宽,H.264则是消耗较多VDA端CPU但会消耗更少的传输带宽,在三维作图场景中使用H.264编码方式。
3.Graphics Policy
图形策略非常多,但是大部分是用于旧图形模式,只适用于Windows Server 2008 及Windows 7,这两个OS已经EOL。Win10以及以后的操作系统可调整的策略不多,所以调整图像性能问题反而简单。
- Use video codec for compression :是否采用H.264编码,一般默认值就行
- Use hardware encoding for video codec:是否使用vGPU进行H.264编解码,不知道这个策略的目的是啥,有vGPU为啥不用呢
- Visual quality:视觉质量,质量越高画面越清晰,带宽消耗越高,跟在线看视频清晰度类似。
- Target frame rate:图像传输的目标帧速率,速率越高画面越流畅,带宽消耗越高,跟打英雄联盟设置FPS类似
- Target minimum frame rate:基本不用调
- Allow visually lossless compression:允许视觉无损压缩,一般要开启
- Display memory limit:基本不用调
- Dynamic window preview:默认是开启的,不用调
- Desktop wallpaper:基本不用调
- View window contents while dragging:拖拽应用程序窗口移动时是否要显示窗口内容
Enhanced desktop experience
https://support.citrix.com/article/CTX201812
4.VDA hardware encoding
图像在进行传输之前要进行压缩编码(encoding),在接收端需要进行解码(decoding),对于编解码有两种方式:
- CPU编解码(又称软解码)
- GPU编解码(又称硬解码)
在没有GPU的场景下,图像编解码工作是由CPU来承担,所谓图形硬件加速即GPU来承担图像编解码的工作,减少CPU的负载。
VDA端硬件编码通过策略 Use hardware encoding for video codec控制,默认是开启的。可以通过indicator查看硬件编码是否开启,如果indicator显示“硬件编码”被禁用,参考 https://support.citrix.com/article/CTX239325 :
VDA 1912
Use the NvFBC tool to enable the NvFBC
- C:\Program Files\Citrix\ICAService\NvFBCEnable.exe -checkstatus
- C:\Program Files\Citrix\ICAService\NvFBCEnable.exe -enable
VDA 2103 and later
- C:\Program Files\Citrix\HDX\bin\NvFBCEnable.exe -checkstatus
- C:\Program Files\Citrix\HDX\bin\NvFBCEnable.exe -enable


5.Client hardware acceleration
当VDA的画面通过HDX协议传输到客户端时,客户端需要进行解码将图像显示在显示器上。在Receiver 4.4及以后的版本中支持客户端硬件加速,即用客户端的GPU来做H.264的解码。
如何启用关闭客户端硬件加速?
默认情况下,CWA会自动检测客户端的GPU是否满足硬件加速的条件,如果支持则自动开启,否则会静默关闭。要想禁用客户端硬件加速,则需要显示的将该策略禁用。
Computer Configuration >Administrative Templates > Citrix Workspace >User Experience.
Hardware Acceleration for graphics.
该策略对应的注册表:
Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Citrix\ICA Client\Graphics Engine
Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Policies\Citrix\ICA Client\Graphics Engine
Hwacceleration –
如何verify客户端硬件加速是否启用?
VDA端注册表:HKEY_CURRENT_USER\SOFTWARE\Citrix\ICA Client\CEIP\Data\GfxRender\<Session ID>
Graphics_GfxRender_Decoder
Graphics_GfxRender_Renderer
Graphics_GfxRender_Decoder = 1 (CoreAVC used), 2 (DXVA used)
Graphics_GfxRender_Renderer = 1 (GDI used), 2 (D3D used) 3 (GDIHybrid used) 4 (D3DHybrid used)
客户端硬件加速启用时会降低客户端CPU的负载,不会减轻VDA端的负载。对于3D项目或者影音播放较多的项目中,客户端加速可以获得更好的显示效果。
通过DXVA Checker工具可以检测客户端上的GPU是否支持H.264解码,不过现在市面上几乎所有的GPU都支持H.264。
6.Tools
dxdiag
HDX Monitor
Graphics status indicator
在DDC上下发Graphics status indicator策略,VDA系统托盘中会显示图像相关的信息,适用于普通和3D桌面

右键单击上述图标会显示图像相关的信息

7.Troubleshoot
录屏:在VDA和client安装录屏软件,同时录制问题复现过程的屏幕,然后查看是VDA本身显示的问题还是通过HDX传输引起的问题。如果是VDA本身的问题,那么需要从VDA角度去排查,比如CPU性能,显卡性能,三方应用兼容性,在这个场景下调整图形策略没有效果;如果是传输造成的问题,那么需要从策略方面去调整。
清晰度问题:调整图像显示质量,Visual Quality调高,客户端DPI
流畅性问题:人眼识别在不低于24帧的情况下就会看到一个连贯的画面。
- 应用本身设定:比如3D作图软件硬件加速是否已正常启用,office 硬件加速设定
- VDA端或者策略:提高帧速率,使用H.264,加GPU;
- 客户端:客户端硬件加速,客户端解码性能;
- 网络带宽:内网还是外围,网络延迟,可以在Director上或者CQI查看Latency
流畅性和清晰度在某些场景下是个trade-off的关系,清晰度高流畅性会下降,反之,清晰度低流畅性会提高。