X11 - Przekazywanie i wydajność

12

Mam graficznie intensywną aplikację, którą należy przesłać przez X11. Spędziłem trochę czasu badając X11 i jego (nie) efektywność, w tym ten świetny post: Dlaczego przekazywanie X11 jest tak nieefektywne? .

Jedną z rzeczy, która wciąż nie jest dla mnie krystalicznie jasna, jest to, czy wydajność przekazywania X11 zależy od aplikacji. Miałem wrażenie, że cały ekran jest przesyłany dalej, bez względu na to, co się dzieje. Następnie przekazywanie X11 powinno być niezależne od aplikacji.

Czy są więc jakieś konkretne informacje na temat tego, co faktycznie jest przekazywane i czy wydajność ssh -X zależy od aplikacji?

Kieł
źródło
2
„Czy są jakieś konkretne informacje na temat tego, co faktycznie jest przekazywane i czy wydajność ssh -X zależy od aplikacji?” Tak. Na początek zobacz wykład Daniela Stone'a The Real Story Behind Wayland i X z LinuxConf.au 2013.
sampablokuper
1
„Miałem wrażenie, że cały ekran jest przesyłany dalej”. Trudno zrozumieć, co dałoby to wrażenie, ponieważ ludzie zwykle robią z przekazywaniem SSH X, ręcznie uruchamiając poszczególne aplikacje na zdalnej powłoce; czy mógłbyś rozwinąć sposób uruchamiania aplikacji?
rakslice
1
Jeden czynnik wart uwagi, jeśli przenosisz sesję X przez tunel SSH: ssh potrafi kompresować. Jest to -Copcja w wierszu poleceń lub Compression: yesopcja w pliku .ssh / config. Jeśli wykonujesz tradycyjne przekazywanie X z Dallas do Australii za pośrednictwem przeciążonego łącza T1, może to być różnica między tym, że Twoim zadaniem jest otwarcie okna dialogowego na pięciu poziomach głęboko w interfejsie, a wybraniem pola wyboru z nierealistycznego zadania do niewiarygodnie frustrujące dwie godziny. Na szczęście nie musiałem próbować tego z Waylandem, ale zakładam, że został znacznie ulepszony.
Ed Grimm,
Nie chcę rozpoczynać obszernej dyskusji w komentarzach, zwłaszcza że na moje pytanie bardzo dobrze odpowiedział @grawity. Przez „cały ekran” rozumiałem, że dane przesyłane przez tunel ssh zawsze będą prostym opisem pikseli na ekranie. @ EdGrimm: Dziękuję za komentarz na temat kompresji. Jestem tego świadomy. W naszym szczególnym scenariuszu X11 jest przesyłany przez łącze LAN 10 Gb / s, a kompresja / brak kompresji wydaje się nie mieć żadnej różnicy.
Fang

Odpowiedzi:

29

Miałem wrażenie, że cały ekran jest przesyłany dalej, bez względu na to, co się dzieje. Następnie przekazywanie X11 powinno być niezależne od aplikacji.

Nie, w rzeczywistości jest odwrotnie. Przekazywanie X11 nazywa się „przekazywaniem X11”, ponieważ przenosi rzeczywiste komunikaty protokołu X używane przez aplikacje do renderowania okien na „serwerze X” (zazwyczaj Xorg). Te komunikaty to polecenia do tworzenia / przenoszenia okien, rysowania tekstu i prostych elementów graficznych (linii / prostokątów), rysowania map bitowych itp.

Można powiedzieć, że koncepcyjnie jest to przeciwieństwo protokołów „pełnego ekranu”, takich jak VNC / RFB. Myślę, że jest to w pewnym stopniu porównywalne z RDP systemu Windows, który został również stworzony do transportu poleceń rysowania GDI.

Dlatego widzisz różnice między programami:

  1. Aby zacytować post, do którego się odwoływałeś, początkowo większość programów opartych na X działała w następujący sposób:

    Zasadniczo X11 nie wysyła ekranu do twojego komputera, ale wysyła instrukcje wyświetlania, dzięki czemu serwer X na twoim komputerze lokalnym może odtworzyć ekran w twoim systemie lokalnym.

    Kiedy więc program chciał pokazać przycisk, wysłał tylko kilka krótkich poleceń - „narysuj prostokąt”, „narysuj tekst” i być może kilka linii, aby wyglądał 3D.

  2. Z czasem to się zmieniło, programy zaczęły same renderować, a wiele z tych instrukcji stało się po prostu „oto mapa bitowa, którą już wyrenderowałem, umieść to na ekranie” - bardzo szybko lokalnie, ale bardzo wolno w sieci z powodu braku X11 kompresja obrazu.

    Oznacza to, że programy zbudowane przy użyciu nowoczesnych zestawów narzędzi działają znacznie wolniej w sieci X11, nawet jeśli jest to coś tak podstawowego jak czcionki antyializowane.

    (Natomiast protokół RDP dostosowuje się z czasem i obejmuje różne formy kompresji obrazu, takie jak JPEG, a nawet H.264; często można zauważyć artefakty kompresji podczas ładowania pełnego obrazu).

  3. Na szczęście większość zestawów narzędzi interfejsu użytkownika, takich jak GTK, implementuje śledzenie szkód, więc tylko zaktualizowane regiony są wysyłane ponownie. Jednak niektóre programy (takie jak kilka wersji Firefox / Thunderbird) nie obsługują tego i żądają pełnego ponownego renderowania całego okna, nawet jeśli tak naprawdę nie zostało zaktualizowane.

    To kolejna różnica między programami - dobrze zachowujące się programy są nadal całkiem użyteczne w sieci, ale błędne mogą nasycić łącze 100 Mb / s, nie robiąc absolutnie nic pożytecznego.

użytkownik1686
źródło
1
Pamiętam, jak raz próbowałem skonfigurować serwer MythTV. Narzędzie „setup” było aplikacją Qt i wyświetlenie każdej strony konfiguracji zajęło kilka minut, pomimo rozsądnego łącza ADSL jako wąskiego gardła (prawie 8 Mb / s). Z tego powodu kilka minut pracy zajęło kilka godzin - byłoby o wiele łatwiej z interfejsem Curses, a nawet dobrze zachowaną aplikacją X11. Gdybym wiedział, jakie to będą kłopoty, czekałbym tydzień lub dwa, aż będę na miejscu, i użyłem jednego z bezbłędnych front-endów do wyświetlania. Jednak chciałem, aby serwer działał wcześniej.
Toby Speight
1
W obronie tych „błędnych programów” należy zauważyć, że jest to wina ideologii zestawu narzędzi X +, która zasadniczo wymaga, aby te błędne programy były przede wszystkim błędne. Można by pomyśleć, że program może po prostu wywołać interfejs API (który wysyła polecenie), aby mieć „normalnie wyglądające okno”, menu i przycisk tutaj, a tam pasek przewijania, ale nie. Ty lub zestaw narzędzi musisz zrobić wszystko ręcznie. Naprawdę nie jestem wielkim fanem stwardnienia rozsianego, a tym bardziej Apple, ale mają te rzeczy we właściwy sposób, podczas gdy ekosystem X jest do niczego od dziesięcioleci i nadal jest do bani.
Damon
Nie jestem jednak pewien, czy jest jakaś różnica. Co sprawia, że ​​UWP, WinForms lub comctl32 systemu Windows są mniej „zestawem narzędzi” niż GTK i QT? Czy nie robią też wszystkiego „ręcznie”?
user1686,