X11 - Expédition et efficacité


12

J'ai une application graphiquement intensive qui doit être transmise via X11. J'ai passé un peu de temps à rechercher X11 et son (in) efficacité, y compris cet excellent article: Pourquoi le transfert X11 est-il si inefficace? .

Une chose qui n'est toujours pas claire pour moi est de savoir si les performances du transfert X11 dépendent de l'application. J'avais l'impression que tout l'écran était retransmis, quoi qu'il se passe. Le transfert X11 doit alors être indépendant de l'application.

Alors, existe-t-il des informations concrètes sur ce qui est réellement transmis et si les performances de ssh -X dépendent de l'application?


2
"Donc, existe-t-il des informations concrètes sur ce qui est réellement transmis et si les performances de ssh -X dépendent de l'application?" Oui. Pour commencer, voir le discours de Daniel Stone The Real Story Behind Wayland and X de LinuxConf.au 2013.
sampablokuper

1
"J'avais l'impression que tout l'écran était transféré" Il est difficile de comprendre ce qui vous donnerait cette impression, car ce que les gens font généralement avec le transfert SSH X est d'exécuter manuellement des applications individuelles sur le shell distant; pourriez-vous peut-être expliquer comment vous lancez les applications?
rakslice

1
Un facteur à noter si vous transportez la session X sur un tunnel SSH: ssh peut effectuer une compression. C'est l' -Coption sur la ligne de commande ou l' Compression: yesoption dans le fichier .ssh / config. Si vous effectuez un transfert X traditionnel de Dallas vers l'Australie via une liaison T1 encombrée, cela peut faire la différence entre avoir pour tâche de faire apparaître une boîte de dialogue à cinq niveaux dans l'interface et de sélectionner une case à cocher d'une tâche irréaliste à une simple frustrant deux heures. Heureusement, je n'ai pas eu besoin d'essayer avec Wayland, mais je suppose que cela s'est grandement amélioré.
Ed Grimm

Je ne veux pas entamer une discussion approfondie dans les commentaires, d'autant plus que ma question a été très bien répondue par @grawity. Par "tout l'écran", je voulais dire que les données transmises via le tunnel ssh seraient toujours une simple description des pixels sur l'écran. @ EdGrimm: Merci pour votre commentaire sur la compression. Je suis au courant de ça. Dans notre scénario particulier, X11 est transmis sur une liaison LAN 10 Gbit et la compression / aucune compression ne semble faire aucune différence.
Fang

Réponses:


29

J'avais l'impression que tout l'écran était retransmis, quoi qu'il se passe. Le transfert X11 doit alors être indépendant de l'application.

Non, c'est en fait le contraire. La raison pour laquelle le transfert X11 est appelé «transfert X11» est qu'il transporte les messages de protocole X réels utilisés par les applications pour afficher leurs fenêtres sur le «serveur X» (généralement Xorg). Ces messages sont des commandes pour créer / déplacer des fenêtres, dessiner du texte et des primitives graphiques (lignes / rectangles), dessiner des bitmaps, etc.

On pourrait dire que c'est conceptuellement l' opposé des protocoles "image plein écran" tels que VNC / RFB. Je pense qu'il est quelque peu comparable au RDP de Windows, qui a également été conçu pour le transport des commandes de dessin GDI.

Les raisons pour lesquelles vous voyez des différences entre les programmes sont donc:

  1. Pour citer l'article que vous avez référencé, à l'origine la plupart des programmes basés sur X fonctionnaient comme ceci:

    Fondamentalement, X11 n'envoie pas l'écran à votre ordinateur, mais il envoie les instructions d'affichage afin que le serveur X sur votre ordinateur local puisse recréer l'écran sur votre système local.

    Donc quand un programme voulait montrer un bouton, il envoyait juste quelques commandes courtes - "dessiner un rectangle", "dessiner du texte", et peut-être quelques lignes pour lui donner un aspect 3D.

  2. Au fil du temps, cela a changé, les programmes ont commencé à faire le rendu par eux-mêmes, et bon nombre de ces instructions sont devenues simplement "voici un bitmap que j'ai déjà rendu, mettez-le à l'écran" - très rapide localement, mais très lent sur le réseau en raison de l'absence de X11 compression d'image.

    Cela signifie que les programmes construits à l'aide de boîtes à outils modernes sont beaucoup plus lents que X11 en réseau, même si c'est quelque chose d'aussi basique que les polices anti-crénelées.

    (En revanche, RDP s'est adapté au fil du temps et comprend diverses formes de compression d'image telles que JPEG et même H.264; vous pouvez souvent remarquer les artefacts de compression pendant le chargement de l'image complète.)

  3. Heureusement, la plupart des boîtes à outils d'interface utilisateur telles que GTK implémentent le suivi des dommages, de sorte que seules les régions mises à jour sont renvoyées. Cependant, quelques programmes (comme plusieurs versions de Firefox / Thunderbird) ne le supportent pas et demandent un nouveau rendu complet de la fenêtre entière, même si elle n'a pas vraiment été mise à jour.

    C'est une autre différence entre les programmes - ceux qui se comportent bien sont encore assez utilisables sur le réseau, mais ceux qui sont bogués peuvent saturer un lien de 100 Mbps sans rien d'utile.


1
Je me souviens d'avoir essayé de configurer un serveur MythTV. L'utilitaire "setup" était une application Qt et prenait plusieurs minutes pour afficher chaque page de configuration, malgré un lien ADSL raisonnable comme goulot d'étranglement (près de 8 Mb / s). Le travail de quelques minutes a pris plusieurs heures à cause de cela - cela aurait été tellement plus facile avec une interface utilisateur Curses, ou même une application X11 bien comportée. Si j'avais su à quel point ça allait être difficile, j'aurais attendu une semaine ou deux avant d'être sur place et utilisé l'une des boîtes frontales sans disque pour l'affichage. Cependant, je voulais que le serveur soit opérationnel et fonctionne plus tôt que cela.
Toby Speight

1
Pour défendre ces "programmes bogués", il convient de souligner que c'est la faute de l'idéologie de la boîte à outils X +, qui rend fondamentalement nécessaire que ces programmes bogués soient bogués en premier lieu. On pourrait penser qu'un programme pourrait simplement appeler une API (qui envoie une commande) pour avoir une "fenêtre d'apparence normale", un menu et un bouton ici et une barre de défilement là, mais non. Vous ou la boîte à outils devez tout faire à la main. Je ne suis vraiment pas un grand fan de MS et encore moins d'Apple, mais ils ont bien compris ces choses, alors que l'écosystème X a sucé pendant des décennies et continue de le faire.
Damon

Je ne sais pas s'il y a une différence cependant. Qu'est-ce qui rend UWP ou WinForms ou comctl32 de Windows moins une "boîte à outils" que GTK et QT? Ne font-ils pas tout "à la main"?
user1686
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.