Pregunta:
Siempre que ejecuto de forma remota grandes GUI con reenvío X11, incluso con el conmutador -C, la experiencia no responde. Mi pregunta es, ¿qué causa esto a nivel de concepto / protocolo?
Con mi conexión de 25mbit, puedo transmitir video HD a mi computadora sin ningún problema. Por otro lado, la falta de respuesta de las GUI lanzadas de forma remota con reenvío X11 ocurre incluso en una LAN de 100mbit, donde la latencia debería ser cercana a cero.
Entiendo que, a diferencia de la transmisión de video, la latencia se duplicará en el mejor de los casos (ya que la entrada debe enviarse a la máquina remota y solo después de eso puede responder la aplicación), pero internamente, hay otros factores que aumentan la latencia incluso ¿más?
En segundo lugar, el ancho de banda. ¿Por qué se come tanto? Cuando se trata de formatos de imagen y video, se utilizan muchos métodos para reducir drásticamente el tamaño.
En el caso de .bmp vs.
En el caso de los videos, se puede guardar una gran cantidad de información enviando la diferencia entre los fotogramas en lugar de los fotogramas completos.
Sé que esto está muy simplificado, pero ¿X11 no usa estos métodos? ¿Se comporta en un mapa de bits o en un principio no diferencial en algún nivel? Y si no es así, ¿por qué ocupa tanto ancho de banda?
Respuesta:
El protocolo X11 nunca fue diseñado para manejar operaciones intensivas gráficamente (en términos de mapas de bits / texturas). En el día en que se diseñó X11 por primera vez, los gráficos por computadora eran mucho más simples de lo que son hoy.
Básicamente, X11 no envía la pantalla a su computadora, pero envía las instrucciones de visualización para que el servidor X en su computadora local pueda volver a crear la pantalla en su sistema local. Y esto debe hacerse en cada cambio / actualización de la pantalla.
Entonces, su computadora recibe un flujo de instrucciones como "dibuje una línea en este color desde las coordenadas x, y hasta (xx, yy), dibuje un rectángulo con W píxeles de ancho, H píxeles de alto con la esquina superior izquierda en (x, y), etc. "
El cliente local no es realmente consciente de lo que necesita actualizarse y el sistema remoto tiene muy poca información sobre lo que el cliente realmente necesita, por lo que básicamente el servidor debe enviar mucha información redundante que el cliente puede necesitar o no.
Esto es muy eficiente si la pantalla que se va a renderizar consta de un número limitado de formas gráficas simples y solo se necesita una frecuencia de actualización baja (sin animaciones, etc.). Ese fue el caso en los días en que se desarrolló por primera vez X11.
Pero las GUI modernas tienen mucho atractivo visual y gran parte de eso debe enviarse desde el sistema remoto a su cliente en forma de mapas de bits / texturas / fuentes que requieren bastante ancho de banda. Y todo tipo de atractivos para la vista incluye efectos animados que requieren actualizaciones frecuentes. Y las pantallas también se vuelven más grandes, el doble de ancho / alto es 4 veces la cantidad de píxeles.
Por supuesto, con el tiempo, se realizaron mejoras al protocolo X11 para optimizar esto tanto como fuera posible, pero el diseño básico subyacente, en esencia, simplemente no se adapta bien a las demandas del tipo de GUI que la gente espera hoy en día.
Otros protocolos (como RDP y VNC) están más diseñados para permitir que el sistema remoto haga todo el trabajo duro y que ese sistema decida qué actualizaciones enviar al cliente (como mapas de bits comprimidos) de la manera más eficiente posible. A menudo, eso resulta ser más eficiente para las GUI modernas.
Ninguno de los métodos es perfecto y puede hacer frente a todas las situaciones igualmente bien. No existe un único protocolo de visualización que pueda funcionar bien en todos los casos de uso imaginables.
Por lo tanto, en la mayoría de los casos, pruebe todos los protocolos que sean compatibles entre su cliente local y el servidor remoto y use el que ofrezca los mejores resultados. Y en algunos casos no hay otra opción y solo tienes que conformarte con lo que esté disponible.
La mayoría de los protocolos permiten algunos ajustes de rendimiento, pero muchas de estas configuraciones son solo del lado del servidor y no están disponibles para el usuario promedio. (Y configurarlos correctamente es un arte arcano. Muchos administradores de sistemas no estarán dispuestos a meterse con eso).
En la mayoría de los casos, la forma más fácil de mejorar el rendimiento (a veces de manera bastante espectacular) es cambiar a un entorno de escritorio más simple con menos atractivo visual y renunciar al uso de imágenes de fondo.