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

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

我的一位教授向我们讲述了可扩展性问题,并表示 X 协议是不可扩展协议的一个典型例子。这是为什么?是因为它非常依赖硬件吗?我知道 X 用于现代 unix/linux 环境,如果它不可扩展,那么为什么它使用得如此广泛?

答案1

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

该协议在 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)

局域网主机

$ 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)

广域网主机

$ 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)

请注意以下位置的极端下降:

本地主机:

  12000 trep @   0.0049 msec (205000.0/sec): Create and map subwindows (200 kids)

局域网主机:

  12000 trep @   0.0196 msec ( 50900.0/sec): Create and map subwindows (200 kids)

广域网主机:

  12000 trep @   0.0586 msec ( 17100.0/sec): Create and map subwindows (200 kids)

这是性能的急剧下降。现在意识到这并不全是 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

生成的日志文件:

$ ll dump.log 
-rw-r--r-- 1 root root 5768821 Sep 16 22:30 dump.log

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

相关内容