Linux Virtual Delivery Agent

图形配置和微调

本文介绍了 Linux VDA 图形配置和微调。

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

配置

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

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

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

视频编解码器进行压缩

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

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

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

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

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

AV1/H.265/H.264 硬件编码

使用视频编解码器的硬件编码策略允许使用 GPU 硬件加速(如果可用)通过视频编解码器压缩屏幕元素。GPU 硬件加速可优化硬件资源利用率,极大地提高了每秒帧数 (FPS) 的性能。

GPU 硬件加速涵盖使用视频编解码器进行压缩策略设置的所有图形模式:

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

要启用硬件视频压缩,请完成以下步骤:

  1. 使用视频编解码器的硬件编码策略设置为已启用
  2. 使用视频编解码器进行压缩设置为偏好时使用针对整个屏幕针对主动变化的区域。请确保未将其设置为不使用视频编解码器

VDA 和 Citrix Workspace 应用程序必须支持和启用 AV1 或 H.265 视频编解码器才能使用。在编解码器协商期间,AV1 优先于 H.265 和 H.264。不支持 AV1 时,将协商使用 H.265。如果不支持 AV1 和 H.265,会话将回退到使用 H.264 视频编解码器。如果 GPU 硬件不可用,VDA 会回退到使用软件视频编解码器的基于 CPU 的编码。

AV1 硬件编码的要求

VDA
客户端
  • 适用于 Windows 的 Citrix Workspace 应用程序 2305 或更高版本
  • 支持 AV1 解码的客户端 GPU:
    • NVIDIA Ampere 或更高版本
    • Intel 第 11 代/Arc 或更高版本
    • AMD Radeon RX 6000/Radeon Pro W6000 系列 (RDNA2) 或更高版本

H.265 硬件编码的要求

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

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

H.265/H.264 无损压缩

H.265/H.264 无损压缩适用于通过 NVIDIA GPU 进行的 HDX 3D PRO 硬件加速。H.265 无损压缩需要适用于 Windows 的 Citrix Workspace 应用程序 2305 及更高版本。H.264 无损压缩需要以下客户端:

  • 适用于 Windows 的 Citrix Workspace 应用程序 2303 及更高版本
  • 配备 Apple M1 芯片的适用于 Mac 的 Citrix Workspace 应用程序 2301 及更高版本

要启用 H.265/H.264 无损压缩,请完成以下步骤:

  1. 使用视频编解码器的硬件编码策略设置为已启用
  2. 使用视频编解码器进行压缩策略设置为针对整个屏幕

  3. 视觉质量策略设置为 Always losses(始终有损)或无损构建

允许视觉无损压缩

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

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

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

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

图形质量滑块

我们在虚拟 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

验证 AV1 是否正在使用中

注意:

要验证当前会话正在使用哪个视频编解码器,请运行下面提供的命令或者通过系统托盘检查显卡状态。

请运行以下命令来验证是否正在使用 AV1(0 表示未在使用。1 表示正在使用):

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

例如,结果可能类似于:

create -k "HKLM\Software\Citrix\Ica\Session\4\Graphics" -t "REG_DWORD" -v "AV1" -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

验证是否正在使用 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

检查正在使用哪种 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

验证 HDX 3D Pro 是否已启用

请运行以下命令以验证 HDX 3D Pro 是否已启用:

sudo /opt/Citrix/VDA/bin/ctxreg dump | grep ProductEdition

sudo /opt/Citrix/VDA/bin/ctxreg dump | grep StackSessionMode

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

启用了 HDX 3D Pro 时,结果类似于:

create -k "HKLM\Software\Citrix\VirtualDesktopAgent\State" -t "REG_SZ" -v "ProductEdition" -d "<PLT or ENT>" --force

create -k "HKLM\System\CurrentControlSet\Control\Citrix\WinStations\tcp" -t "REG_DWORD" -v "StackSessionMode" -d "0x00000000" --force

create -k "HKLM\System\CurrentControlSet\Control\Citrix" -t "REG_DWORD" -v "3DPro" -d "0x00000000" --force

要验证 HDX 3D Pro 所需的 NVIDIA 库是否已加载,请在 Linux VDA 上运行 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-->

验证是否正在对 3D Pro 使用硬件编码

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

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

使用 3D Pro 时,结果类似于:

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

确认 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,XenServer(以前称为 Citrix Hypervisor)本地控制台显示 ICA 桌面会话屏幕

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

[root@xenserver ~]# xe vgpu-param-set uuid=vgpu-uuid 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)(不支持呈现为此纹理(帧缓冲区不完整))。