X 窗口系统是否受到可扩展性的影响?

Set*_*hot 5 x11 protocols

我的一位教授告诉我们关于可扩展性问题,并说 X 协议是不可扩展协议的一个主要例子。这是为什么?是因为它非常依赖硬件吗?我知道 X 在现代 unix/linux 环境中使用,如果它不可扩展,为什么它使用如此广泛?

slm*_*slm 6

他可能这么说的一个原因是,如果您查看在客户端和服务器之间来回流动的流量,就会发现它相当冗长。当流量只需要在 2 之间的单个盒子上本地传输时,这不会出现问题,但是当流量需要通过网络连接时,那么它是一种低效协议变得更加明显。

该协议在 LAN 网络上是可以接受的,但是一旦您尝试通过 WAN 连接跨越它,或以 VPN 的形式引入加密或通过使用 SSH 连接作为客户端和服务器之间的链接,协议真正开始表明它缺乏可扩展性。

基准测试

您可以使用该工具x11perf来了解运行本地应用程序与通过与另一个 X 系统的 SSH 连接运行它们的影响。

在这里,我正在运行-create测试,让您体验一下我在说什么。

本地主机

$ x11perf -create
x11perf - X11 performance program, version 1.2
Fedora Project server version 10905000 on :0.0
from grinchy
Mon Sep 16 21:08:28 2013

Sync time adjustment is 0.1340 msecs.

   2400 reps @   0.0134 msec ( 74400.0/sec): Create and map subwindows (4 kids)
   2400 reps @   0.0156 msec ( 64300.0/sec): Create and map subwindows (4 kids)
   ....
   2400 reps @   0.0119 msec ( 83800.0/sec): Create and map subwindows (100 kids)
  12000 trep @   0.0063 msec (158000.0/sec): Create and map subwindows (100 kids)
   ....
   2400 reps @   0.0029 msec (349000.0/sec): Create and map subwindows (200 kids)
  12000 trep @   0.0049 msec (205000.0/sec): Create and map subwindows (200 kids)
Run Code Online (Sandbox Code Playgroud)

局域网主机

$ ssh skinner "x11perf -create"
....    
Sync time adjustment is 1.5461 msecs.

   2400 reps @   0.0270 msec ( 37100.0/sec): Create and map subwindows (4 kids)
   2400 reps @   0.0219 msec ( 45700.0/sec): Create and map subwindows (4 kids)
   ....
   2400 reps @   0.0168 msec ( 59600.0/sec): Create and map subwindows (100 kids)
  12000 trep @   0.0211 msec ( 47300.0/sec): Create and map subwindows (100 kids)
   ....
   2400 reps @   0.0159 msec ( 62900.0/sec): Create and map subwindows (200 kids)
  12000 trep @   0.0196 msec ( 50900.0/sec): Create and map subwindows (200 kids)
Run Code Online (Sandbox Code Playgroud)

广域网主机

$ ssh catbus-o "x11perf -create"
....
Mon Sep 16 21:12:22 2013

Sync time adjustment is 27.9911 msecs.

   2400 reps @   0.0592 msec ( 16900.0/sec): Create and map subwindows (4 kids)
   2400 reps @   0.0604 msec ( 16600.0/sec): Create and map subwindows (4 kids)
   ....
   2400 reps @   0.0538 msec ( 18600.0/sec): Create and map subwindows (100 kids)
  12000 trep @   0.0558 msec ( 17900.0/sec): Create and map subwindows (100 kids)
   ....
   2400 reps @   0.0697 msec ( 14400.0/sec): Create and map subwindows (200 kids)
  12000 trep @   0.0586 msec ( 17100.0/sec): Create and map subwindows (200 kids)
Run Code Online (Sandbox Code Playgroud)

请注意以下方面的极端下降:

本地主机:

  12000 trep @   0.0049 msec (205000.0/sec): Create and map subwindows (200 kids)
Run Code Online (Sandbox Code Playgroud)

局域网主机:

  12000 trep @   0.0196 msec ( 50900.0/sec): Create and map subwindows (200 kids)
Run Code Online (Sandbox Code Playgroud)

广域网主机:

  12000 trep @   0.0586 msec ( 17100.0/sec): Create and map subwindows (200 kids)
Run Code Online (Sandbox Code Playgroud)

这是性能的急剧下降。现在意识到这不全是 X 的错。它在 LAN 测试中通过 100MB 网络,在 WAN 测试中通过 ~20MB 连接,但要点仍然相同。X 并没有帮助自己解决它在 X 服务器和 X 客户端之间来回切换的过于强大的通信。

通信故障(无法抗拒 Led Zeppelin 参考)

这更多是为了效果,但只是为了让您了解在x11perf -create我上面使用的测试期间大致来回流动的数据量我决定再次在我的 LAN 主机上运行它,只是这次我用来tcpdump捕获 SSH流量,并将其转储到文件中。

我使用了这个命令:

$ sudo -i
$ tcpdump -lnni wlan0 -w dump.log -s 65535 host skinner and port ssh
Run Code Online (Sandbox Code Playgroud)

结果日志文件:

$ ll dump.log 
-rw-r--r-- 1 root root 5768821 Sep 16 22:30 dump.log
Run Code Online (Sandbox Code Playgroud)

因此,由此产生的流量约为 5.5MB。当然,这并不是所有的 X 流量,但它可以让您了解数据流的数量。这确实是 X 的致命弱点,也是它无法扩展的主要原因。