为什么X11转发效率这么低?

为什么X11转发效率这么低?

每当我使用 X11 转发远程启动大型 GUI 时,即使包括 -C 开关,体验也非常迟钝。我的问题是,在概念/协议层面上,是什么导致了这种情况?

使用 25mbit 连接,我可以毫无问题地将高清视频传输到我的电脑。另一方面,使用 X11 转发远程启动的 GUI 即使在 100mbit LAN 上也会无响应,而延迟应该接近于零。

我理解与视频流相比,延迟最多会增加一倍(因为输入需要发送到远程机器,只有这样应用程序才能响应),但在内部,是否还有其他因素会进一步增加延迟?

其次,带宽。为什么会占用这么多带宽?对于图片和视频格式,人们使用了很多方法来大幅减小尺寸。

以 .bmp 与 .png 为例,一个大的黑色方形图像在 .png 表示中占用的空间要小得多,因为据我所知,信息不是针对每个像素存储的,而是以范围的方式存储的。

对于视频来说,通过发送帧之间的差异而不是整个帧可以保存大量信息。

我知道这非常简单,但是 X11 不使用这些方法吗?它在某种程度上是否以位图或无差分原理运行?如果不是,为什么它会占用这么多带宽?

答案1

X11 协议从未打算处理图形(就位图/纹理而言)密集型操作。X11 最初设计时,计算机图形比现在简单得多。

基本上,X11 不会将屏幕发送到您的计算机,但它会发送显示指令,以便本地计算机上的 X 服务器可以在本地系统上重新创建屏幕。每次更改/刷新显示时都需要执行此操作。
因此,您的计算机会收到一系列指令,例如“用此颜色从坐标 x,y 到 (xx,yy) 画一条线,画一个 W 像素宽、H 像素高的矩形,左上角位于 (x,y),等等。”
本地客户端并不知道需要更新什么,而远程系统对客户端实际需要的信息非常少,因此基本上服务器必须发送大量客户端可能需要或不需要的冗余信息。
如果要呈现的显示由有限数量的简单图形形状组成,并且只需要较低的刷新频率(没有动画等),则这种方法非常有效。X11 刚开发时就是这样的。

但是现代 GUI 有很多视觉效果,其中很多都需要以位图/纹理/字体的形式从远程系统发送到您的客户端,这会占用大量带宽。而且各种视觉效果包括需要频繁更新的动画效果。而且显示屏也越来越大,宽度/高度是原来的两倍,像素数是原来的 4 倍。

当然,随着时间的推移,X11 协议得到了尽可能的优化,但其基本的底层设计本质上并不适合当今人们对 GUI 的要求。

其他协议(如 RDP 和 VNC)的设计更倾向于让远程系统完成所有繁重的工作,并让该系统尽可能高效地决定将哪些更新(作为压缩位图)发送到客户端。通常,这对于现代 GUI 来说更为高效。

这两种方法都不是完美的,它们可以同样好地处理所有情况。没有一种显示协议可以在所有可能的用例下表现良好。
因此,在大多数情况下,您只需尝试本地客户端和远程服务器之间支持的所有协议,并使用效果最好的协议。在某些情况下,您别无选择,只能使用任何可用的协议。

大多数协议确实允许进行一些性能调整,但其中许多设置仅限于服务器端,普通用户无法使用。(正确配置它们有点神秘。许多系统管理员不愿意弄乱这一点。)

在大多数情况下,提高性能的最简单方法(有时非常显著)是切换到更简单的桌面环境,减少视觉效果,并放弃使用背景图像。

答案2

X11 连接速度慢的主要原因有两个,您在问题中都提到了这两个原因:带宽和延迟。要了解 X11 应用程序在网络上运行速度慢的原因,让我们讨论这两个问题。

带宽

默认情况下,X11 不会对在应用程序和显示服务器之间传递的网络数据进行任何压缩。正如您所提到的,您可以在 SSH 上使用 -C 选项来启用压缩,虽然这确实有帮助,但它并未针对压缩图形数据进行优化。与可以获得 100 比 1 压缩率的 H.264 等格式相比,-C 压缩将很幸运地实现 2 比 1 的压缩率。更好的解决方案是使用针对 X11 视频的图形或视频优化编解码器,但我们必须注意不要使其损失太大,因为桌面通常需要比电影更清晰的图像,以便用户仍然可以清楚地阅读文本并辨别出精细的细节。

潜伏

X11 往往具有较高的延迟,因为大多数操作都需要在应用程序和显示服务器之间进行多次往返。在 ping 时间少于一毫秒的 LAN 上运行时,这些多次往返并不明显,但在互联网连接上,它们会迅速累积起来。

解决方案

几年前,有几个项目旨在解决 X11 协议固有的带宽和延迟问题。lbx(低带宽 X)和 dxpc(差分 X 协议压缩器)。我认为 lbx 并没有得到太多关注,但 dxpc 成为了一款名为NXNX 使用有损压缩来降低带宽要求,并使用差分算法和缓存来减少造成高延迟的来回信息传递次数。我经常使用 NX,发现其性能几乎与本地应用程序一样好。如果您愿意,您可以尝试 NX,看看它是否适合您。缺点是它需要在连接的两端安装软件,而 X11 通常已经安装。

相关内容