教授の一人はスケーラビリティの問題について話し、Xプロトコルは拡張不可能なプロトコルの典型的な例であると述べました。なぜそんなことですか?ハードウェアに大きく依存しているからでしょうか? Xが最新のUnix / Linux環境で使用されていることを知っています。 Xがスケーラブルでない場合、なぜそんなに広く使われていますか?
答え1
彼がそう言う理由の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)
LANホスト
$ 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)
WANホスト
$ 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)
LANホスト:
12000 trep @ 0.0196 msec ( 50900.0/sec): Create and map subwindows (200 kids)
WANホスト:
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
これは効果に近いですが、上で使用したテスト中におよそどれだけのデータが前後に流れているかを知らせるためにtcpdump
LANホストで再実行することにしました。 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.5 MBです。もちろん、これはXトラフィックはすべてではありませんが、トラフィック量のアイデアを提供します。これが実際にXのアキレス銃であり、拡張されない主な理由です。