为什么X11转发如此低效?


97

每当我远程启动具有X11转发功能的大型GUI(甚至包括-C开关)时,体验都将变得毫无反应。我的问题是,在概念/协议级别上是什么引起的?

通过25兆位的连接,我可以毫无问题地将高清视频流传输到计算机上。另一方面,具有X11转发功能的远程启动GUI的无响应甚至发生在100mbit的LAN上,其延迟应该接近于零。

我了解,与视频流相反,延迟最多将增加一倍(因为需要将输入发送到远程计算机,然后应用才能响应),但是在内部,还有其他因素甚至会增加延迟进一步?

其次,带宽。为什么会吃那么多呢?当涉及图片和视频格式时,可以使用许多方法来大大减小尺寸。

例如,在.bmp与.png的情况下,大的黑色正方形图像在.png表示中所占的比例会减少,因为信息不是为每个像素存储的,而是按照我所知的范围。

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

我知道这非常简化,但是X11是否不使用这些方法?它在某种程度上表现为位图式还是非差分式?如果不是,那为什么要占用这么多带宽?


9
Trivia:Xpra提供了一种有趣的方法。
卡米尔Maciorowski

12
顺便说一句-如果链接速度足够快,则使用“ -C”会减慢您的连接速度,因为压缩需要时间。“ -C”可能有益于100Mb,但可能损害1Gb,当然也损害10Gb。同样,“ ssh”会损害您的吞吐量-快速链路上的任何加密也会如此。如果计算机之间存在直接连接或安全的内部链接,请通过TCP:6000直接进行X连接。您将获得明显的速度改进。
Astara

2
听起来您正在通过SSH转发,而SSH必须加密/解密所有数据。这将增加开销/延迟。更快的处理器可能会有所帮助,但是无论您做什么,都会增加一定量的延迟。X非常“闲谈”,因此延迟稍有增加=性能显着下降。过去,我能够使用通过28.8调制解调器通过SSH隧道传输的X。使用lbxproxy(现已弃用)的文件,该文件缓存/压缩了大量数据并减少了连接的“简洁性”。使用-C只会增加更多延迟。
Meower68 '17

使用类似的方法ssh -Y -c blowfish来最小化开销,同时仍进行加密。如果您完全控制两端,请教ssh使用“无”加密来获得连接的完整传输速度。
托尔比约恩Ravn的安德森

Answers:


116

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

基本上,X11不会将屏幕发送到您的计算机,但会发送显示指令,以便本地计算机上的X服务器可以在本地系统上重新创建屏幕。这需要在每次更改/刷新显示时完成。
因此,您的计算机会收到一条指令流,例如“以这种颜色从坐标x,y到(xx,yy)画线,画出W像素宽的矩形,H像素高的像素,在(x,y)的左上角绘制等。 ”
本地客户端并不真正知道需要更新什么,并且远程系统几乎没有关于客户端实际需要的信息,因此,基本上,服务器必须发送大量客户端可能需要或不需要的冗余信息。
如果要渲染的显示由有限数量的简单图形形状组成,并且仅需要低刷新频率(不需要动画等),则此方法非常有效。X11最初被开发时就是这种情况。

但是现代GUI具有很多优势,其中许多需要以位图/纹理/字体的形式从远程系统发送到客户端,这需要占用大量带宽。并且各种眼神糖果都包含需要频繁更新的动画效果。而且显示器也不断变大,宽度/高度的两倍是像素数的4倍。

当然,随着时间的流逝,对X11协议进行了增强,以尽可能地优化它,但是从根本上说,基本的底层设计根本不适合当今GUI用户的需求。

其他协议(如RDP和VNC)的设计更多地是为了让远程系统完成所有艰苦的工作,并让该系统尽可能高效地决定将哪些更新发送给客户端(作为压缩位图)。通常,对于现代GUI而言,这通常更为有效。

两种方法都不是完美的,不能平等地处理每种情况。没有一个单一的显示协议可以在每种可能的用例下都能很好地完成任务。
因此,在大多数情况下,您只需尝试在本地客户端和远程服务器之间支持的所有协议,然后使用提供最佳结果的协议即可。在某些情况下,别无选择,您只需要解决所有可用的问题。

大多数协议都允许进行一些性能调整,但是其中许多设置仅在服务器端使用,普通用户无法使用。(并且正确地配置它们是一种不可思议的技巧。许多系统管理员都不愿意为此烦恼。)

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


15
+1因为提到了RDP和VNC,所以我还应该提到x2go,它是X11缓存/转发解决方案,可以真正加快X11转发的速度。我过去曾经成功地使用过它。
rath

7
关于结尾处的“仅服务器端设置”,请回想一下X 服务器在与物理显示器相连的计算机上运行,​​并且X 客户端是用于执行某些任务的软件(例如,Web浏览器或文字处理器) )。因此,连接到远程系统的用户可以访问X服务器设置,以运行图形应用程序。但是,这不会显着降低您的答案的价值。
CVn

2
从技术上讲,该协议是RFB,而不是VNC。
OrangeDog

6
我错了吗?还是在第二段中混淆了客户端和服务器?客户端是远程运行的程序,服务器是本地计算机。
乔纳斯·谢弗

2
第三段中介绍的内容在1990年代得到了很大程度的缓解,因为运行X服务器的计算机开始具有足够的内存以使后备存储成为一件切实可行的事情。
Blrfl

45

X11连接缓慢主要有两个原因,您在问题中都谈到了这两个原因:带宽和延迟。要了解X11应用程序为什么在网络上运行缓慢,我们来讨论这两个。

带宽

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

潜伏

X11往往具有较高的延迟,因为大多数操作都需要在应用程序和显示服务器之间进行多次往返。当在ping时间不到一毫秒的LAN上运行时,这些多次往返并不明显,但是在Internet连接上它们会迅速增加。

解决方案

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


3
与延迟主题相关的是,对于大多数流视频,X11将是TCP,而UDP是。还有其他一些产品可帮助远程工作。托尼提到RDP和VNC。甲骨文仍在销售运行良好的Sun Global Desktop(SGD)。Citrix有一些东西(XenApp?)。我们的评估发现SGD是满足我们需求的更好选择,但之前曾使用过两种Citrix产品。
sleepyweasel

即使使用“服务器”旧笔记本电脑,x2go的工作对我来说也很好。向上和在几分钟内运行......大的性能提升,从X11 FWD(不可与我的配置)
孔德

在延迟方面,在* ix机器上,到本地显示器的X11会话通常使用Unix域套接字而不是TCP;Unix域套接字比TCP更快的往返多次,甚至为localhost stackoverflow.com/questions/14973942/...。对于病理上往返次数非常多的X11应用程序,这可能是正常性能和明显慢的性能之间的区别。
rakslice
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.