Question Pourquoi le transfert X11 est-il si inefficace?


Chaque fois que je lance à distance de grandes interfaces graphiques avec le transfert X11, même avec le commutateur -C, l'expérience est très peu sensible. Ma question est la suivante: qu'est-ce que cela cause 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'un autre côté, le manque de réponse des interfaces graphiques lancées à distance avec le transfert X11 se produit même sur un réseau local de 100 Mbits, où la latence devrait être proche de zéro.

Je comprends que, contrairement à la diffusion vidéo en continu, la latence sera au mieux doublée (car l’entrée doit être envoyée à la machine distante et seulement après que l’application puisse répondre), mais en interne, existe-t-il d’autres facteurs qui augmentent la latence? plus loin?

Deuxièmement, la bande passante. Pourquoi en mange-t-il tellement? En ce qui concerne les formats d'image et de vidéo, de nombreuses méthodes permettent de réduire considérablement la taille.

Dans le cas de .bmp vs .png, par exemple, une grande image carrée noire sera beaucoup moins présente dans la représentation .png car les informations ne sont pas stockées pour chaque pixel, mais dans une mesure aussi large que possible.

Dans le cas des vidéos, de nombreuses informations peuvent être enregistrées en envoyant la différence entre les images plutôt que les images entières.

Je sais que c'est très simplifié, mais X11 n'utilise-t-il pas ces méthodes? Se comporte-t-il dans un principe bitmap-ish ou non différentiel à un certain niveau? Et sinon, pourquoi prend-il autant de bande passante?


77
2018-06-08 13:26


origine


Trivia: Xpra offre une approche intéressante. - Kamil Maciorowski
BTW - utiliser "-C" ralentira votre connexion si votre lien est assez rapide car la compression prend du temps. "-C" pourrait profiter à 100 Mo, mais probablement nuire à 1 Go, et certainement nuire à 10 Go. Il est également vrai que "ssh" nuira à votre débit, de même que tout chiffrement sur des liens rapides. Si vous avez une connexion directe entre des ordinateurs ou une liaison interne sécurisée, rendez-vous directement avec votre connexion X via TCP: 6000. Vous obtiendrez une amélioration sensible de la vitesse. - Astara
On dirait que vous transmettez via SSH, qui doit chiffrer / déchiffrer toutes les données. Cela va ajouter une surcharge / latence. Des processeurs plus rapides peuvent vous aider, mais une certaine latence s'ajoutera, peu importe ce que vous faites. X est très "bavard", donc une légère augmentation de la latence = baisse significative des performances. Dans le passé, j'étais capable d'utiliser X, tunnelé via SSH sur un modem 28,8; qui utilisait lbxproxy (maintenant obsolète) qui mettait en cache / compressait beaucoup de données et réduisait le "bavardage" de la connexion. L'utilisation de -C ne peut ajouter que plus de latence. - Meower68
Utilisez quelque chose comme ssh -Y -c blowfish pour minimiser les frais généraux tout en chiffrant. Si vous avez le contrôle total des deux extrémités, apprenez à ssh à utiliser le cryptage "none" pour obtenir une vitesse de transfert complète sur la connexion. - Thorbjørn Ravn Andersen


Réponses:


Le protocole X11 n'a jamais été conçu pour gérer graphiquement (en termes de bitmaps / textures) des opérations intensives. À l’époque où X11 était le premier à être conçu, l’infographie était beaucoup plus simple qu’aujourd’hui.

Fondamentalement, X11 n'envoie pas l'écran à votre ordinateur, mais envoie les instructions d'affichage pour 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 comme "tracez une ligne de cette couleur à partir des coordonnées x, y à (xx, yy), dessinez le rectangle W de largeur, H pixels haut avec le coin supérieur gauche à (x, y), etc. "
Le client local ne sait pas vraiment ce qui doit être mis à jour et le système distant dispose de très peu d'informations sur les besoins réels du client. Le serveur doit donc envoyer beaucoup d'informations redondantes dont le client peut avoir besoin ou non.
Ceci est très efficace si l'affichage doit être composé d'un nombre limité de formes graphiques simples et qu'une faible fréquence de rafraîchissement (pas d'animation, etc.) est nécessaire. Ce qui était le cas à l'époque où X11 était développé pour la première fois.

Mais les interfaces graphiques modernes sont très agréables et la plupart d’entre elles doivent être envoyées du système distant à votre client sous la forme de bitmaps, de textures et de polices qui demandent beaucoup de bande passante. Et toutes sortes de bonbons pour les yeux comprennent des effets animés nécessitant de fréquentes mises à jour. Et les affichages continuent à grossir aussi, deux fois plus large / haut que 4 fois le nombre de pixels.

Bien sûr, au fil du temps, des améliorations ont été apportées au protocole X11 afin de l’optimiser au maximum, mais la conception sous-jacente de base n’est tout simplement pas adaptée aux exigences du type d’interface graphique.

D'autres protocoles (tels que RDP et VNC) sont plus conçus pour permettre au système distant de faire tout le travail et laisser ce système décider des mises à jour à envoyer au client (sous forme de bitmaps compressés) aussi efficacement que possible. Souvent, cela s'avère plus efficace pour les interfaces graphiques modernes.

Aucune de ces méthodes n'est parfaite et peut traiter toutes les situations de la même manière. Il n’existe pas de protocole d’affichage unique capable de répondre à tous les cas d’utilisation imaginables.
Donc, 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 contenter de tout ce qui est disponible.

La plupart des protocoles autorisent une certaine optimisation des performances, mais la plupart 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. Beaucoup d'administrateurs de système ne seront pas prêts à jouer avec ça.)

Dans la plupart des cas, le moyen le plus simple d’améliorer les performances (parfois de manière spectaculaire) consiste à passer à un environnement de bureau plus simple avec moins de problèmes visuels et à ne plus utiliser d’images d’arrière-plan.


100
2018-06-08 14:31



+1 Comme RDP et VNC sont mentionnés, je devrais également mentionner x2go qui est une solution X11 de mise en cache / transfert qui accélère vraiment le transfert X11. Je l'ai utilisé avec succès dans le passé. - rath
En ce qui concerne les "paramètres côté serveur uniquement" vers la fin, rappelez-vous que le X serveur s'exécute sur l'ordinateur qui est connecté à l'affichage physique, et le X client est le logiciel utilisé pour exécuter certaines tâches (par exemple un navigateur Web ou un traitement de texte). Les paramètres du serveur X seraient donc accessibles à l'utilisateur qui se connecte au système distant pour pouvoir exécuter une application graphique. Cela ne diminue toutefois pas de manière significative la valeur de votre réponse. - Michael Kjörling
Techniquement le protocole est RFB, pas VNC. - OrangeDog
Est-ce que je me trompe ou est-ce que vous confondez le client et le serveur dans votre deuxième paragraphe? Le client est le programme exécuté à distance, le serveur est l'ordinateur local. - Jonas Wielicki
Selon mes tests, RDP n'est pas plus rapide que X11. VNC est dans de nombreux cas parce que sa capacité de suppression de trame empêche les applications d'être ralenties par des cadrages de fréquence limitant la bande passante. - Joshua


Il y a principalement deux raisons pour que les connexions X11 soient lentes, que vous avez toutes deux abordées dans votre question: la bande passante et la latence. Pour comprendre pourquoi les applications X11 sont lentes sur un réseau, discutons-en les deux.

Bande passante

X11, par défaut, ne fait 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 à des formats comme H.264 qui peuvent obtenir des taux de compression de 100 à 1, la compression -C aura de la chance d’atteindre 2 à 1 compression. Une meilleure solution consiste à utiliser un codec optimisé pour la vidéo X11, graphique ou vidéo, mais nous devons faire attention à ne pas le perdre, car les ordinateurs de bureau doivent généralement avoir des images plus nettes qu'un film. faire de beaux détails.

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 où les temps de réponse au ping sont inférieurs à une milliseconde, ces allers-retours multiples ne sont pas perceptibles, mais sur une connexion Internet, ils s'additionnent rapidement.

Solutions

Il y a quelques années, deux projets ont été mis au point pour résoudre les problèmes de bande passante et de latence inhérents au protocole X11. lbx (bande passante faible X) et dxpc (compresseur de protocole différentiel X). Je ne pense pas que lbx ait eu beaucoup de succès, mais dxpc est devenue la technologie sous-jacente utilisée pour un produit appelé NX. NX utilise à la fois la compression avec perte pour réduire les besoins en bande passante et un algorithme différentiel et la mise en cache pour réduire le nombre de passages d'informations successifs générant une latence élevée. J'ai souvent utilisé NX et je trouve que les performances sont presque aussi bonnes que les applications locales. Si vous vous sentez à la hauteur, vous pourriez essayer NX et voir si cela fonctionne pour vous. L'inconvénient est qu'il nécessite l'installation de logiciels aux deux extrémités de la connexion, alors que X11 est généralement déjà installé.


33
2018-06-08 16:04



Lié au sujet de la latence serait que X11 va être TCP, vs UDP pour la plupart des vidéos en streaming. Il existe quelques autres produits pour vous aider à travailler à distance. Tony a mentionné RDP et VNC. Oracle vend toujours Sun Global Desktop (SGD), qui fonctionne bien. Citrix avait quelque chose (XenApp?). Notre eval a trouvé que SGD était une meilleure option pour nos besoins, mais avait déjà utilisé deux produits Citrix auparavant. - sleepyweasel
x2go a fonctionné très bien pour moi, même avec "server" un vieux portable. en marche en quelques minutes ... augmentation des performances de X11 fwd (inutilisable avec ma config) - comte