O encaminhamento SSH X11 é extremamente lento em VPN

3

Estou usando uma VPN (com OpenVPN) para manter o acesso entre os computadores da minha casa e do trabalho, e hoje tentei encaminhar um aplicativo que é somente GUI e descobri que isso é terrivelmente lento. Eu usei o SSH X11 antes, e de fato tem latência, mas entre esses dois hosts é muito grande. Demora cerca de 20 segundos entre o clique de um botão e a saída sendo mostrada na máquina local.

Eu tenho rtt min/avg/max/mdev = 84.393/86.858/91.297/3.163 ms latency entre esses dois hosts, e a conexão SSH me dá cerca de 1,2MiB / s, o que eu acho que deve ser mais que suficiente: \

Estou usando -YCX e experimentei experimentalmente com e sem Y e C (o openvpn já compacta coisas com lzo), bem como diferentes cifras, com resultados semelhantes.

Estou começando a pensar que pode ser o tema do GTK, que pode ser muito pesado ou algo assim.

Alguém sabe se isso é normal e o que eu poderia fazer para obter menos latência? (3-5s poderia ser suportável, mas 20 é demais)

    
por Roberto Santalla 25.01.2016 / 12:52

1 resposta

4

O problema com o encaminhamento contemporâneo X (não aquele "antigo" X quando a transparência de rede foi inventada) é com suavização de fonte: para suavizar cada glifo do texto renderizado em alguma superfície, o servidor X precisa obter o bitmap que está localizado sob a caixa delimitadora desse glifo do cliente que deseja renderizar esse glifo. (Isso é necessário para que o algoritmo de suavização funcione corretamente, pois leva o contexto no qual o glifo é renderizado.)

Por isso, com kits de ferramentas GUI contemporâneos, a quantidade de tráfego entre o servidor X e seus clientes é enorme: você pode ver isso ativando o TCP em seu servidor X local (esses dias normalmente são iniciados com -nolisten tcp ) e forçar algum cliente X baseado em GTK ou Qt a falar com o servidor via TCP:

$ DISPLAY=localhost:x11 /usr/bin/that/x-app

(consulte grep x11 </etc/services para as portas padrão do servidor X). Você notará imediatamente como o cliente se comporta lentamente, mesmo que o tráfego X não esteja deixando o host local: simplesmente porque o tráfego X é transportado por um soquete do domínio Unix que basicamente apenas copia bytes entre buffers na memória, sobrecarga, e agora percorre toda a pilha TCP / IP com todas as suas filas e lógica complicada. Agora, considere o que acontece quando esse tráfego é enviado no seu caso - agrupado em três camadas de protocolos de transferência de dados: túnel SSH transportado por túnel VPN transportado por TCP / IP transportado pela conexão.

Quanto ao que fazer sobre isso, não tenho tanta certeza.

Com mosh estando fora do jogo , eu tentaria jogar com o IPQoS opção do cliente OpenSSH.

Outra abordagem é atacar o problema de outro ângulo: tente o acesso baseado em VNC ao seu aplicativo. As opções variam aqui:

  • Você pode começar simplesmente exportando toda a exibição por x11nvc ou algo assim.
  • Use pacotes de software que possam "exportar" aplicativos ou janelas específicas - Xpra e winswitch .
  • Tente uma solução mais pesada e completa, como X2Go .
por 25.01.2016 / 13:29