Linux Virtual Delivery Agent

图形配置和微调

本文指导如何完成 Linux VDA 显卡配置和微调。

有关详细信息,请参阅系统要求安装概述部分。

配置

针对 3D 图形工作负载优化

此设置配置最适合图形密集型工作负载的相应默认值。可为工作负载集中于图形密集型应用程序的用户启用此设置。仅在会话可以使用 GPU 的情况下应用此策略。显式覆盖由此策略设置的默认设置的其他任何设置具有更高的优先级。

默认情况下,禁止优化 3D 图形工作负载

视频编解码器进行压缩

Thinwire 是 Linux VDA 中使用的显示内容远程处理技术。该技术允许一台计算机上生成的图形传输(通常跨网络)到另一台计算机上进行显示。

使用视频编解码器进行压缩图形策略设置默认图形模式,并针对不同的用例提供以下选项:

  • 偏好时使用。这是默认设置。无需执行其他配置。它可确保为所有 Citrix 连接选择 Thinwire,且 Thinwire 已针对典型桌面工作负载在可扩展性、带宽和卓越图像质量方面经过优化。
  • 针对整个屏幕。为 Thinwire 提供全屏 H.264 或 H.265,以针对改进用户体验和带宽使用情况进行优化,尤其是在大量使用 3D 图形的情况下。选择了针对整个屏幕,或者选择了偏好时使用并启用了针对 3D 图形工作负载优化时,支持会话水印
  • 针对主动变化的区域。Thinwire 中的自适应显示技术识别移动图像(视频、动态 3D)。它仅在图像正在移动的屏幕部分中使用 H.264。选择性使用 H.264 视频编解码器支持 HDX Thinwire 检测屏幕的频繁更新部分并使用 H.264 视频编解码器对其进行编码。对于屏幕的其余部分(包括文本和摄影图片),仍继续使用图像压缩(JPEG、RLE)和位图缓存。用户可获得以下益处:占用更低的带宽、提高视频内容质量以及在其他位置获得无损文本或高质量图像。要启用此功能,请将使用视频编解码器进行压缩策略更改为偏好时使用(默认设置)或针对主动变化的区域。有关详细信息,请参阅图形策略设置

    适用于正在选择的整个屏幕

一些其他策略设置(包括以下视频显示策略设置)可以用于对显示远程处理技术的性能进行完善:

H.264 硬件编码

使用视频编解码器的硬件编码策略允许使用 GPU 硬件加速(如果可用)通过视频编解码器压缩屏幕元素。如果 GPU 硬件不可用,VDA 会回退到使用软件视频编解码器的基于 CPU 的编码。

GPU 硬件加速可优化硬件资源利用率,极大地提高了每秒帧数 (FPS) 的性能。

自版本 2210 起,GPU 硬件加速涵盖以下图形模式:

  • 偏好时使用
  • 针对整个屏幕
  • 针对主动变化的区域

允许视觉无损压缩

允许视觉无损压缩策略允许对图形使用视觉无损压缩,而不是真正的无损压缩。相比于真正无损的压缩,视觉无损功能可提高性能,但会产生视觉上不易察觉的轻微损失。此设置可更改视觉质量设置的值的使用方式。

默认情况下,允许视觉无损压缩策略处于禁用状态。要启用视觉无损压缩,请将允许视觉无损压缩设置为已启用,将视觉质量策略设置为无损构建

如果将使用视频编解码器进行压缩策略设置为不使用视频编解码器,则视觉无损压缩将应用到静态图像编码。如果将使用视频编解码器进行压缩策略设置为不使用视频编解码器以外的图形模式,则视觉无损压缩将应用到 H.264 编码。

以下客户端支持选择性 H.264:

  • Citrix Receiver for Windows 4.9 到 4.12
  • Citrix Receiver for Linux 13.5 到 13.10
  • 适用于 Windows 的 Citrix Workspace 应用程序 1808 及更高版本
  • 适用于 Linux 的 Citrix Workspace 应用程序 1808 及更高版本

有关视觉质量使用视频编解码器进行压缩策略设置的详细信息,请参阅视觉显示策略设置图形策略设置

支持 H.265 视频编解码器

从 7.18 版起,Linux VDA 支持使用 H.265 视频编解码器对远程图形和视频进行硬件加速。

可以将此功能用于:

  • Citrix Receiver for Windows 4.10 到 4.12
  • 适用于 Windows 的 Citrix Workspace 应用程序 1808 及更高版本

要从此功能受益,请在 Linux VDA 和客户端上启用此功能。如果客户端的 GPU 不支持使用 DXVA 接口进行 H.265 解码,图形的 H.265 解码策略设置将被忽略,会话将回退到使用 H.264 视频编解码器。有关详细信息,请参阅 H.265 视频编码

要在 VDA 上启用 H.265 硬件编码,请执行以下操作:

  1. 启用使用视频编解码器的硬件编码策略。
  2. 启用针对 3D 图形工作负载优化策略。
  3. 确保使用视频编解码器进行压缩策略采用默设置,或设置为针对整个屏幕
  4. 确保视觉质量策略设置为无损构建始终无损

要在客户端上启用 H.265 硬件编码,请参阅 H.265 视频编码

支持 YUV444 软件编码

Linux VDA 支持 YUV444 软件编码。YUV 编码方案会向每个像素分配亮度和颜色值。在 YUV 中,Y 表示亮度或或 luma 值,UV 表示颜色或 chroma 值。您可以在 Citrix Receiver for Windows 4.10 到 4.12 和适用于 Windows 的 Citrix Workspace 应用程序 1808 及更高版本上使用此功能。

每个唯一的 Y、U 或 V 值均包含 8 位数或一个字节。YUV444 数据格式以 24 位/像素的速度传输。YUV422 数据格式可在两个像素之间共享 U 和 V 值,从而导致平均传输速率为 16 位/像素。下表显示了 YUV444 和 YUV420 之间的直观比较。

YUV444 YUV420
YUV444 YUV420

要在 VDA 上启用 YUV444 软件编码,请执行以下操作:

  1. 确保将使用视频编解码器进行压缩策略设置为针对整个屏幕
  2. 确保将视觉质量策略设置为始终无损无损构建

图形质量滑块

我们在虚拟 Linux 会话中运行的图形状态指示器工具中包含了图形质量滑块。该滑块有助于在图像质量与交互性之间找到正确的平衡。

要使用滑块,请完成以下步骤:

  1. 在 Citrix Studio 中启用图形状态指示器策略。

    图形状态指示器策略

  2. 打开终端并运行 ctxslider 命令。此时将显示滑块 UI。

    注意:

    如果已将视觉质量策略设置为始终无损无损构建,则不会显示滑块 UI。

    图形质量滑块

    现在可以提供以下选项:

    • 要更改图像质量,请移动滑块。滑块支持的范围为 0–9。
    • 要使用系统定义的设置,请选择让系统决定
    • 要切换到无损模式,请选择像素完美

根据带宽估算值调整平均位速率

通过根据带宽估算值调整平均位速率,Citrix 增强了 HDX 3D Pro 硬件编码。

使用 HDX 3D Pro 硬件编码时,VDA 可以间歇性地估计网络的带宽并相应地调整已编码的帧的位速率。这一新增功能提供了一种平衡清晰度和流畅度的机制。

默认情况下启用此功能。要禁用此功能,请运行以下命令:

sudo /opt/Citrix/VDA/bin/ctxreg create -k "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Citrix\Thinwire" -t "REG_DWORD" -v "DisableReconfigureEncoder" -d "0x00000001" --force
<!--NeedCopy-->

除了使用此功能之外,您还可以运行以下命令来调整清晰度和流畅度。AverageBitRatePercentMaxBitRatePercent 参数将设置带宽使用情况的百分比。设置的值越高,图形就越清晰,但流畅度越低。建议的设置范围为 50 到 100。

sudo /opt/Citrix/VDA/bin/ctxreg create -k "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Citrix\Thinwire" -t "REG_DWORD" -v "AverageBitRatePercent" -d "90" --force

sudo /opt/Citrix/VDA/bin/ctxreg create -k "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Citrix\Thinwire" -t "REG_DWORD" -v "MaxBitRatePercent" -d "100" --force
<!--NeedCopy-->

在调整平均位速率时,如果您的屏幕画面保持不变,则最近的帧将处于低质量状态,因为未发送任何新的帧。通过重新配置并即时发送最高质量的最新帧,锐化支持可以解决此问题。

有关 Linux VDA Thinwire 支持的策略的完整列表,请参阅策略支持列表

有关 Linux VDA 上的多监视器支持配置的信息,请参阅 CTX220128

并行处理

Thinwire 可以通过并行处理某些任务来提高每秒帧数 (FPS),但总体 CPU 占用量的开销略高。默认情况下,此功能处于禁用状态。要启用此功能,请在您的 VDA 上运行以下命令:

sudo /opt/Citrix/VDA/bin/ctxreg create -k "HKLM\System\CurrentControlSet\Control\Citrix\Thinwire" -t "REG_DWORD" -v "ParallelProcessing" -d "0x00000001" --force
<!--NeedCopy-->

故障排除

检查正在使用哪种图形模式

运行以下命令来检查正在使用哪种图形模式(0 表示 TW+。1 表示全屏视频编解码器):

sudo /opt/Citrix/VDA/bin/ctxreg dump | grep GraphicsMode
<!--NeedCopy-->

结果类似于:

create -k "HKLM\Software\Citrix\Ica\Session\4\Graphics" -t "REG_DWORD" -v "GraphicsMode" -d "0x00000000" --force

检查是否正在使用 H.264

运行以下命令来检查是否正在使用 H.264(0 表示未在使用。1 表示正在使用):

sudo /opt/Citrix/VDA/bin/ctxreg dump | grep H264
<!--NeedCopy-->

结果类似于:

create -k "HKLM\Software\Citrix\Ica\Session\4\Graphics" -t "REG_DWORD" -v "H264" -d "0x00000000" --force

检查是否正在使用 H.265

运行以下命令来检查是否正在使用全屏 H.265(0 表示未使用。1 表示正在使用):

sudo /opt/Citrix/VDA/bin/ctxreg dump | grep H265
<!--NeedCopy-->

结果类似于:

create -k "HKLM\Software\Citrix\Ica\Session\4\Graphics" -t "REG_DWORD" -v "H265" -d "0x00000000" --force

检查正在使用哪种 YUV 编码方案

运行以下命令来检查正在使用哪种 YUV 编码方案(0 表示 YUV420;1 表示 YUV422;2 表示 YUV444):

注意: 仅当正在使用视频编解码器时,YUVFormat 的值才有意义。

sudo /opt/Citrix/VDA/bin/ctxreg dump | grep YUVFormat
<!--NeedCopy-->

结果类似于:

create -k "HKLM\Software\Citrix\Ica\Session\4\Graphics" -t "REG_DWORD" -v "YUVFormat" -d "0x00000000" --force

检查是否正在使用 YUV444 软件编码

运行以下命令来检查是否正在使用 YUV444 软件编码:

sudo /opt/Citrix/VDA/bin/ctxreg dump | grep Graphics
<!--NeedCopy-->

当 YUV444 处于运行状态时,结果类似于:

create -k "HKLM\Software\Citrix\Ica\Session\4\Graphics" -t "REG_DWORD" -v "GraphicsMode" -d "0x00000001" --force
create -k "HKLM\Software\Citrix\Ica\Session\4\Graphics" -t "REG_DWORD" -v "H264" -d "0x00000001" --force
create -k "HKLM\Software\Citrix\Ica\Session\4\Graphics" -t "REG_DWORD" -v "HardwareEncoding" -d "0x00000000" --force
create -k "HKLM\Software\Citrix\Ica\Session\4\Graphics" -t "REG_DWORD" -v "YUVFormat" -d "0x00000002" --force

检查是否在为 3D Pro 使用硬件编码

运行以下命令(0 表示未使用。1 表示正在使用):

sudo /opt/Citrix/VDA/bin/ctxreg dump | grep HardwareEncoding
<!--NeedCopy-->

结果类似于:

create -k "HKLM\Software\Citrix\Ica\Session\1\Graphics" -t "REG_DWORD" -v "HardwareEncoding" -d "0x00000001" --force

另一个方法是使用 nvidia-smi 命令。如果正在使用硬件编码,输出将类似于以下内容:

Tue Apr 12 10:42:03 2016
+------------------------------------------------------+
| NVIDIA-SMI 361.28     Driver Version: 361.28         |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GRID K1             Off  | 0000:00:05.0     Off |                  N/A |
| N/A   42C    P0    14W /  31W |    207MiB /  4095MiB |      8%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID  Type  Process name                               Usage      |
|=============================================================================|
|    0      2164  C+G   /usr/local/bin/ctxgfx                          106MiB |
|    0      2187    G   Xorg                                            85MiB |
+-----------------------------------------------------------------------------+
<!--NeedCopy-->

确认 NVIDIA GRID 图形驱动程序是否已正确安装

要确认 NVIDIA GRID 图形驱动程序是否已正确安装,请运行 nvidia-smi。结果类似于:

+------------------------------------------------------+
| NVIDIA-SMI 352.70     Driver Version: 352.70         |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Tesla M60           Off  | 0000:00:05.0     Off |                  Off |
| N/A   20C    P0    37W / 150W |     19MiB /  8191MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID  Type  Process name                               Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+
<!--NeedCopy-->

为显卡设置正确的配置:

etc/X11/ctx-nvidia.sh

HDX 3D Pro 多监视器重绘问题

如果在非主监视器屏幕上发生重绘问题,请检查 NVIDIA GRID 许可证是否可用。

检查 Xorg 错误日志

Xorg 的日志文件命名类似于 Xorg.{DISPLAY}.log,位于 /var/log/ 文件夹中。

已知问题及限制

对于 vGPU,Citrix Hypervisor 本地控制台显示 ICA 桌面会话屏幕

解决方法:通过运行以下命令禁用 VM 的本地 VGA 控制台:

对于 Citrix Hypervisor 8.1 及更高版本:

[root@xenserver ~]# xe vgpu-param-set uuid=vgpu-uuid extra_args=disable_vnc=1
<!--NeedCopy-->

对于 8.1 之前的 Citrix Hypervisor:

xe vm-param-set uuid=<vm-uuid> platform:vgpu_extra_args="disable_vnc=1"
<!--NeedCopy-->

登录时 Gnome 3 桌面显示很慢

这是 Gnome 3 桌面会话启动的限制。

在调整 Citrix Workspace 应用程序窗口大小时,有些 OpenGL/WebGL 应用程序无法很好地呈现

调整 Citrix Workspace 应用程序窗口大小会改变屏幕分辨率。NVIDIA 专用驱动程序会更改某些内部状态,并可能要求应用程序做出相应的响应。例如,WebGL 库元素 lightgl.js 可能会生成错误,指示 Rendering to this texture is not supported (incomplete frame buffer)

图形配置和微调