Przegląd emulatorów terminali

Kilka słów od naszego biura tłumaczeń: zazwyczaj wszyscy starają się tłumaczyć najnowsze materiały i publikacje, i my nie jesteśmy wyjątkiem. Ale terminale to nie coś, co aktualizuje się co tydzień. Dlatego przetłumaczyliśmy artykuł Antoine’a Bopré, opublikowany wiosną 2018 roku: mimo solidnego jak na dzisiejsze czasy „wieku”, naszym zdaniem materiał wciąż ma aktualne znaczenie. Ponadto oryginał to seria dwóch artykułów, ale postanowiliśmy połączyć je w jeden duży post.

Przegląd emulatorów terminali

Terminale zajmują szczególne miejsce w historii komputerów, ale w ostatnich dziesięcioleciach były dosłownie zmuszone do przetrwania obok linii poleceń w erze powszechnie rozwijających się interfejsów graficznych. Emulatory terminali zastąpiły swoich sprzętowych odpowiedników, które z kolei były modyfikacją systemów opartych na kartach perforowanych i przekaźnikach. Nowoczesne dystrybucje dostarczane są z całą gamą emulatorów terminali w różnych kształtach i kolorach. I podczas gdy wielu zadowala się standardowym terminalem, który oferuje ich środowisko robocze, niektórzy z dumą korzystają z wyraźnie egzotycznego oprogramowania do uruchamiania swojej ulubionej powłoki lub edytora tekstu. Ale, jak zobaczymy w tym artykule, nie wszystkie terminale zostały stworzone na jedno podobieństwo: różnią się znacznie pod względem funkcjonalności, rozmiaru i wydajności.

Niektóre terminale mają wręcz zaskakujące luki w bezpieczeństwie, a większość z nich posiada zupełnie różny zestaw funkcji, od wsparcia dla interfejsu z zakładkami po skrypty. Chociaż my zajmowaliśmy się emulatorami terminali w odległej przeszłości, ten artykuł jest aktualizacją poprzedniego materiału, który pomoże czytelnikom zdecydować, którego terminala używać w 2018 roku. W pierwszej części artykułu porównane są funkcje, a w drugiej oceniana jest wydajność.

Oto terminale, które rozważałem:

Przegląd emulatorów terminali

Możliwe, że to nie są najnowsze wersje, ponieważ opierałem się na stabilnych wydaniach w momencie pisania materiału, które udało mi się zainstalować na Debianie 9 lub Fedora 27. Jedynym wyjątkiem jest Alacritty. Jest to następca terminali z przyspieszeniem GPU i został napisany w nietypowym i nowym dla tego zadania języku – Rust. Wykluczyłem ze swojego przeglądu terminale webowe (w tym na Electron), ponieważ wstępne testy pokazały ich niezwykle niską wydajność.

Wsparcie dla Unicode

Swoje testy zaczynałem od wsparcia dla Unicode. Pierwszym testem terminali było wyświetlenie linii o Unicode z artykułu na Wikipedii: „é, Δ, Й, ק, م, ๗, あ, 叶, 葉 i 말”. Ten prosty test pokazuje, czy terminal może poprawnie działać na całym świecie. Terminal xterm nie wyświetla arabskiego znaku Mem w konfiguracji domyślnej:

Przegląd emulatorów terminali

Domyślnie xterm używa klasycznej „stałej” czcionki, która, według tego samego WIKI, ma „istotne wsparcie dla Unicode od 1997 roku”. W tej czcionce dzieje się coś, co powoduje, że znak wyświetla się jako pusta ramka, a dopiero po zwiększeniu rozmiaru tekstu do 20+ punktów, znak zaczyna prawidłowo się wyświetlać. Jednak taki „fix” psuje wyświetlanie innych znaków Unicode:

Przegląd emulatorów terminali

Te zrzuty ekranu zostały zrobione na Fedora 27, ponieważ to ona dawała lepsze wyniki niż Debian 9, gdzie niektóre starsze wersje terminali (konkretnie – mlterm) nie mogły działać poprawnie z czcionkami. Na szczęście to zostało naprawione w późniejszych wersjach.

Zwróć uwagę na wyświetlanie linii w xterm. Okazuje się, że znak Mem i następny po nim Semitic Qoph należą do skryptów rysowania RTL (od prawej do lewej), dlatego technicznie powinny być wyświetlane od prawej do lewej. Przeglądarki internetowe, takie jak Firefox 57, poprawnie obsługują powyższą linię. Prostszym przykładem tekstu RTL jest słowo „Sara” po hebrajsku (שרה). Strona WIKI o tekstach dwukierunkowych mówi następująco:

„Wiele programów komputerowych nie może poprawnie wyświetlać tekstu dwukierunkowego. Na przykład hebrajskie imię „Sara” składa się z liter syn (ש) (który pojawia się z prawej), następnie resz (ר) i w końcu che (ה) (który powinien pojawiać się z lewej)”.

Wiele terminali nie przechodzi tego testu: Alacritty, terminale oparte na VTE z Gnome i XFCE, urxvt, st oraz xterm wyświetlają „Sara” w odwrotnej kolejności, jakbyśmy zapisywali to imię jako „Aras”.

Przegląd emulatorów terminali

Innym problemem tekstów dwukierunkowych jest to, że trzeba je jakoś wyrównać, szczególnie w przypadku mieszania tekstów RTL i LTR. Scenariusze RTL powinny zaczynać z prawej strony okna terminala, ale co powinno się wydarzyć w terminalach, które domyślnie działają w LTR po angielsku? Większość z nich nie posiada specjalnych mechanizmów i wyrównuje cały tekst do lewej (w tym w Konsole). Wyjątkiem są pterm i mlterm, które przestrzegają standardów i wyrównują takie linie do prawej.

Przegląd emulatorów terminali

Ochrona przed wklejaniem

Następną krytyczną cechą, którą dla siebie określiłem, jest ochrona przed wklejaniem. Choć powszechnie wiadomo, że polecenia typu:

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

są komendami wykonawczymi, niewiele osób wie, że ukryte komendy mogą przedostać się do konsoli przy kopiowaniu-wklejaniu z przeglądarki, nawet po dokładnym sprawdzeniu. Strona kontrolna Janna Horna doskonale pokazuje, jak wyglądająca na pozór nieszkodliwa komenda:

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

przekształca się podczas wklejania z strony Horna w coś tak nieprzyjemnego:

git clone /dev/null;
	clear;
	echo -n "Cześć ";
	whoami|tr -d 'n';
	echo -e '!nTo był zły pomysł. Nie kopiuj kodu z nieznanych stron! 
	Oto pierwsza linia twojego /etc/passwd: ';
	head -n1 /etc/passwd
	git clone git://git.kernel.org/pub/scm/utils/kup/kup.git

Jak to działa? Złośliwy kod jest wydobyty z bloku , który jest przenoszony z pola widzenia użytkownika za pomocą CSS.

Tryb wklejania w klamrach jest wyraźnie zaprojektowany w celu neutralizacji podobnych ataków. W tym trybie terminale otaczają wklejany tekst parą specjalnych sekwencji escape, aby poinformować powłokę o pochodzeniu tego tekstu. W ten sposób powłoka otrzymuje sygnał, że może zignorować specjalne znaki, które może zawierać wklejany tekst. Wszystkie terminale, aż po szanowanego xterm, obsługują tę funkcję, ale wklejanie w trybie w klamrach wymaga wsparcia powłoki lub aplikacji uruchomionej w terminalu. Na przykład, oprogramowanie używające GNU Readline (ten sam Bash), potrzebuje pliku ~ /.inputrc:

set enable-bracketed-paste on

Niestety, testowa strona Horna również pokazuje, jak obejść tę ochronę poprzez samo formatowanie tekstu i przedwcześnie zakończyć stosowanie trybu Bracketed. Działa to, ponieważ niektóre terminale błędnie filtrują sekwencje escape przed dodaniem swoich własnych. Na przykład, w moich próbach nie udało mi się pomyślnie zakończyć testów Konsole, nawet przy poprawnej konfiguracji. .inputrc plik. Oznacza to, że z łatwością możesz uszkodzić konfigurację systemu z powodu nieobsługiwanej aplikacji lub źle skonfigurowanej powłoki. Jest to szczególnie niebezpieczne podczas logowania się do zdalnych serwerów, gdzie staranna obróbka konfiguracji zdarza się rzadziej, zwłaszcza jeśli masz wiele takich zdalnych maszyn.

Dobrym rozwiązaniem tego problemu jest wtyczka do potwierdzenia wklejania dla terminala urxvt, która po prostu prosi o zgodę na wklejenie dowolnego tekstu zawierającego nowe linie. Nie znalazłem bardziej zabezpieczonej opcji dla opisywanego przez Horna ataku tekstowego.

Karty i profile

Popularną funkcją obecnie jest wsparcie interfejsu z kartami, które definiujemy jako jedno okno terminala zawierające kilka terminali. Dla różnych terminali ta funkcja różni się, i chociaż tradycyjne terminale typu xterm w ogóle nie obsługują kart, bardziej nowoczesne wcielenia terminala w postaci Xfce Terminal, GNOME Terminal i Konsole tę funkcję mają. Wsparcie kart posiada również Urxvt, ale tylko pod warunkiem użycia wtyczki. Jednak z punktu widzenia wsparcia kart bezsprzecznym liderem jest Terminator: nie tylko obsługuje karty, ale także może układać terminale w dowolnej kolejności (patrz obrazek poniżej).

Przegląd emulatorów terminali

Kolejną cechą Terminatora jest możliwość „grupowania” tych kart razem i wysyłania tych samych naciśnięć klawiszy do kilku terminali jednocześnie, co zapewnia prosty instrument do wykonywania masowych operacji na kilku serwerach jednocześnie. Podobna funkcja jest również zrealizowana w Konsole. Aby skorzystać z tej funkcji w innych terminalach, należy użyć oprogramowania stron trzecich, takiego jak Cluster SSH, xlax lub tmux.

Zakładki szczególnie dobrze działają w połączeniu z profilami: na przykład możesz mieć jedną zakładkę do poczty elektronicznej, drugą do czatu itd. Jest to dobrze wspierane przez terminale Konsole i GNOME Terminal. Oba pozwalają każdej zakładce na automatyczne uruchamianie swojego profilu. Terminator również wspiera profile, ale nie mogłem znaleźć sposobu na automatyczne uruchamianie określonych programów przy otwieraniu konkretnej zakładki. Inne terminale w ogóle nie mają pojęcia o 'profilu'.

Falbany

Ostatnią rzeczą, którą omówię w pierwszej części tego artykułu, jest wygląd terminali. Na przykład GNOME, Xfce i urxvt wspierają przezroczystość, ale ostatnio wycofano wsparcie dla obrazów tła, co spowodowało, że niektórzy użytkownicy przeszli na inny terminal. Tilix. Osobiście mi to odpowiada i jest po prostu Xresources, który ustawia podstawowy zestaw kolorów tła dla urxvt. Jednak niestandardowe motywy kolorów mogą powodować problemy. Na przykład, Solarized nie działa z aplikacjami htop i IPTraf, ponieważ już używają swoich kolorów.

Oryginalny terminal VT100 nie wspierał kolorów, a nowe często były ograniczone do palety 256 kolorów. Dla zaawansowanych użytkowników, którzy stylizują swoje terminale, prośby o powłokę lub linie stanu w sposób złożony mogą stać się nieprzyjemnym ograniczeniem. Gist śledzi, które terminale mają wsparcie dla 'True Color'. Moje testy potwierdzają, że st, Alacritty i terminale oparte na VTE doskonale wspierają True Color. Inne terminale w tym zakresie wypadają dość słabo i w rzeczywistości nie wyświetlają nawet 256 kolorów. Poniżej możesz zobaczyć różnicę w wsparciu True Color w terminalach GNOME, st i xterm, które dobrze spełniają to zadanie za pomocą swojej 256-kolorowej palety, i urxvt, który nie tylko nie przechodzi testu, ale nawet pokazuje migające symbole zamiast nich.

Przegląd emulatorów terminali

Niektóre terminale również analizują tekst pod kątem wzorców URL, aby uczynić linki klikalnymi. Dotyczy to wszystkich terminali pochodnych od VTE, podczas gdy urxvt wymaga specjalnego modułu wtyczki, aby przekształcać adresy URL po kliknięciu lub za pomocą skrótu klawiaturowego. Inne terminale, które testowałem, wyświetlają adresy URL w inny sposób.

Wreszcie nowym trendem terminali jest opcjonalność bufora przewijania. Na przykład w st nie ma bufora przewijania; zakłada się, że użytkownik będzie korzystał z multiplexerów terminalowych, takich jak tmux i GNU Screen.

W Alacritty również brakuje buforów przewijania wstecz, ale wkrótce zostanie dodana jego obsługa z powodu «obszernej informacji zwrotnej» na ten temat od użytkowników. Oprócz tych nowości każdy terminal, który udało mi się znaleźć, obsługuje wsteczne przewijanie.

Podsumowanie pośrednie

W drugiej części materiału (w oryginale były to dwa różne artykuły, — przyp. red.) porównamy wydajność, zużycie pamięci i opóźnienie. Już teraz widzimy, że niektóre z omawianych terminali mają poważne wady. Na przykład, użytkownicy regularnie pracujący z skryptami RTL mogą zwrócić uwagę na mlterm i pterm, ponieważ lepiej radzą sobie z takimi zadaniami. Konsole również dobrze się spisuje. Użytkownicy, którzy nie pracują z skryptami RTL, mogą wybrać coś innego.

Z punktu widzenia ochrony przed wstawianiem złośliwego kodu urxvt wyróżnia się z powodu swojej szczególnej implementacji ochrony przed tym rodzajem ataków, co uważam za z pewnością wygodne. Osoby szukające jakichkolwiek udogodnień powinny spojrzeć na Konsole. Na koniec warto zauważyć, że VTE to doskonała baza dla terminali, która gwarantuje wsparcie dla kolorów, rozpoznawanie URL itd. Na pierwszy rzut oka domyślny terminal dostarczany z twoim ulubionym środowiskiem może spełniać wszystkie wymagania, ale pozostawimy to pytanie otwarte, dopóki nie przeanalizujemy wydajności.

Kontynuujemy rozmowę


Ogólnie wydajność terminali może wydawać się wymyślonym problemem, jednak jak się okazało, niektóre z nich wykazują zaskakująco dużą latencję dla oprogramowania tego podstawowego typu. Dalsze rozważania będą dotyczyć tego, co tradycyjnie nazywa się „szybkością” (w rzeczywistości chodzi o szybkość przewijania) oraz zużycia pamięci przez terminal (z uwagi na to, że obecnie nie jest to tak krytyczne jak dziesięciolecia temu).

Opóźnienie

Po dokładnym zbadaniu wydajności terminali doszedłem do wniosku, że najważniejszym parametrem w tej kwestii jest wielkość opóźnienia (ping). W swoim artykule „Drukujemy z przyjemnością“ Paweł Fatin przyjrzał się opóźnieniom różnych edytorów tekstu i zasugerował, że terminale w tym względzie mogą działać wolniej od najszybszych edytorów tekstu. To właśnie ta sugestia doprowadziła mnie ostatecznie do uruchomienia własnych testów i napisania tego artykułu.

Ale czym jest opóźnienie i dlaczego jest tak ważne? W swoim artykule Fatin zdefiniował je jako „opóźnienie między naciśnięciem klawisza a odpowiednim aktualizowaniem ekranu” i zacytował „Podręcznik interakcji człowieka z komputerem”, w którym mówi się: „Opóźnienie w wizualnym sprzężeniu zwrotnym na ekranie komputera ma istotny wpływ na zachowanie operatora i jego satysfakcję”.

Fatin wyjaśnia, że to opóźnienie ma głębsze konsekwencje niż tylko satysfakcja: „pisanie staje się wolniejsze, pojawia się więcej błędów, rośnie napięcie oczu i mięśni”. Innymi słowy, większe opóźnienie może prowadzić do literówek oraz obniżenia jakości kodu, ponieważ zwiększa dodatkowe obciążenie poznawcze mózgu. Ale co gorsza, opóźnienie „zwiększa napięcie oczu i mięśni”, co najwyraźniej implikuje rozwój urazów zawodowych w przyszłości (najwyraźniej autor ma na myśli problemy z mięśniami oczu, plecami, rękami i, oczywiście, wzrokiem - przyp. red.) spowodowane powtarzającym się napięciem.

Niektóre z tych efektów są znane od dawna, a wyniki badań, opublikowanego już w 1976 roku w czasopiśmie Ergonomics, mówią, że opóźnienie wynoszące 100 milisekund „znacząco pogarsza prędkość pisania”. Całkiem niedawno w podręczniku użytkownika GNOME wprowadzono akceptowalny czas reakcji wynoszący 10 milisekund, a jeśli chodzi o ideały, to Microsoft Research pokazuje, że ideałem jest 1 milisekunda.

Fatin przeprowadził swoje testy na edytorach tekstowych; stworzył przenośne narzędzie o nazwie Typometer, który używałem do testowania pingu w emulatorach terminala. Należy pamiętać, że test był przeprowadzany w trybie symulacji: w rzeczywistości musimy uwzględnić również opóźnienie wejścia (klawiatura, kontroler USB itd.) oraz wyjścia (bufor karty graficznej, monitor). Według Fatina w typowych konfiguracjach wynosi ono około 20 ms. Przy użyciu sprzętu gamingowego można osiągnąć wynik zaledwie 3 milisekund. Ponieważ już mamy taki szybki sprzęt, aplikacja nie powinna wprowadzać dodatkowego opóźnienia. Celem Fatina jest doprowadzenie opóźnienia aplikacji do 1 milisekundy lub wręcz osiągnięcie zestawu bez mierzalnego opóźnienia, jak w IntelliJ IDEA 15.

Poniżej wyniki moich pomiarów oraz niektóre wyniki Fatina, aby pokazać, że mój eksperyment jest zgodny z jego testami:

Przegląd emulatorów terminali

Pierwszą rzeczą, która mnie zaskoczyła, jest lepszy czas reakcji w starszych programach, takich jak xterm i mlterm. Przy najgorszym opóźnieniu rejestru (2,4 ms) osiągnęły one rezultat lepszy niż najszybszy nowoczesny terminal (10,6 ms dla st). Żaden nowoczesny terminal nie spada poniżej progu 10 milisekund. W szczególności Alacritty nie spełnia wymagań „najszybszego z istniejących emulatorów terminala”, chociaż jego wyniki poprawiły się od pierwszej kontroli w 2017 roku. Rzeczywiście, autorzy projektu są świadomi sytuacji i pracują nad poprawą wydajności. Należy również zauważyć, że Vim, używający GTK3, jest znacznie wolniejszy od swojego odpowiednika GTK2. Z tego można wywnioskować, że GTK3 wprowadza dodatkowe opóźnienie, a to wpływa na wszystkie inne terminale, które go używają (Terminator, Xfce4 Terminal i GNOME Terminal).

Jednak różnice mogą być niewidoczne dla oka. Jak tłumaczy Fatin: „niekoniecznie trzeba być świadomym opóźnienia, aby miało ono na ciebie wpływ”. Fatin ostrzega również przed odchyleniem standardowym: „jakiekolwiek zakłócenia w czasie opóźnienia (drganie) generują dodatkowe obciążenie z powodu ich nieprzewidywalności.”

Przegląd emulatorów terminali

Wykres powyżej został uzyskany na czystym Debianie 9 (stretch) z menedżerem okien i3To środowisko zapewnia najlepsze wyniki w testach opóźnienia. Okazało się, że GNOME generuje dodatkowe opóźnienie wynoszące 20 ms we wszystkich pomiarach. Możliwe wyjaśnienie tego to obecność programów z synchronicznym przetwarzaniem zdarzeń wejściowych. Fatin przywołuje taki przypadek jako przykład Workrave, który dodaje opóźnienie, przetwarzając wszystkie zdarzenia wejściowe synchronicznie. Domyślnie GNOME wyposażony jest także w menedżera okien Mutter, który tworzy dodatkowy poziom buforowania, co wpływa na ping i dodaje co najmniej 8 milisekund opóźnienia.

Przegląd emulatorów terminali

Szybkość przewijania

Następnym testem jest tradycyjna kontrola »szybkości« lub »przepustowości«, która mierzy, jak szybko terminal może przewijać stronę, wyświetlając dużą ilość tekstu na ekranie. Mechanika testu różni się; oryginalny test polegał na prostym generowaniu tej samej linii tekstu za pomocą polecenia seq. Inne testy obejmują sprawdzenie Thomasa E. Dicka (towarzyszącego xterm), w ramach którego wielokrotnie zrzucany jest plik terminfo.src. W jeszcze jednym przeglądzie wydajności terminali Den Liu używa ciągu losowych bajtów w kodowaniu base32, który jest wyświetlany w terminalu za pomocą cat. Liu uważa ten test za »tak bezużyteczny wzorzec, jak to tylko możliwe« i proponuje zamiast tego użyć reakcji terminala jako głównego wskaźnika. Dick również określa swój test jako wprowadzający w błąd. Niemniej jednak obaj autorzy przyznają, że przepustowość okna terminala może być problemem. Liu odkrył zawieszanie się Emacs Eshell przy wyświetlaniu dużych plików, a Dick zoptymalizował terminal, aby pozbyć się wizualnego opóźnienia xterm. Dlatego ten test ma jeszcze pewien sens, ale ponieważ proces renderowania znacznie różni się w zależności od terminala, można go wykorzystać również jako komponent testowy do sprawdzania innych parametrów.

Przegląd emulatorów terminali

Tutaj widzimy, że rxvt i st przodują wśród konkurencji, a za nimi plasuje się znacznie nowszy Alacritty, opracowywany z myślą o wydajności. Dalej są Xfce (rodzina VTE) i Konsole, które działają prawie dwa razy szybciej. Na końcu jest xterm, który jest pięć razy wolniejszy niż rxvt. W trakcie testu xterm często migał, a przechodzący tekst był trudny do dostrzeżenia, nawet jeśli chodziło o tę samą linię. Konsole okazał się szybki, ale czasami „oszukiwał”: wyświetlacz od czasu do czasu zawieszał się, pokazując tekst częściowo lub w ogóle go nie wyświetlając. Inne terminale wyświetlały linie wyraźnie, w tym st, Alacritty i rxvt.

Diki wyjaśnia, że różnice w wydajności są związane z projektowaniem buforów przewijania w różnych terminalach. W szczególności obwinia rxvt i inne terminale o to, że „nie przestrzegają ogólnych zasad”:

„W przeciwieństwie do xterm, rxvt nie próbował wyświetlić wszystkich aktualizacji. Jeśli się spóźniał, rezygnował z niektórych aktualizacji, aby nadrobić zaległości. Miało to większy wpływ na pozorną szybkość przewijania, niż na organizację pamięci wewnętrznej. Jedną z wad było to, że animacja ASCII była nieco niedokładna”.

Aby naprawić tę pozorną wolność xterm, Diki sugeruje użycie zasobu fastScroll, który pozwala xterm na pomijanie niektórych aktualizacji ekranu, aby nie pozostawał w tyle za strumieniem. Moje testy potwierdzają, że fastScroll zwiększa wydajność i sprawia, że xterm osiąga poziom z rxvt. Jest to jednak dość prymitywne obejście, jak sam wyjaśnia Diki: „czasami xterm — podobnie jak konsole — wydaje się zatrzymywać, ponieważ czeka na nowy zestaw aktualizacji ekranu po tym, jak niektóre z nich zostały usunięte”. W tym kontekście wydaje się, że inne terminale znalazły najlepszy kompromis między szybkością a integralnością wyświetlania.

Zużycie zasobów

Bez względu na to, na ile sensowne jest rozważanie prędkości przewijania jako wskaźnika wydajności, ten test pozwala na symulację obciążenia terminali, co z kolei pozwala nam mierzyć inne parametry, takie jak wykorzystanie pamięci lub dysku. Metryki uzyskano poprzez uruchomienie podanego testu seq pod monitorowaniem procesu Python. Zbierał dane liczników getrusage () do ru_maxrss, sumy ru_oublock i ru_inblock i prosty timer czasu.

Przegląd emulatorów terminali

W teście ST zajmuje pierwsze miejsce z najmniejszym średnim zużyciem pamięci wynoszącym 8 MB, co nie jest zaskakujące, biorąc pod uwagę, że główną ideą projektu jest prostota. Nieco więcej pamięci konsumują mlterm, xterm i rxvt - około 12 MB. Kolejnym znaczącym wynikiem jest Alacritty, który do działania potrzebuje 30 MB. Następnie są terminale z rodziny VTE z wynikami od 40 do 60 MB, co jest stosunkowo dużo. Takie zużycie można wyjaśnić tym, że te terminale korzystają z bibliotek wyższego poziomu, takich jak GTK. Konsole zajmuje ostatnie miejsce z gigantycznym zużyciem 65 MB pamięci podczas testów, choć można to usprawiedliwić jej bardzo szerokim zestawem funkcji.

W porównaniu do wcześniejszych wyników uzyskanych dziesięć lat temu, wszystkie programy zaczęły zużywać zauważalnie więcej pamięci. Kiedyś Xterm wymagał 4 MB, a teraz - 15 MB tylko na uruchomienie. Podobny wzrost zużycia odnotowano w przypadku rxvt, który teraz z pudełka wymaga 16 MB. Terminal Xfce zajmuje 34 MB, co jest trzy razy więcej niż wcześniej, natomiast GNOME Terminal wymaga tylko 20 MB. Oczywiście, wszystkie poprzednie testy przeprowadzano na architekturze 32-bitowej. Na LCA 2012 Rasty Russell opowiedział, że istnieje wiele bardziej subtelnych przyczyn, które mogą wyjaśnić wzrost zużycia pamięci. Mimo to żyjemy w czasach, gdy mamy całe gigabajty pamięci, więc jakoś sobie poradzimy.

Niemniej jednak nie mogę się pozbyć wrażenia, że przydzielenie większej ilości pamięci tak podstawowemu oprogramowaniu, jak terminal, to marnotrawstwo zasobów. Te programy powinny być najmniejsze z najmniejszych, powinny być w stanie działać na każdej „pudełku”, nawet na obuwiu, jeśli kiedykolwiek dojdziemy do tego, że będą musiały być wyposażone w systemy Linux (a wiecie, że tak będzie). Ale przy tych liczbach użycie pamięci stanie się w przyszłości problemem w każdej okolicy przy uruchamianiu kilku terminali, poza sytuacją, w której będą tylko kilka najlżejszych i ograniczonych w możliwości. Aby to zrekompensować, GNOME Terminal, Konsole, urxvt, Terminator i Xfce Terminal mają tryb Daemon, który pozwala zarządzać wieloma terminalami za pomocą jednego procesu, co ogranicza ich zużycie pamięci.

Przegląd emulatorów terminali

Podczas swoich testów doszedłem do kolejnego zaskakującego wniosku dotyczącego odczytu i zapisu na dysku: spodziewałem się, że nie zobaczę tutaj zupełnie nic, ale okazało się, że niektóre terminale zapisują na dysku największe dane. Biblioteka VTE faktycznie przechowuje na dysku bufor przewijania (ta cecha została dostrzeżona już w 2010 roku, i trwa to do dziś). Jednak w przeciwieństwie do wcześniejszych implementacji, obecnie przynajmniej te dane są szyfrowane przy użyciu AES256 GCM (od wersji 0.39.2). Ale rodzi się uzasadnione pytanie, co takiego wyjątkowego w bibliotece VTE, że wymaga ona tak niestandardowego podejścia do implementacji…

Podsumowanie

W pierwszej części artykułu odkryliśmy, że terminale oparte na VTE mają dobry zestaw funkcji, ale teraz widzimy, że wiąże się to z pewnymi kosztami zapewnienia ich wydajności. Obecnie pamięć nie jest problemem, ponieważ wszystkie terminale VTE można zarządzać przez proces Daemon, który ogranicza ich apetyt. Niemniej jednak starsze systemy, mające fizyczne ograniczenia dotyczące ilości pamięci RAM i bufora jądra, mogą wciąż potrzebować wcześniejszych wersji terminali, ponieważ zużywają znacznie mniej zasobów. Chociaż terminale VTE dobrze spisały się w testach przepustowości (przewijanie), ich opóźnienie wyświetlania danych na ekranie przekracza ustalony próg w podręczniku użytkownika GNOME. Prawdopodobnie deweloperzy VTE powinni to uwzględnić. Biorąc pod uwagę, że nawet dla początkujących użytkowników Linuxa spotkanie z terminalem jest nieuniknione, mogą uczynić go bardziej przyjaznym dla użytkownika. Dla doświadczonych zapaleńców przejście z domyślnego terminala może oznaczać nawet zmniejszenie obciążenia wzroku i możliwość uniknięcia zawodowych urazów i chorób w przyszłości z powodu długotrwałych sesji pracy. Niestety, tylko stare xterm i mlterm prowadzą nas do magicznego progu pingu wynoszącego 10 milisekund, co dla wielu jest nie do przyjęcia.

Pomiar kontrolny również wykazał, że w wyniku rozwoju graficznych środowisk Linux programiści musieli pójść na szereg kompromisów. Niektórzy użytkownicy powinni spojrzeć na klasyczne menedżery okien, ponieważ zapewniają one znaczne obniżenie opóźnienia. Niestety, nie udało się zmierzyć opóźnienia w Waylandzie: program Typometer, którego używałem, został stworzony po to, aby to, co Wayland miał zapobiegać - szpiegostwu za innymi oknami. Mam nadzieję, że kompozycja w Waylandzie będzie lepsza wydajnościowo niż w X.org, a także mam nadzieję, że w przyszłości ktoś znajdzie sposób, aby ocenić poziom opóźnienia w tym środowisku.

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster