X11 - Weiterleitung und Effizienz

12

Ich habe eine grafisch intensive Anwendung, die über X11 weitergeleitet werden muss. Ich habe einige Zeit damit verbracht, X11 und seine (In-) Effizienz zu erforschen, einschließlich dieses großartigen Beitrags: Warum ist die X11-Weiterleitung so ineffizient? .

Eine Sache, die mir immer noch nicht klar ist, ist, ob die Leistung der X11-Weiterleitung von der Anwendung abhängt. Ich hatte den Eindruck, dass der gesamte Bildschirm weitergeleitet wird, egal was los ist. Dann sollte die X11-Weiterleitung anwendungsunabhängig sein.

Gibt es konkrete Informationen darüber, was tatsächlich weitergeleitet wird und ob die Leistung von ssh -X von der Anwendung abhängt?

Fang
quelle
2
"Gibt es konkrete Informationen darüber, was tatsächlich weitergeleitet wird und ob die Leistung von ssh -X von der Anwendung abhängt?" Ja. Sehen Sie sich zunächst Daniel Stones Vortrag The Real Story Behind Wayland und X von LinuxConf.au 2013 an.
sampablokuper
1
"Ich hatte den Eindruck, dass der gesamte Bildschirm weitergeleitet wird." Es ist schwer zu verstehen, was Ihnen diesen Eindruck vermitteln würde, da bei der SSH X-Weiterleitung normalerweise einzelne Anwendungen manuell auf der Remote-Shell ausgeführt werden. Könnten Sie vielleicht näher erläutern, wie Sie die Anwendungen starten?
Rakslice
1
Ein wichtiger Faktor, wenn Sie die X-Sitzung über einen SSH-Tunnel transportieren: ssh kann Komprimierung durchführen. Dies ist die -COption in der Befehlszeile oder die Compression: yesOption in der Datei .ssh / config. Wenn Sie eine herkömmliche X-Weiterleitung von Dallas nach Australien über eine überlastete T1-Verbindung durchführen, kann dies der Unterschied zwischen der Aufgabe sein, einen fünf Ebenen tiefen Dialog in der Benutzeroberfläche aufzurufen und ein Kontrollkästchen von einer unrealistischen Aufgabe zu einer lediglich überragenden Aufgabe auszuwählen frustrierende zwei Stunden. Ich hatte zum Glück nicht die Notwendigkeit, dies mit Wayland zu versuchen, aber ich gehe davon aus, dass es stark verbessert wurde.
Ed Grimm
Ich möchte in den Kommentaren keine ausführliche Diskussion beginnen, zumal meine Frage von @grawity sehr gut beantwortet wurde. Mit "dem gesamten Bildschirm" meinte ich, dass die über den SSH-Tunnel weitergeleiteten Daten immer eine einfache Beschreibung der Pixel auf dem Bildschirm darstellen würden. @ EdGrimm: Vielen Dank für Ihren Kommentar zur Komprimierung. Das ist mir bewusst. In unserem speziellen Szenario wird X11 über eine 10-Gbit-LAN-Verbindung weitergeleitet, und die Komprimierung / keine Komprimierung scheint absolut keinen Unterschied zu machen.
Fang

Antworten:

29

Ich hatte den Eindruck, dass der gesamte Bildschirm weitergeleitet wird, egal was los ist. Dann sollte die X11-Weiterleitung anwendungsunabhängig sein.

Nein, es ist eigentlich das Gegenteil. Der Grund, warum die X11-Weiterleitung als "X11-Weiterleitung" bezeichnet wird, liegt darin, dass sie die tatsächlichen X-Protokollnachrichten transportiert , die von Anwendungen zum Rendern ihrer Fenster auf dem "X-Server" (normalerweise Xorg) verwendet werden. Diese Nachrichten sind Befehle zum Erstellen / Verschieben von Fenstern, Zeichnen von Text und grafischen Grundelementen (Linien / Rechtecken), Zeichnen von Bitmaps usw.

Man könnte sagen, es ist konzeptionell das Gegenteil von "Vollbild" -Protokollen wie VNC / RFB. Ich denke, es ist etwas vergleichbar mit Windows RDP, das auch für den Transport von GDI-Zeichenbefehlen entwickelt wurde.

Die Gründe, warum Sie Unterschiede zwischen Programmen sehen, sind:

  1. Um den Beitrag zu zitieren, auf den Sie verwiesen haben, haben ursprünglich die meisten X-basierten Programme folgendermaßen funktioniert:

    Grundsätzlich sendet X11 den Bildschirm nicht an Ihren Computer, sondern sendet die Anzeigeanweisungen, damit der X-Server auf Ihrem lokalen Computer den Bildschirm auf Ihrem lokalen System neu erstellen kann.

    Wenn ein Programm eine Schaltfläche anzeigen wollte, sendete es nur ein paar kurze Befehle - "Zeichnen eines Rechtecks", "Zeichnen von Text" und möglicherweise einige Linien, damit es 3D aussieht.

  2. Im Laufe der Zeit änderte sich dies, Programme begannen, das Rendern selbst durchzuführen, und viele dieser Anweisungen wurden nur "hier ist eine Bitmap, die ich bereits gerendert habe, stellen Sie diese auf den Bildschirm" - lokal sehr schnell, aber über das Netzwerk sehr langsam, da X11 keine hat Bildkompression.

    Dies bedeutet, dass Programme, die mit modernen Toolkits erstellt wurden, über vernetztes X11 viel langsamer sind, selbst wenn es so grundlegend ist wie Antialiasing-Schriftarten.

    (Im Gegensatz dazu hat sich RDP im Laufe der Zeit angepasst und umfasst verschiedene Formen der Bildkomprimierung wie JPEG und sogar H.264. Sie können die Komprimierungsartefakte häufig bemerken, während das vollständige Bild geladen wird.)

  3. Glücklicherweise implementieren die meisten UI-Toolkits wie GTK die Schadensverfolgung, sodass nur aktualisierte Regionen erneut gesendet werden. Einige Programme (z. B. mehrere Firefox / Thunderbird-Versionen) unterstützen dies jedoch nicht und fordern ein vollständiges erneutes Rendern des gesamten Fensters an, auch wenn es nicht wirklich aktualisiert wurde.

    Das ist ein weiterer Unterschied zwischen Programmen - gut verhaltene Programme sind im Netzwerk immer noch recht brauchbar, aber fehlerhafte Programme können eine 100-Mbit / s-Verbindung überlasten und absolut nichts Nützliches tun.

user1686
quelle
1
Ich erinnere mich, dass ich einmal versucht habe, einen MythTV-Server einzurichten. Das Dienstprogramm "Setup" war eine Qt-Anwendung und es dauerte einige Minuten, bis jede Konfigurationsseite angezeigt wurde, trotz eines vernünftigen ADSL-Links als Engpass (fast 8 Mbit / s). Aus diesem Grund dauerte die Arbeit von einigen Minuten mehrere Stunden - mit einer Curses-Benutzeroberfläche oder sogar einer gut erzogenen X11-Anwendung wäre dies viel einfacher gewesen. Wenn ich gewusst hätte, wie viel Ärger es werden würde, hätte ich ein oder zwei Wochen gewartet, bis ich vor Ort war und eine der plattenlosen Front-End-Boxen für die Anzeige verwendet hätte. Ich wollte jedoch, dass der Server früher funktioniert.
Toby Speight
1
Zur Verteidigung dieser "Buggy-Programme" sollte darauf hingewiesen werden, dass dies der Fehler der X + Toolkit-Ideologie ist, die es grundsätzlich erforderlich macht, dass diese Buggy-Programme überhaupt fehlerhaft sind. Sie würden denken, dass ein Programm einfach eine API aufrufen könnte (die einen Befehl sendet), um ein "normal aussehendes Fenster", ein Menü und eine Schaltfläche hier und eine Bildlaufleiste dort zu haben, aber nein. Sie oder das Toolkit müssen alles von Hand erledigen. Ich bin wirklich kein großer Fan von MS und noch weniger von Apple, aber sie haben diese Dinge richtig gemacht, während das X-Ökosystem seit Jahrzehnten saugt und immer noch nervt.
Damon
Ich bin mir nicht sicher, ob es einen Unterschied gibt. Was macht Windows UWP oder WinForms oder comctl32 weniger zu einem "Toolkit" als GTK und QT? Tun sie nicht auch alles "von Hand"?
user1686