通过25兆位的连接,我可以毫无问题地将高清视频流传输到计算机上。另一方面,具有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而言,这通常更为有效。
两种方法都不是完美的,不能平等地处理每种情况。没有一个单一的显示协议可以在每种可能的用例中都很好地发挥作用。
因此,在大多数情况下,您只需尝试本地客户端和远程服务器之间支持的所有协议并使用该协议即可。效果最佳。在某些情况下,别无选择,您只需要处理可用的内容即可。
大多数协议的确允许进行一些性能调整,但是其中许多设置仅在服务器端使用,无法用于普通用户。 (并且对它们进行正确配置是一种不可思议的技巧。许多系统管理员都不愿对此进行改动。)
在大多数情况下,提高性能的最简单方法(有时显着)是通过切换到更简单的桌面环境而减少了对眼睛的迷惑并放弃了使用背景图片。
评论
+1因为提到了RDP和VNC,所以我还应该提到x2go,它是X11缓存/转发解决方案,可以真正加快X11转发的速度。我过去曾经成功使用过它。
–种族
17年6月9日10:00
关于结尾处的“仅服务器端设置”,请回想一下X服务器在与物理显示器相连的计算机上运行,并且X客户端是用于执行某些任务的软件(例如,Web浏览器或文字处理器) )。因此,连接到远程系统的用户可以访问X服务器设置,以运行图形应用程序。但是,这不会显着降低您的答案的价值。
–用户
17年9月9日在11:21
从技术上讲,该协议是RFB,而不是VNC。
–橙色狗
17年9月9日在13:38
我错了吗?还是在第二段中混淆了客户端和服务器?客户端是远程运行的程序,服务器是本地计算机。
–乔纳斯·谢弗(JonasSchäfer)
17年6月9日在15:42
在1990年代,由于运行X服务器的计算机开始具有足够的内存以使后备存储成为现实,因此您在第三段中所讨论的内容大为缓解。
– Blfl
17年6月10日在17:26
#2 楼
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通常已经安装。
评论
与延迟主题相关的是,对于大多数流视频,X11将是TCP,而UDP是。还有其他一些产品可帮助远程工作。托尼提到RDP和VNC。甲骨文仍在销售运行良好的Sun Global Desktop(SGD)。 Citrix拥有某些功能(XenApp?)。我们的评估发现SGD是满足我们需求的更好选择,但之前曾使用过两种Citrix产品。
–sleepyweasel
17年6月8日在22:00
即使使用“服务器”旧笔记本电脑,x2go的工作对我来说也很好。在几分钟内启动并运行... X11 fwd的性能大大提高(不适用于我的配置)
– comte
18年2月15日在17:38
在延迟方面,在* ix机器上,到本地显示器的X11会话通常使用Unix域套接字而不是TCP; Unix域套接字在往返时甚至比TCP快许多倍,甚至到本地主机stackoverflow.com/questions/14973942/…。对于病理上往返次数非常多的X11应用程序,这可能是正常性能和明显慢的性能之间的区别。
– rakslice
19年2月2日在4:15
我对X11并不了解,但是我猜是否像GTK / Qt这样的库是否可能是导致远程工作缓慢的另外原因?
– i486
20年6月17日在11:25
啊,我从不知道NX的背景知识。我一直对它的速度感到惊讶。我只是希望它成为主流,因为它看起来不再受到更多关注。
–格里
20/07/25在15:32
评论
Trivia:Xpra提供了一种有趣的方法。顺便说一句-如果链接速度足够快,则使用“ -C”会减慢连接速度,因为压缩需要时间。 “ -C”可能有益于100Mb,但可能损害1Gb,当然也损害10Gb。同样,“ ssh”会损害您的吞吐量-快速链接上的任何加密也会损害您的吞吐量。如果计算机之间存在直接连接或安全的内部链接,请通过TCP:6000直接进行X连接。您将获得明显的速度改进。
听起来您正在通过SSH转发,而SSH必须加密/解密所有数据。这将增加开销/延迟。更快的处理器可能会有所帮助,但是无论您做什么,都会增加一定量的延迟。 X非常“闲谈”,因此延迟稍有增加=性能显着下降。过去,我能够使用通过28.8调制解调器通过SSH隧道传输的X。那是使用lbxproxy(现已弃用),该缓存/压缩了大量数据并减少了连接的“简洁性”。使用-C只会增加更多延迟。
使用类似ssh -Y -c blowfish之类的东西可以最大程度地减少开销,同时仍进行加密。如果您完全控制两端,请教ssh使用“无”加密来获得连接的完整传输速度。