X11 - Spedizione ed efficienza


12

Ho un'applicazione graficamente intensiva che deve essere inoltrata su X11. Ho trascorso un po 'di tempo a ricercare X11 e la sua (in) efficienza, incluso questo fantastico post: Perché l'inoltro X11 è così inefficiente? .

Una cosa che non è ancora chiara per me è se le prestazioni dell'inoltro X11 dipendono dall'applicazione. Avevo l'impressione che l'intero schermo fosse inoltrato, qualunque cosa stesse succedendo. Quindi l'inoltro X11 dovrebbe essere indipendente dall'applicazione.

Quindi, ci sono informazioni concrete su cosa viene effettivamente inoltrato e se le prestazioni di ssh -X dipendono dall'applicazione?


2
"Quindi, ci sono informazioni concrete su cosa viene effettivamente inoltrato e se le prestazioni di ssh -X dipendono dall'applicazione?" Sì. Per iniziare, vedi il discorso di Daniel Stone The Real Story Behind Wayland e X di LinuxConf.au 2013.
sampablokuper

1
"Avevo l'impressione che l'intero schermo fosse inoltrato" È difficile capire cosa ti darebbe quell'impressione, perché ciò che le persone fanno di solito con l'inoltro SSH X è eseguire manualmente le singole applicazioni sulla shell remota; potresti forse approfondire come stai lanciando le applicazioni?
Rakslice,

1
Un fattore da tenere presente se si trasporta la sessione X su un tunnel SSH: ssh può eseguire la compressione. È l' -Copzione nella riga di comando o l' Compression: yesopzione nel file .ssh / config. Se stai eseguendo il tradizionale inoltro X da Dallas in Australia su un collegamento T1 congestionato, questa può essere la differenza tra avere il compito di aprire una finestra di dialogo a cinque livelli in profondità nell'interfaccia e selezionare una casella da un'attività non realistica a un compito semplicemente eccessivo frustrante due ore. Fortunatamente non ho avuto la necessità di provare questo con Wayland, ma suppongo che sia notevolmente migliorato.
Ed Grimm,

Non voglio iniziare una discussione approfondita nei commenti, soprattutto dal momento che @grawity ha risposto molto bene alla mia domanda. Con "l'intero schermo" intendevo dire che i dati inoltrati sul tunnel SSH sarebbero sempre stati una semplice descrizione dei pixel sullo schermo. @ EdGrimm: Grazie per il tuo commento sulla compressione. Ne sono consapevole. Nel nostro particolare scenario, X11 viene inoltrato su un collegamento LAN a 10 Gbit e la compressione / nessuna compressione sembra non fare assolutamente alcuna differenza.
Zanna

Risposte:


29

Avevo l'impressione che l'intero schermo fosse inoltrato, qualunque cosa stesse succedendo. Quindi l'inoltro X11 dovrebbe essere indipendente dall'applicazione.

No, in realtà è il contrario. Il motivo per cui l'inoltro X11 è chiamato "inoltro X11" è perché trasporta gli attuali messaggi del protocollo X utilizzati dalle applicazioni per eseguire il rendering delle loro finestre sul "server X" (in genere Xorg). Quei messaggi sono comandi per creare / spostare finestre, disegnare testo e primitive grafiche (linee / rettangoli), disegnare bitmap, ecc.

Si potrebbe dire che è concettualmente l' opposto dei protocolli di "immagine a schermo intero" come VNC / RFB. Penso che sia in qualche modo paragonabile al RDP di Windows, creato anche per il trasporto di comandi di disegno GDI.

Quindi i motivi per cui vedi differenze tra i programmi sono:

  1. Per citare il post a cui hai fatto riferimento, originariamente la maggior parte dei programmi basati su X ha funzionato in questo modo:

    Fondamentalmente X11 non invia lo schermo al tuo computer, ma invia le istruzioni di visualizzazione in modo che l'X-server sul tuo computer locale possa ricreare lo schermo sul tuo sistema locale.

    Quindi, quando un programma voleva mostrare un pulsante, inviava solo alcuni brevi comandi: "disegna un rettangolo", "disegna testo" e forse alcune linee per renderlo 3D.

  2. Nel tempo questo è cambiato, i programmi hanno iniziato a eseguire il rendering da soli e molte di quelle istruzioni sono diventate solo "ecco una bitmap che ho già riprodotto, metterlo sullo schermo" - molto velocemente localmente, ma molto lento sulla rete a causa della mancanza di X11 compressione dell'immagine.

    Ciò significa che i programmi creati utilizzando i moderni toolkit sono molto più lenti rispetto all'X11 in rete, anche se è qualcosa di così semplice come i caratteri antialializzati.

    (Al contrario, RDP si è adattato nel tempo e include varie forme di compressione delle immagini come JPEG e persino H.264; spesso è possibile notare gli artefatti di compressione durante il caricamento dell'immagine completa.)

  3. Fortunatamente, la maggior parte dei toolkit dell'interfaccia utente come GTK implementa il rilevamento dei danni, quindi vengono inviate solo le regioni aggiornate. Tuttavia, alcuni programmi (come diverse versioni di Firefox / Thunderbird), non lo supportano e richiedono un nuovo rendering completo dell'intera finestra, anche se non è stato aggiornato.

    Questa è un'altra differenza tra i programmi: quelli ben educati sono ancora abbastanza utilizzabili sulla rete, ma quelli buggy possono saturare un collegamento a 100 Mbps senza fare assolutamente nulla di utile.


1
Ricordo di aver provato una volta a configurare un server MythTV. L'utility "setup" era un'applicazione Qt e impiegava diversi minuti per visualizzare ogni pagina di configurazione, nonostante un ragionevole collegamento ADSL come collo di bottiglia (quasi 8 Mb / s). Per questo motivo sono stati necessari diversi minuti per alcune ore: sarebbe stato molto più semplice con un'interfaccia utente di Curses o persino un'applicazione X11 ben educata. Se avessi saputo quanti guai ci sarebbero stati, avrei aspettato una o due settimane fino a quando non sarei stato sul posto e avrei usato una delle scatole front-end senza disco per la visualizzazione. Volevo che il server funzionasse e funzionasse prima, però.
Toby Speight,

1
A difesa di questi "programmi con errori" si dovrebbe sottolineare che questo è il difetto dell'ideologia del toolkit X +, che in sostanza rende necessario che tali programmi con errori siano corretti in primo luogo. Penseresti che un programma potrebbe semplicemente chiamare un'API (che invia un comando) per avere una "finestra dall'aspetto normale", un menu e un pulsante qui e una barra di scorrimento lì, ma no. Tu o il toolkit dovete fare tutto a mano. Non sono un grande fan della SM e ancor meno di Apple, ma hanno queste cose giuste mentre l'ecosistema X ha succhiato per decenni e fa ancora schifo.
Damon,

Non sono sicuro che ci sia differenza. Cosa rende UWP o WinForms di Windows o comctl32 meno di un "toolkit" rispetto a GTK e QT? Non fanno anche tutto "a mano"?
user1686
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.