Übersicht über Terminalemulatoren

Ein paar Worte von unserem Übersetzungsbüro: Normalerweise ist jeder bestrebt, die neuesten Materialien und Veröffentlichungen zu übersetzen, und wir sind da keine Ausnahme. Aber Terminals werden nicht einmal pro Woche aktualisiert. Deshalb haben wir für Sie einen im Frühjahr 2018 erschienenen Artikel von Antoine Beaupré übersetzt: Trotz seines nach modernen Maßstäben beträchtlichen „Alters“ hat das Material unserer Meinung nach keineswegs an Aktualität verloren. Außerdem handelte es sich ursprünglich um eine Serie von zwei Artikeln, aber wir haben beschlossen, sie in einem großen Beitrag zusammenzufassen.

Übersicht über Terminalemulatoren

Terminals nehmen in der Computergeschichte einen besonderen Platz ein, doch in den letzten Jahrzehnten mussten sie mit der zunehmenden Verbreitung grafischer Schnittstellen neben der Befehlszeile überleben. Terminalemulatoren ihre eigenen ersetzt Hardware-Brüder, die wiederum eine Modifikation von Systemen waren, die auf Lochkarten und Kippschaltern basierten. Moderne Distributionen enthalten eine Vielzahl von Terminalemulatoren in allen Formen und Farben. Und während viele mit dem Standard-Terminal ihrer Arbeitsumgebung zufrieden sind, verwenden einige stolz eine geradezu exotische Software, um ihre Lieblings-Shell oder ihren Lieblingstexteditor auszuführen. Aber wie wir in diesem Artikel sehen werden, wurden nicht alle Terminals nach dem gleichen Bild erstellt: Sie unterscheiden sich stark in Funktionalität, Größe und Leistung.

Einige Terminals weisen geradezu überraschende Sicherheitslücken auf, und die meisten verfügen über völlig andere Funktionen, von der Unterstützung einer Registerkartenoberfläche bis hin zur Skripterstellung. Obwohl wir Ich habe mir in der fernen Vergangenheit Terminalemulatoren angesehenDieser Artikel ist eine Aktualisierung des vorherigen Materials, das den Lesern dabei helfen soll, zu bestimmen, welches Terminal sie im Jahr 2018 verwenden sollen. In der ersten Hälfte des Artikels werden Funktionen verglichen und in der zweiten Hälfte wird die Leistung bewertet.

Hier sind die Terminals, die ich überprüft habe:

Übersicht über Terminalemulatoren

Dies sind möglicherweise nicht die neuesten Versionen, da ich zum Zeitpunkt des Schreibens auf stabile Builds beschränkt war, die ich auf Debian 9 oder Fedora 27 ausrollen konnte. Die einzige Ausnahme ist Alacritty. Es ist ein Nachkomme GPU-beschleunigter Terminals und ist in einer für diese Aufgabe ungewöhnlichen und neuen Sprache geschrieben – Rust. Ich habe Webterminals aus meiner Bewertung ausgeschlossen (einschließlich derjenigen auf Elektron), da vorläufige Tests ihre äußerst schlechte Leistung zeigten.

Unicode-Unterstützung

Ich habe meine Tests mit Unicode-Unterstützung begonnen. Der erste Test der Terminals bestand darin, den Unicode-String anzuzeigen Wikipedia-Artikel: „é, Δ, И, ק, م, ๗, あ, 叶, 葉 und 말.“ Dieser einfache Test zeigt, ob das Terminal weltweit einwandfrei funktionieren kann. Das xterm-Terminal zeigt keine arabischen Zeichen an Mem in der Standardkonfiguration:

Übersicht über Terminalemulatoren

Standardmäßig verwendet xterm die klassische „feste“ Schriftart, die laut immer noch dieselbe Vickyverfügt über „erhebliche Unicode-Abdeckung seit 1997“. In dieser Schriftart ist etwas los, das dazu führt, dass das Zeichen als leerer Rahmen erscheint. Erst wenn die Textschriftart auf mehr als 20 Punkte erhöht wird, wird das Zeichen endlich korrekt angezeigt. Dieser „Fix“ unterbricht jedoch die Anzeige anderer Unicode-Zeichen:

Übersicht über Terminalemulatoren

Diese Screenshots wurden in Fedora 27 aufgenommen, da es bessere Ergebnisse lieferte als Debian 9, wo einige ältere Terminalversionen (insbesondere mlterm) Schriftarten nicht richtig verarbeiten konnten. Glücklicherweise wurde dies in späteren Versionen behoben.

Beachten Sie nun, wie die Zeile in xterm angezeigt wird. Es stellt sich heraus, dass das Symbol Mem und das folgende semitisch sind qoph siehe Skripte im RTL-Stil (rechts nach links), also sollten sie technisch gesehen von rechts nach links angezeigt werden. Webbrowser wie Firefox 57 verarbeiten die obige Zeile korrekt. Eine einfachere Variante des RTL-Textes ist das Wort „Sarah" auf Hebräisch (Sara). Wiki-Seite zu bidirektionalen Texten sagt folgendes:

„Viele Computerprogramme können bidirektionalen Text nicht korrekt anzeigen. Beispielsweise besteht der hebräische Name „Sarah“ aus den Zeichen sin (ש) (die auf der rechten Seite erscheinen), dann resh (ר) und schließlich he (ה) (die auf der linken Seite erscheinen sollten).“

Viele Terminals bestehen diesen Test nicht: Alacritty, von VTE abgeleitete Gnome- und XFCE-Terminals, urxvt, st und xterm zeigen „Sara“ in umgekehrter Reihenfolge an, als hätten wir den Namen als „Aras“ geschrieben.

Übersicht über Terminalemulatoren

Ein weiteres Problem bei bidirektionalen Texten besteht darin, dass sie irgendwie ausgerichtet werden müssen, insbesondere wenn es um die Mischung von RTL- und LTR-Texten geht. RTL-Skripte sollten auf der rechten Seite des Terminalfensters ausgeführt werden, aber was sollte bei Terminals passieren, die standardmäßig LTR-Englisch verwenden? Die meisten von ihnen verfügen über keine besonderen Mechanismen und richten den gesamten Text linksbündig aus (auch in Konsole). Ausnahmen bilden pterm und mlterm, die sich an die Standards halten und solche Zeilen rechtsbündig ausrichten.

Übersicht über Terminalemulatoren

Einsteckschutz

Das nächste wichtige Merkmal, das ich identifiziert habe, ist der Einführschutz. Obwohl allgemein bekannt ist, dass Zaubersprüche wie:

$ curl http://example.com/ | sh

Da es sich um Push-Befehle zur Codeausführung handelt, wissen nur wenige, dass sich versteckte Befehle beim Kopieren und Einfügen aus einem Webbrowser auch nach sorgfältiger Prüfung in die Konsole einschleichen können. Verifizierungsseite Gianna Horna zeigt auf brillante Weise, wie harmlos der Befehl aussieht:

git clone git: //git.kernel.org/pub/scm/utils/kup/kup.git

wird zu einem solchen Ärgernis, wenn es von Horns Website in das Terminal eingefügt wird:

git clone /dev/null;
    clear;
	echo -n "Hello ";
	whoami|tr -d 'n';
	echo -e '!nThat was a bad idea. Don'"'"'t copy code from websites you don'"'"'t trust! 
	Here'"'"'s the first line of your /etc/passwd: ';
	head -n1 /etc/passwd
	git clone git://git.kernel.org/pub/scm/utils/kup/kup.git

Wie es funktioniert? Der Block enthält schädlichen Code , die mithilfe von CSS aus der Sicht des Benutzers verschoben wird.

Einfügemodus in Klammern ist eindeutig darauf ausgelegt, solche Angriffe zu neutralisieren. In diesem Modus schließen Terminals den eingefügten Text in ein Paar spezieller Escape-Sequenzen ein, um der Shell den Ursprung des Texts mitzuteilen. Dadurch wird der Shell mitgeteilt, dass sie Sonderzeichen, die der eingefügte Text enthalten kann, ignorieren kann. Alle Terminals bis hin zum ehrwürdigen xterm unterstützen diese Funktion, das Einfügen im Klammermodus erfordert jedoch Unterstützung von der Shell oder Anwendung, die auf dem Terminal ausgeführt wird. Zum Beispiel Software mit GNU-Readline (gleicher Bash), benötigt eine Datei ~/.inputrc:

set enable-bracketed-paste on

Leider zeigt die Testseite von Horn auch, wie man diesen Schutz durch die Textformatierung selbst umgehen und am Ende vorzeitig den Bracketed-Modus anwenden kann. Dies funktioniert, weil einige Terminals Escape-Sequenzen nicht korrekt filtern, bevor sie ihre eigenen hinzufügen. Beispielsweise konnte ich bei mir selbst mit der richtigen Konfiguration die Konsolentests nie erfolgreich abschließen .inputrc Datei. Dies bedeutet, dass Ihre Systemkonfiguration aufgrund einer nicht unterstützten Anwendung oder einer falsch konfigurierten Shell leicht beschädigt werden kann. Dies ist besonders gefährlich, wenn Sie sich bei Remote-Servern anmelden, wo sorgfältige Konfigurationsarbeiten weniger üblich sind, insbesondere wenn Sie über viele solcher Remote-Rechner verfügen.

Eine gute Lösung für dieses Problem ist das Einfügebestätigungs-Plugin für das Terminal urxvt, der lediglich um Erlaubnis bittet, Text einzufügen, der Zeilenumbrüche enthält. Eine sicherere Variante für den von Horn beschriebenen Textangriff habe ich nicht gefunden.

Registerkarten und Profile

Eine derzeit beliebte Funktion ist die Unterstützung einer Benutzeroberfläche mit Registerkarten, die wir als ein Terminalfenster definieren, das mehrere andere Terminals enthält. Diese Funktion unterscheidet sich für verschiedene Terminals, und obwohl herkömmliche xterm-Terminals überhaupt keine Tabs unterstützen, verfügen modernere Terminalversionen wie Xfce Terminal, GNOME Terminal und Konsole über diese Funktion. Urxvt unterstützt auch Tabs, allerdings nur, wenn Sie ein Plugin verwenden. Aber was die Tab-Unterstützung selbst angeht, ist Terminator der unangefochtene Spitzenreiter: Es unterstützt nicht nur Tabs, sondern kann Terminals auch in beliebiger Reihenfolge anordnen (siehe Bild unten).

Übersicht über Terminalemulatoren

Eine weitere Funktion von Terminator ist die Möglichkeit, diese Registerkarten zu „gruppieren“ und dieselben Tastenanschläge gleichzeitig an mehrere Terminals zu senden, wodurch ein einfaches Tool zur gleichzeitigen Durchführung von Massenoperationen auf mehreren Servern bereitgestellt wird. Eine ähnliche Funktion ist auch in Konsole implementiert. Um diese Funktion in anderen Terminals nutzen zu können, müssen Sie Software von Drittanbietern verwenden, z Cluster-SSH, XLAX oder tmux.

Tabs funktionieren besonders gut, wenn sie mit Profilen gekoppelt werden: Sie können beispielsweise einen Tab für E-Mails, einen anderen für Chat usw. haben. Dies wird von Konsole Terminal und GNOME Terminal gut unterstützt. Beide ermöglichen es jeder Registerkarte, automatisch ihr eigenes Profil zu starten. Terminator unterstützt auch Profile, aber ich konnte keine Möglichkeit finden, bestimmte Programme automatisch zu starten, wenn Sie eine bestimmte Registerkarte öffnen. Andere Terminals verfügen überhaupt nicht über das Konzept „Profil“.

Rüschen

Das Letzte, worauf ich im ersten Teil dieses Artikels eingehen werde, ist das Aussehen der Terminals. Beispielsweise unterstützen GNOME, Xfce und urxvt Transparenz, haben jedoch kürzlich die Unterstützung für Hintergrundbilder eingestellt, was einige Benutzer dazu zwingt, auf das Terminal umzusteigen Tilix. Ich persönlich bin damit zufrieden und es ist einfach XRessourcen, das den Basissatz an Hintergrundfarben für urxvt festlegt. Allerdings können auch nicht standardmäßige Farbthemen Probleme verursachen. Zum Beispiel, Solarisiert nicht funktioniert mit Anwendungen htop и IP-Verkehr, da sie bereits ihre eigenen Farben verwenden.

Originales VT100-Terminal unterstützte keine Farben und neue waren oft auf eine 256-Farben-Palette beschränkt. Für fortgeschrittene Benutzer, die ihre Terminals auf komplexe Weise gestalten, können Shell-Eingabeaufforderungen oder Statusleisten eine ärgerliche Einschränkung darstellen. Kern Verfolgt, welche Terminals „True Color“-Unterstützung bieten. Meine Tests bestätigen, dass ST-, Alacritty- und VTE-basierte Terminals True Color perfekt unterstützen. Andere Terminals schneiden in dieser Hinsicht nicht besonders gut ab und stellen sogar nicht einmal 256 Farben dar. Unten sehen Sie den Unterschied zwischen der True Color-Unterstützung in den GNOME-Terminals st und xterm, die mit ihrer 256-Farben-Palette gute Arbeit leisten, und urxvt, das den Test nicht nur nicht besteht, sondern stattdessen sogar einige blinkende Zeichen anzeigt.

Übersicht über Terminalemulatoren

Einige Terminals analysieren auch Texte auf URL-Muster, um Links anklickbar zu machen. Dies gilt für alle von VTE abgeleiteten Terminals, während urxvt ein spezielles Plugin erfordert, das URLs mit einem Klick oder über eine Tastenkombination umwandelt. Andere Terminals, die ich getestet habe, zeigen URLs auf andere Weise an.

Ein neuer Trend bei Terminals ist schließlich die Option des Scroll-Puffers. st hat beispielsweise keinen Scroll-Puffer; Es wird davon ausgegangen, dass der Benutzer einen Terminal-Multiplexer wie tmux und verwendet GNU-Bildschirm.

Alacritty fehlen aber auch Backscroll-Puffer wird bald hinzugefügt seine Unterstützung aufgrund des „umfangreichen Feedbacks“ von Benutzern zu diesem Thema. Abgesehen von diesen Emporkömmlingen unterstützt jedes Terminal, das ich getestet habe und das ich finden konnte, das Rückwärtsscrollen.

Zwischensummen

Im zweiten Teil des Materials (im Original handelte es sich um zwei unterschiedliche Artikel - ca. Fahrbahn) vergleichen wir Leistung, Speichernutzung und Latenz. Wir können jedoch bereits jetzt feststellen, dass einige der betreffenden Terminals gravierende Mängel aufweisen. Benutzer, die beispielsweise regelmäßig mit RTL-Skripten arbeiten, sollten möglicherweise mlterm und pterm in Betracht ziehen, da sie ähnliche Aufgaben besser bewältigen können als andere. Auch Konsole schnitt gut ab. Benutzer, die nicht mit RTL-Skripten arbeiten, können etwas anderes wählen.

Was den Schutz vor dem Einschleusen von Schadcode angeht, zeichnet sich urxvt durch die spezielle Implementierung des Schutzes gegen diese Art von Angriffen aus, was mir auf jeden Fall praktisch erscheint. Für diejenigen, die auf der Suche nach etwas Schnickschnack sind, ist Konsole einen Blick wert. Abschließend ist anzumerken, dass VTE eine hervorragende Basis für Terminals ist, die Farbunterstützung, URL-Erkennung usw. garantiert. Auf den ersten Blick mag das Standardterminal, das mit Ihrer Lieblingsumgebung geliefert wird, alle Anforderungen erfüllen, aber lassen wir diese Frage offen, bis wir die Leistung verstanden haben.

Wir setzen das Gespräch fort


Im Allgemeinen scheint die Leistung von Terminals an sich ein weit hergeholtes Problem zu sein, aber wie sich herausstellt, weisen einige von ihnen überraschend hohe Latenzzeiten für Software dieser grundlegenden Art auf. Als nächstes werden wir uns außerdem mit der sogenannten „Geschwindigkeit“ (tatsächlich handelt es sich dabei um die Scrollgeschwindigkeit) und dem Speicherverbrauch des Terminals befassen (mit der Einschränkung, dass dies heute nicht mehr so ​​kritisch ist wie vor Jahrzehnten).

Verzögert

Nach einer gründlichen Untersuchung der Terminalleistung bin ich zu dem Schluss gekommen, dass der wichtigste Parameter in dieser Hinsicht die Latenz (Ping) ist. In seinem Artikel „Wir drucken gerne“ Pavel Fatin untersuchte die Latenz verschiedener Texteditoren und deutete an, dass Terminals in dieser Hinsicht möglicherweise langsamer sind als die schnellsten Texteditoren. Es war dieser Hinweis, der mich letztendlich dazu veranlasste, meine eigenen Tests durchzuführen und diesen Artikel zu schreiben.

Aber was ist Latenz und warum ist sie so wichtig? In seinem Artikel definierte Fatin es als „die Verzögerung zwischen dem Drücken einer Taste und der entsprechenden Bildschirmaktualisierung“ und zitierte „Leitfaden zur Mensch-Computer-Interaktion“Darin heißt es: „Die Verzögerung des visuellen Feedbacks auf einem Computerbildschirm hat einen wichtigen Einfluss auf das Verhalten und die Zufriedenheit von Schreibkräften.“

Fatin erklärt, dass dieser Ping tiefere Folgen als nur Zufriedenheit hat: „Das Tippen wird langsamer, es passieren mehr Fehler und die Augen- und Muskelspannung nimmt zu.“ Mit anderen Worten: Eine große Verzögerung kann zu Tippfehlern und auch zu einer geringeren Codequalität führen, da sie zu einer zusätzlichen kognitiven Belastung des Gehirns führt. Aber was noch schlimmer ist, ist, dass Ping „die Belastung der Augen und Muskeln erhöht“, was zu implizieren scheint Entwicklung von Arbeitsunfällen in der Zukunft (Offenbar meint der Autor Probleme mit der Augen-, Rücken-, Armmuskulatur und natürlich dem Sehvermögen – ca. Fahrbahn) aufgrund von wiederholtem Stress.

Einige dieser Effekte und die Ergebnisse sind seit langem bekannt ForschungIn einem bereits 1976 in der Fachzeitschrift „Ergonomie“ veröffentlichten Text heißt es, dass eine Verzögerung von 100 Millisekunden „die Tippgeschwindigkeit erheblich beeinträchtigt“. Kürzlich wurde das GNOME-Benutzerhandbuch eingeführt akzeptable Reaktionszeit in 10 Millisekunden, und wenn Sie noch weiter gehen, dann Microsoft Research zeigt, dass 1 Millisekunde ideal ist.

Fatin führte seine Tests mit Texteditoren durch; Er schuf ein tragbares Instrument namens Typometermit dem ich Ping in Terminalemulatoren getestet habe. Bedenken Sie, dass der Test im Simulationsmodus durchgeführt wurde: In der Realität müssen wir sowohl die Eingabe- (Tastatur, USB-Controller usw.) als auch die Ausgabelatenz (Grafikkartenpuffer, Monitor) berücksichtigen. Laut Fatin liegt sie in typischen Konfigurationen bei etwa 20 ms. Wenn Sie über eine Gaming-Ausrüstung verfügen, können Sie diesen Wert in nur 3 Millisekunden erreichen. Da wir bereits über eine so schnelle Hardware verfügen, muss die Anwendung keine eigene Latenz hinzufügen. Fatins Ziel ist es, die Anwendungslatenz auf 1 Millisekunde zu bringen oder sogar das Wählen ohne zu erreichen messbare Verzögerung, wie in IntelliJ IDEA 15.

Hier sind die Ergebnisse meiner Messungen sowie einige von Fatins Ergebnissen, um zu zeigen, dass mein Experiment mit seinen Tests übereinstimmt:

Übersicht über Terminalemulatoren

Das erste, was mir auffiel, war die bessere Reaktionszeit älterer Programme wie xterm und mlterm. Mit der schlechtesten Registerlatenz (2,4 ms) schnitten sie besser ab als das schnellste moderne Terminal (10,6 ms für st). Kein modernes Terminal unterschreitet die 10-Millisekunden-Schwelle. Insbesondere erfüllt Alacritty nicht den Anspruch, „schnellster verfügbarer Terminalemulator“ zu sein, obwohl sich seine Ergebnisse seit der ersten Überprüfung im Jahr 2017 verbessert haben. Tatsächlich die Autoren des Projekts sich der Situation bewusst und arbeiten an einer Verbesserung der Darstellung. Es sollte auch beachtet werden, dass Vim, das GTK3 verwendet, um eine Größenordnung langsamer ist als sein GTK2-Gegenstück. Daraus können wir schließen, dass GTK3 zusätzliche Latenz erzeugt, und dies spiegelt sich in allen anderen Terminals wider, die es verwenden (Terminator, Xfce4-Terminal und GNOME-Terminal).

Allerdings sind die Unterschiede für das Auge möglicherweise nicht erkennbar. Wie Fatin erklärt: „Sie müssen sich der Verzögerung nicht bewusst sein, damit sie eine Wirkung auf Sie hat.“ Fatin warnt auch vor der Standardabweichung: „Jede Latenzstörung (Jitter) erzeugt aufgrund ihrer Unvorhersehbarkeit zusätzlichen Stress.“

Übersicht über Terminalemulatoren

Die obige Grafik wurde mit reinem Debian 9 (Stretch) erstellt i3-Fenstermanager. Diese Umgebung liefert die besten Ergebnisse bei Latenztests. Wie sich herausstellt, erzeugt GNOME für alle Messungen einen zusätzlichen Ping von 20 ms. Eine mögliche Erklärung hierfür ist das Vorhandensein von Programmen mit synchroner Verarbeitung von Eingabeereignissen. Fatin gibt ein Beispiel für einen solchen Fall Workrave, was eine Verzögerung hinzufügt, indem alle Eingabeereignisse synchron verarbeitet werden. Standardmäßig bringt GNOME auch einen Fenstermanager mit Mutter, wodurch eine zusätzliche Pufferschicht entsteht, die sich auf den Ping auswirkt und eine Latenz von mindestens 8 Millisekunden hinzufügt.

Übersicht über Terminalemulatoren

Scrollgeschwindigkeit

Der nächste Test ist ein herkömmlicher „Geschwindigkeits-“ oder „Bandbreiten“-Test, der misst, wie schnell das Terminal eine Seite scrollen kann, während große Textmengen auf dem Bildschirm angezeigt werden. Die Mechanik des Tests variiert; Der ursprüngliche Test bestand darin, einfach dieselbe Textzeichenfolge mit dem Befehl seq zu generieren. Zu den weiteren Tests gehört der Test von Thomas E. Dickey (xterm-Maintainer), der wiederholt durchgeführt wird Die Datei terminfo.src wird heruntergeladen. In einer weiteren Überprüfung der Terminalleistung Den Luu verwendet eine Base32-codierte Zeichenfolge zufälliger Bytes, die mithilfe von cat an das Terminal ausgegeben wird. Luu hält einen solchen Test für einen „so nutzlosen Maßstab, wie man sich vorstellen kann“ und schlägt vor, stattdessen die Endantwort als primäre Metrik zu verwenden. Dickey bezeichnet seinen Test auch als irreführend. Allerdings erkennen beide Autoren an, dass die Bandbreite des Terminalfensters ein Problem darstellen kann. Luu entdeckte, dass Emacs Eshell bei der Anzeige großer Dateien einfrierte, und Dickey optimierte das Terminal, um die visuelle Trägheit von xtrerm zu beseitigen. Dieser Test hat also immer noch einige Vorteile, aber da der Rendering-Prozess von Terminal zu Terminal sehr unterschiedlich ist, kann er auch als Testkomponente zum Testen anderer Parameter verwendet werden.

Übersicht über Terminalemulatoren

Hier sehen wir, wie der RxVT und der ST die Konkurrenz hinter sich lassen, gefolgt vom viel neueren Alacritty, der mit Fokus auf Leistung entwickelt wurde. Als nächstes folgen Xfce (VTE-Familie) und Konsole, die fast doppelt so schnell sind. Als letztes kommt xterm, das fünfmal langsamer als rxvt ist. Während des Tests kam es bei xterm auch zu starken Wellen, was es schwierig machte, übergebenen Text zu erkennen, selbst wenn es sich um dieselbe Zeile handelte. Konsole war schnell, aber manchmal war es knifflig: Die Anzeige fror von Zeit zu Zeit ein und zeigte teilweise oder gar keinen Text an. Andere Terminals zeigten Zeichenfolgen deutlich an, darunter st, Alacritty und rxvt.

Dickey erklärt, dass die Leistungsunterschiede auf das Design der Scroll-Puffer in verschiedenen Terminals zurückzuführen sind. Insbesondere wirft er rxvt und anderen Terminals vor, „sich nicht an die allgemeinen Regeln zu halten“:

„Im Gegensatz zu xterm hat rxvt nicht versucht, alle Updates anzuzeigen. Wenn es in Rückstand gerät, verweigert es einige Aktualisierungen, um aufzuholen. Dies hatte einen größeren Einfluss auf die scheinbare Scrollgeschwindigkeit als auf die interne Speicherorganisation. Ein Nachteil war, dass die ASCII-Animation etwas ungenau war.

Um diese wahrgenommene Trägheit von xterm zu beheben, schlägt Dickey die Verwendung der Ressource vor schnellScrollDadurch kann xterm einige Bildschirmaktualisierungen verwerfen, um mit dem Fluss Schritt zu halten. Meine Tests bestätigen, dass fastScroll die Leistung verbessert und xterm mit rxvt gleichsetzt. Dies ist jedoch eine ziemlich schwierige Krücke, wie Dickey selbst erklärt: „Manchmal scheint xterm – wie die Konsole – ins Stocken zu geraten, während es auf eine neue Reihe von Bildschirmaktualisierungen wartet, nachdem einige entfernt wurden.“ In diesem Sinne scheinen andere Terminals den besten Kompromiss zwischen Geschwindigkeit und Anzeigeintegrität gefunden zu haben.

Ressourcenverbrauch

Unabhängig davon, ob es sinnvoll ist, die Scrollgeschwindigkeit als Leistungsmetrik zu berücksichtigen, können wir mit diesem Test die Auslastung der Terminals simulieren und so andere Parameter wie Speicher- oder Festplattennutzung messen. Die Metriken wurden durch Ausführen des angegebenen Tests ermittelt ff unter Python-Prozessüberwachung. Er sammelte Zählerdaten getrusage() für ru_maxrss, Menge ru_oublock и ru_inblock und ein einfacher Timer.

Übersicht über Terminalemulatoren

In diesem Test belegt der ST den ersten Platz mit dem geringsten durchschnittlichen Speicherverbrauch von 8 MB, was nicht verwunderlich ist, wenn man bedenkt, dass der Hauptgedanke des Designs auf Einfachheit basiert. mlterm, xterm und rxvt verbrauchen etwas mehr – etwa 12 MB. Ein weiteres bemerkenswertes Ergebnis ist Alacritty, dessen Ausführung 30 MB erfordert. Dann gibt es Terminals der VTE-Familie mit Werten von 40 bis 60 MB, was ziemlich viel ist. Dieser Verbrauch kann durch die Tatsache erklärt werden, dass diese Terminals Bibliotheken höherer Ebene verwenden, beispielsweise GTK. Konsole landet bei Tests mit satten 65 MB Speicherverbrauch auf dem letzten Platz, obwohl dies durch den sehr großen Funktionsumfang gerechtfertigt werden kann.

Im Vergleich zu früheren Ergebnissen vor zehn Jahren begannen alle Programme spürbar mehr Speicher zu verbrauchen. Früher benötigte Xterm 4 MB, jetzt benötigt es allein beim Start 15 MB. Ein ähnlicher Anstieg des Verbrauchs ist für rxvt zu verzeichnen, das nun standardmäßig 16 MB benötigt. Das Xfce-Terminal benötigt 34 ​​MB und ist damit dreimal so groß wie zuvor, das GNOME-Terminal benötigt jedoch nur 20 MB. Selbstverständlich wurden alle bisherigen Tests auf einer 32-Bit-Architektur durchgeführt. Bei LCA 2012 Rusty Russell sagte, dass es noch viele weitere subtile Gründe gibt, die den Anstieg des Speicherverbrauchs erklären könnten. Allerdings leben wir jetzt in einer Zeit, in der wir über Gigabyte an Speicher verfügen, also kommen wir schon irgendwie zurecht.

Ich komme jedoch nicht umhin, das Gefühl zu haben, dass die Zuweisung von mehr Speicher für etwas so Grundlegendes wie das Terminal eine Verschwendung von Ressourcen ist. Diese Programme sollten die kleinsten der kleinsten sein und auf jeder „Box“, sogar einem Schuhkarton, laufen können, falls wir jemals an den Punkt kommen, an dem sie mit Linux-Systemen ausgestattet werden müssen (und Sie wissen, dass dies der Fall sein wird). ). Aber angesichts dieser Zahlen wird die Speichernutzung in Zukunft in jeder Umgebung, in der mehrere Terminals ausgeführt werden, zu einem Problem werden, mit Ausnahme einiger der leichtesten und leistungsschwächsten Terminals. Um dies zu kompensieren, verfügen GNOME Terminal, Konsole, urxvt, Terminator und Xfce Terminal über einen Daemon-Modus, der es Ihnen ermöglicht, mehrere Terminals über einen einzigen Prozess zu steuern und so deren Speicherverbrauch zu begrenzen.

Übersicht über Terminalemulatoren

Während meiner Tests kam ich zu einem weiteren unerwarteten Ergebnis bezüglich des Lese-/Schreibzugriffs auf die Festplatte: Ich hatte erwartet, überhaupt nichts zu sehen, aber es stellte sich heraus, dass einige Terminals die umfangreichsten Daten auf die Festplatte schreiben. Die VTE-Bibliothek behält also tatsächlich einen Scroll-Puffer auf der Festplatte (diese Funktion). wurde bereits 2010 bemerkt, und das passiert immer noch). Aber im Gegensatz zu älteren Implementierungen werden jetzt zumindest diese Daten mit AES256 GCM verschlüsselt (ab Version 0.39.2). Es stellt sich jedoch die berechtigte Frage: Was ist das Besondere an der VTE-Bibliothek, dass sie einen so nicht standardmäßigen Implementierungsansatz erfordert?

Abschluss

Im ersten Teil des Artikels haben wir herausgefunden, dass VTE-basierte Terminals über gute Funktionen verfügen, aber jetzt sehen wir, dass dies mit einigen Leistungseinbußen verbunden ist. Jetzt ist der Speicher kein Problem mehr, da alle VTE-Terminals über einen Daemon-Prozess gesteuert werden können, was ihren Appetit einschränkt. Allerdings benötigen ältere Systeme, die physische Einschränkungen hinsichtlich der Menge an RAM und Kernel-Puffer haben, möglicherweise immer noch frühere Versionen von Terminals, da diese deutlich weniger Ressourcen verbrauchen. Obwohl VTE-Terminals bei Durchsatztests (Scrollen) gut abgeschnitten haben, liegt ihre Anzeigelatenz über dem im GNOME-Benutzerhandbuch festgelegten Schwellenwert. VTE-Entwickler sollten dies wahrscheinlich berücksichtigen. Wenn wir berücksichtigen, dass selbst unerfahrene Linux-Benutzer unvermeidlich auf ein Terminal stoßen, können sie es benutzerfreundlicher gestalten. Für erfahrene Geeks bedeutet der Wechsel vom Standardterminal möglicherweise sogar eine geringere Belastung der Augen und die Möglichkeit, zukünftige arbeitsbedingte Verletzungen und Krankheiten aufgrund langer Arbeitssitzungen zu vermeiden. Leider bringen uns nur die alten xterm und mlterm an die magische Ping-Schwelle von 10 Millisekunden, was für viele inakzeptabel ist.

Benchmark-Messungen zeigten zudem, dass Entwickler aufgrund der Entwicklung grafischer Linux-Umgebungen eine Reihe von Kompromissen eingehen mussten. Einige Benutzer möchten möglicherweise einen Blick auf normale Fenstermanager werfen, da diese eine erhebliche Ping-Reduzierung ermöglichen. Leider war es für Wayland nicht möglich, die Latenz zu messen: Das von mir verwendete Typometer-Programm wurde für das entwickelt, was Wayland verhindern soll: das Ausspionieren anderer Fenster. Ich hoffe, dass Wayland-Compositing besser abschneidet als X.org, und ich hoffe auch, dass in Zukunft jemand einen Weg findet, die Latenz in dieser Umgebung zu messen.

Source: habr.com

Kommentar hinzufügen