Chaque fois que je lance à distance de grandes interfaces graphiques avec un transfert X11, même avec le commutateur -C, l'expérience est très insensible. Ma question est la suivante: qu'est-ce qui se passe au niveau concept / protocole?
Avec ma connexion à 25 Mbits, je peux diffuser de la vidéo HD sur mon ordinateur sans aucun problème. D'autre part, le manque de réactivité des interfaces utilisateur graphiques lancées à distance avec transfert X11 se produit même sur un réseau local à 100 mbits, où la latence devrait être proche de zéro.
Je comprends que, contrairement au streaming vidéo, la latence sera au mieux doublée (car l’entrée doit être envoyée à la machine distante et c’est seulement après que l’application peut répondre), mais en interne, existe-t-il d’autres facteurs qui augmentent la latence même plus loin?
Deuxièmement, la bande passante. Pourquoi en mange-t-il tant? En ce qui concerne les formats d'image et de vidéo, de nombreuses méthodes sont utilisées pour réduire considérablement la taille.
Dans le cas de .bmp vs .png, par exemple, une grande image en carré noir prendra beaucoup moins en représentation .png car les informations ne sont pas stockées pour chaque pixel, mais de manière très variable, à ma connaissance.
Dans le cas de vidéos, beaucoup d'informations peuvent être sauvegardées en envoyant la différence entre les images plutôt que les images entières.
Je sais que cela est très simplifié, mais X11 n’utilise-t-il pas ces méthodes? Est-ce que cela se comporte dans un principe bitmap-ish ou non différentiel à un certain niveau? Et si non, pourquoi utilise-t-il autant de bande passante?
la source
ssh -Y -c blowfish
pour minimiser les frais généraux tout en chiffrant. Si vous avez le contrôle total des deux bouts, apprenez à ssh à utiliser le chiffrement "aucun" pour obtenir une vitesse de transfert maximale sur la connexion.Réponses:
Le protocole X11 n'a jamais été conçu pour gérer des opérations intensives sur le plan graphique (en termes de bitmaps / textures). À l'époque où X11 a été conçu, les images de synthèse étaient bien plus simples qu'aujourd'hui.
Fondamentalement, X11 n'envoie pas l'écran à votre ordinateur, mais envoie les instructions d'affichage afin que le serveur X de votre ordinateur local puisse recréer l'écran sur votre système local. Et cela doit être fait à chaque changement / rafraîchissement de l'affichage.
Ainsi, votre ordinateur reçoit un flux d’instructions du type "tracer une ligne dans cette couleur à partir des coordonnées x, y jusqu'à (xx, yy), tracer un rectangle de W pixels de large, H pixels de hauteur avec le coin supérieur gauche en (x, y), etc. "
Le client local ne sait pas vraiment ce qui doit être mis à jour et le système distant ne dispose que de très peu d'informations sur ses besoins. Par conséquent, le serveur doit envoyer un grand nombre d'informations redondantes dont le client peut ou non avoir besoin.
Ceci est très efficace si l'affichage à restituer consiste en un nombre limité de formes graphiques simples et qu'une faible fréquence de rafraîchissement (sans animations et autres) est nécessaire. Ce qui était le cas à l'époque du développement de X11.
Mais les interfaces graphiques modernes ont beaucoup de succès et une grande partie de cela doit être envoyée du système distant à votre client sous forme de bitmaps / textures / polices qui consomment beaucoup de bande passante. Et toutes sortes de friandises pour les yeux incluent des effets animés nécessitant des mises à jour fréquentes. Et les écrans ne cessent de grossir aussi, deux fois plus large / haut, c'est 4x le nombre de pixels.
Bien sûr, au fil du temps, le protocole X11 a été amélioré pour l'optimiser autant que possible, mais la conception de base sous-jacente n'est, par essence, tout simplement pas bien adaptée aux exigences du type de personnel attendu par les utilisateurs de l'interface graphique.
D'autres protocoles (tels que RDP et VNC) sont davantage conçus pour permettre au système distant de faire tout le travail et de laisser le système décider des mises à jour à envoyer au client (sous forme de bitmaps compressés) aussi efficacement que possible. Cela s'avère souvent plus efficace pour les interfaces graphiques modernes.
Aucune des méthodes n'est parfaite et ne peut traiter toutes les situations de la même manière. Il n’existe pas de protocole d’affichage unique qui puisse fonctionner dans tous les cas d’utilisation imaginables.
Ainsi, dans la plupart des cas, il vous suffit d'essayer tous les protocoles pris en charge entre votre client local et le serveur distant et d'utiliser celui qui donne les meilleurs résultats. Et dans certains cas, il n'y a pas de choix et il suffit de se débrouiller avec tout ce qui est disponible.
La plupart des protocoles permettent un certain réglage des performances, mais bon nombre de ces paramètres sont uniquement côté serveur et ne sont pas disponibles pour l'utilisateur moyen. (Et les configurer correctement est un peu un art mystérieux. Un grand nombre d'administrateurs système ne voudront pas jouer avec cela.)
Dans la plupart des cas, le moyen le plus simple d’améliorer les performances (parfois de façon spectaculaire) consiste à passer à un environnement de bureau plus simple, avec moins de vertige et l’abandon des images d’arrière-plan.
la source
Il y a principalement deux raisons pour lesquelles les connexions X11 sont lentes. Vous avez toutes les deux évoqué votre question: la bande passante et la latence. Pour comprendre pourquoi les applications X11 sont lentes sur un réseau, examinons ces deux points.
Bande passante
X11, par défaut, n'effectue aucune compression sur les données réseau transmises entre l'application et le serveur d'affichage. Comme vous l'avez mentionné, vous pouvez utiliser l'option -C sur SSH pour activer la compression. Bien que cela aide, elle n'est pas optimisée pour la compression des données graphiques. Par rapport aux formats tels que H.264, qui peuvent obtenir des taux de compression de 100 à 1, la compression -C aura la chance d’obtenir une compression de 2 à 1. Une meilleure solution consiste à utiliser un codec optimisé pour les graphiques ou les vidéos pour la vidéo X11, mais vous devez faire attention à ne pas le perdre car les ordinateurs de bureau ont généralement besoin d’images plus nettes qu’un film pour que l’utilisateur puisse toujours lire clairement le texte. faire des détails fins.
Latence
X11 a tendance à avoir une latence élevée car la plupart des opérations nécessitent plusieurs allers-retours entre l'application et le serveur d'affichage. Lorsqu'ils sont exécutés sur un réseau local (LAN) où les temps de ping mesurent moins d'une milliseconde, ces allers-retours multiples ne sont pas perceptibles, mais s'ajoutent rapidement via une connexion Internet.
Solutions
Il y a plusieurs années, quelques projets ont été élaborés pour résoudre les problèmes de bande passante et de latence inhérents au protocole X11. lbx (bande passante réduite X) et dxpc (compresseur de protocole différentiel X). Je ne pense pas que lbx ait jamais eu beaucoup d’adhérence, mais dxpc est devenue la technologie sous-jacente utilisée pour un produit appelé NX . NX utilise à la fois une compression avec perte pour réduire les besoins en bande passante et un algorithme différentiel et une mise en cache pour réduire le nombre d'informations échangées qui créent la latence élevée. J'ai souvent utilisé NX et trouve que les performances sont presque aussi bonnes que celles des applications locales. Si vous vous sentez à la hauteur, essayez NX et voyez si cela vous convient. L'inconvénient est qu'il nécessite l'installation d'un logiciel aux deux extrémités de la connexion, alors que X11 est généralement déjà installé.
la source