Um dos motivos pelos quais ele pode ter dito isso é que, se você observar o tráfego que flui entre um cliente e um servidor, ele será bastante detalhado. Isso não apresenta um problema quando o tráfego só precisa ir localmente em uma única caixa entre os 2, no entanto, quando o tráfego precisa passar por uma conexão de rede, fica mais óbvio que é um protocolo ineficiente.
O protocolo é tolerável em uma rede LAN, mas assim que você tentar estendê-lo por uma conexão WAN ou introduzir criptografia na forma de uma VPN ou usando uma conexão SSH como um link entre o cliente e o servidor , o protocolo realmente começa a mostrar a falta de escalabilidade.
Avaliação comparativa
Você pode usar a ferramenta x11perf
para ter uma noção do impacto da execução dos aplicativos localhosted vs. executá-los em uma conexão SSH com outro sistema X.
Aqui estou executando o teste -create
para dar a você uma amostra do que estou falando.
localhost
$ 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)
host da 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)
host 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)
Observe a queda extrema de:
localhost:
12000 trep @ 0.0049 msec (205000.0/sec): Create and map subwindows (200 kids)
host da LAN:
12000 trep @ 0.0196 msec ( 50900.0/sec): Create and map subwindows (200 kids)
Host da WAN:
12000 trep @ 0.0586 msec ( 17100.0/sec): Create and map subwindows (200 kids)
Esse é um declínio acentuado no desempenho. Agora perceba que isso não é tudo culpa do X. Ele está passando por uma rede de 100MB no teste de LAN e uma conexão de ~ 20MB para o teste de WAN, mas o ponto ainda é o mesmo. O X não está se ajudando com as comunicações excessivamente robustas que está jogando para trás e para frente entre o servidor X e o cliente X.
Falha na comunicação (não resistiu à referência do Led Zeppelin)
Isso é mais para efeito, mas apenas para dar uma ideia da quantidade de dados que flui para trás e para frente durante o teste x11perf -create
que usei acima. Decidi executá-lo novamente em meu host de rede local, só que desta vez Eu usei tcpdump
para capturar o tráfego SSH e despejo em um arquivo.
Eu usei este comando:
$ sudo -i
$ tcpdump -lnni wlan0 -w dump.log -s 65535 host skinner and port ssh
O arquivo de log resultante:
$ ll dump.log
-rw-r--r-- 1 root root 5768821 Sep 16 22:30 dump.log
Assim, a quantidade resultante de tráfego foi de aproximadamente 5,5MB. Concedido isso não é todo o tráfego X, mas dá uma idéia da quantidade de dados que flui. Este é realmente o calcanhar de Aquiles de X, e a principal razão pela qual ele não pode ser escalado.