- Pada siklus GNOME 46, latensi input terminal berbasis VTE berkurang drastis, hingga dalam pengujian Fedora 40 hampir menyamai Alacritty yang digunakan sebagai baseline cepat
- Pengukuran dilakukan dengan sensor hardware untuk latensi input end-to-end, dari penekanan tombol hingga perubahan piksel di layar, sehingga waktu respons kernel, compositor, aplikasi, dan monitor ikut tercermin
- Baik pada input sederhana
cat > /dev/nullmaupun scrolling neovim yang kompleks, Console, VTE Test App, dan GNOME Terminal menunjukkan peningkatan jelas dibanding GNOME 45 - Perubahan kunci kemungkinan besar adalah VTE beralih dari 40Hz repaint timer lama ke cara menggambar ulang pada setiap frame yang tersinkron dengan monitor
- Terminal GNOME 46 yang memakai VTE 0.76 memiliki latensi yang terasa lebih rendah, sehingga pengguna yang dulu menghindari terminal berbasis VTE karena dianggap lambat layak mencobanya kembali
Perubahan yang Terjadi pada Terminal Berbasis VTE
- VTE adalah library Virtual TErminal yang menjadi fondasi berbagai emulator terminal GNOME
- Menyediakan tampilan terminal sebagai widget GTK
- Digunakan oleh GNOME Terminal, Console, Black Box, Tilix, Terminator, Ptyxis, dan lainnya
- Terminal bawaan di Builder dan Workbench juga menggunakan VTE
- Selama siklus GNOME 46, banyak peningkatan performa masuk ke VTE, dan latensi input yang benar-benar dirasakan pengguna menjadi fokus utama untuk diperiksa
Cara Mengukur Latensi Input
- Latensi input adalah waktu dari saat tombol keyboard ditekan hingga warna piksel monitor berubah
- Semakin rendah latensinya, aplikasi terasa semakin responsif
- Perbedaannya lebih mudah terlihat jika membandingkan latensi rendah dan tinggi secara bergantian
- Pengukuran menggunakan alat penguji latensi input berbasis hardware, bukan tangkapan layar software
- Sensor cahaya dihubungkan ke board Teensy, dan board terhubung ke komputer melalui USB
- Sensor mengarah ke area kecil di layar yang kecerahannya berubah akibat input tombol, seperti sel karakter tertentu di terminal
- Board mengirim input tombol seperti Space, mendeteksi perubahan intensitas cahaya, lalu mengembalikan kondisi awal dengan tombol kedua seperti Backspace
- Waktu tunggu acak dimasukkan di antara pengulangan untuk menghindari pengukuran terkunci pada refresh rate monitor
- Metode ini mengukur latensi end-to-end yang mencakup waktu respons kernel, compositor, aplikasi, dan monitor
- Latensi firmware keyboard dikecualikan
- Dengan board dan firmware saat ini, sekitar 35.500 nilai sensor cahaya dicatat per detik
- Setiap pengujian diulang 120 kali
- Distribusi titik yang menyebar merata sekitar satu periode refresh monitor adalah bentuk yang diharapkan
- Periode refresh monitor 144Hz sekitar 6,94ms, dan titik pada grafik contoh tersebar dalam rentang 7–8ms
- Outlier tinggi atau distribusi yang lebih lebar dapat menunjukkan latensi atau pemrosesan lambat pada aplikasi yang diuji
Lingkungan Pengujian dan Pembanding
- Sistem pengujian adalah laptop Lenovo Legion 7 Gen 7 AMD
- CPU-nya Ryzen 7 6800H
- GPU-nya Radeon RX 6700M dGPU, dan hanya dGPU yang digunakan melalui MUX switch
- Monitornya Acer Nitro XV320QU, 2560×1440, 144Hz, skala 100%
- Host menggunakan Fedora 40 Silverblue Beta, Mesa 24.0.4
- Compositor-nya adalah raw Mutter 46.0
- Raw Mutter adalah lingkungan pengujian sederhana yang hanya menjalankan Mutter tanpa GNOME Shell
- Dapat dijalankan dengan perintah seperti
mutter --display-server -- alacritty - Ini mendekati kondisi ideal dengan overhead GNOME Shell yang nyaris tidak ada
- Dapat dijalankan dengan perintah seperti
- Ada empat terminal yang dibandingkan
- Alacritty: bukan berbasis VTE, dan dalam pengujian sebelumnya konsisten menjadi terminal cepat sehingga berperan sebagai baseline
- Console: terminal default GNOME berbasis GTK 4
- VTE Test App: terminal uji GTK 4 di repositori VTE
- GNOME Terminal: pada GNOME 46 merupakan aplikasi GTK 3, dan disediakan sebagai default di banyak distribusi
- Perbandingan GNOME 45 dan GNOME 46 menggunakan kontainer Fedora 39 dan Fedora 40
toolbox- Setiap terminal dipasang apa adanya dari paket Fedora dan dijalankan tanpa penyesuaian tambahan
- Jendela ditempatkan di kiri atas monitor, dan kursor mouse diletakkan di luar jendela agar logika deteksi tautan tidak mendistorsi hasil
Hasil Input Sederhana dan Scrolling neovim
- Pengujian pertama menjalankan
cat > /dev/null, lalu mengukur waktu yang dibutuhkan kursor blok untuk bergeser satu sel ke kanan akibat input Space- Ini adalah situasi dengan overhead minimum tanpa pemrosesan tambahan seperti readline
- Sesuai perkiraan, Alacritty tidak berubah saat berpindah dari Fedora 39 ke Fedora 40
- Terminal berbasis VTE meningkat besar pada GNOME 46 dibanding GNOME 45 hingga hampir mencapai level yang sama dengan Alacritty
- GNOME Terminal berbasis GTK 3 juga menunjukkan hasil yang sangat mendekati
- Penyebab utama peningkatan besar ini kemungkinan adalah perubahan VTE oleh Christian Hergert
- Keluar dari VTE repaint timer 40Hz lama
- Berubah menjadi cara menggambar setiap frame secara tersinkron dengan monitor, sebagaimana layaknya widget GTK
- Console memiliki beberapa outlier, kemungkinan karena pelacakan proses
- Outlier ini bukan fenomena baru
- Ini tetap menjadi hal yang dapat ditinjau di GNOME 47
- Pengujian kedua menggunakan konfigurasi neovim yang lebih realistis
- Membuka README Ptyxis dari snapshot konfigurasi neovim, lalu mengubah sebagian teks menjadi karakter Unicode full-block agar bisa dideteksi sensor cahaya
- Mengulang Ctrl+D dan Ctrl+U untuk menggulir buffer teks ke bawah dan ke atas
- Terminal harus menggambar elemen layar seperti underline, undercurl, ikon gutter, dan status line
- Dalam pengujian neovim, peningkatan terminal GNOME 46 juga tampak jelas
- Terminal berbasis VTE di GNOME 46 masih hampir setara dengan Alacritty
- Jika hanya melihat hasil Fedora 40, pengujian neovim menambah latensi dibanding pengujian
catsederhana, tetapi besar kenaikannya mirip di semua terminal
Perbedaan Lain yang Ditunjukkan vtebench
- vtebench adalah benchmark otomatis yang mengukur performa pembacaan dan parsing PTY, bukan latensi input
- Karena tidak menangani faktor penting seperti framerate atau latensi, benchmark ini belum cukup untuk memahami performa terminal secara menyeluruh
- Benchmark ini sangat menekan kecepatan terminal membaca dari PTY
- Waktu repaint juga dapat memengaruhi hasil vtebench
- Dampaknya dapat sangat besar terutama pada terminal yang menjalankan pembacaan/parsing PTY dan logika repaint di thread yang sama, seperti VTE
- VTE di GNOME 46 juga meningkat dalam vtebench
- Besar peningkatannya lebih bervariasi dibanding pengujian latensi input
- Belum mencapai level Alacritty, yang melakukan pembacaan dan parsing di thread terpisah dari rendering
- Peningkatan ini tampaknya berasal dari berbagai optimasi yang masuk ke VTE selama siklus GNOME 46
- Benchmark
dense_cellsdanunicodedikecualikan dari grafik hasil utama- Keduanya merupakan stress test utama vtebench
- VTE masih menunjukkan hasil yang sangat bergejolak sehingga mengurangi keterbacaan grafik
- Berdasarkan kasus pengujian, perbedaan yang tersisa hampir bisa diabaikan
- Sebagian perbedaan dapat dijelaskan oleh pekerjaan tambahan yang dilakukan VTE untuk aksesibilitas, perhitungan scrollbar, dan fitur lainnya
- Aksesibilitas aktif di GNOME Terminal, sementara saat ini nonaktif di terminal GTK 4
- Dengan VTE 0.76, pengguna mendapatkan performa yang mencakup peningkatan GNOME 46
1 komentar
Komentar Hacker News
Berkat perubahan ini, median latensi input pada konfigurasi yang diuji akhirnya lebih rendah daripada Apple //e. Console sekitar 12ms, sedangkan Apple //e tahun 1983 adalah 30ms, jadi butuh 41 tahun untuk mencapainya
https://www.extremetech.com/computing/261148-modern-computer...
https://danluu.com/input-lag/
Namun benchmark ini memakai raw Mutter 46.0 sebagai compositor, bukan GNOME Shell, dan raw mutter adalah lingkungan yang sangat dasar yang lebih dekat ke keperluan pengujian. Selain itu, ini juga bukan pengukuran end-to-end karena tidak memasukkan latensi keyboard. Dalam pengujian ini, board mengirim input tombol lewat USB, padahal latensi internal keyboard saja bisa mencapai 60ms
https://danluu.com/keyboard-latency/
Yang benar-benar ingin diketahui adalah angka end-to-end nyata pada konfigurasi default yang penting, dan akan lebih baik kalau artikel itu mengukurnya. Pekerjaan tim GNOME dan pembuat benchmark ini luar biasa, tetapi pertanyaan pentingnya masih tersisa. Apple //e memakai akselerasi hardware dan tidak menangani Unicode, jadi ada banyak perbedaan, tetapi tetap saja akan menyenangkan jika kita bisa kembali ke responsivitas yang terasa manusiawi dari mesin berusia lebih dari 41 tahun itu
Jika latensi dari komponen-komponen itu banyak berfluktuasi selama pengujian, akan sulit menganalisis peningkatan latensi VTE yang menjadi inti tulisan ini. Kalaupun benar-benar konstan, nilainya hanya akan menambah konstanta pada nilai absolut sehingga kesimpulannya tidak berubah. Karena itu perbedaan latensi tidak boleh dinyatakan sebagai persentase. Ada konstanta yang bisa dinormalisasi dalam himpunan sampel, tetapi pada keseluruhan populasi pengguna ada banyak konstanta yang tidak bisa dinormalisasi. Bagian tentang Mutter menarik, karena GNOME berjalan di atas Mutter, jadi peningkatan latensi absolutnya kemungkinan akan terlihat mirip. Namun GNOME juga bisa menimbulkan variasi yang tidak diinginkan seperti latensi keyboard, jadi saya tetap ingin melihat konfirmasi nyata
Hal yang benar-benar mengganggu dari tulisan ini adalah bahwa pada Gnome sebelum versi uji terbaru, kecepatan redraw dikunci di 40Hz. Siapa sebenarnya yang memutuskan itu
Bagus. Senang melihat para pengembang VTE fokus pada kinerja, dan proses pengukuran berbasis hardware di artikel itu juga mengesankan
Cara mereka mengukur latensi dengan sensor cahaya mengingatkan saya pada produk Ben Heck yang namanya terang-terangan, “Xbox One Controller Monitor” [1]. Produk ini membaca langsung status tombol pada kontroler konsol game dan menggabungkannya dengan sensor cahaya untuk membantu pengembang game menjaga latensi tetap rendah. Terlihat keren, tetapi harganya 900 dolar
[1]: https://www.benheck.com/xbox1monitor/
Baik artikel ini maupun tulisan yang ditautkan sama-sama menaruh sensor cahaya kira-kira di tengah monitor. Untuk membandingkan hasil ukur itu tidak masalah, tetapi pada cukup banyak monitor umum, pada 60Hz jika sensor diletakkan di bagian atas layar, hasilnya akan terukur sekitar 8ms lebih cepat, dan jika diletakkan di bawah akan sekitar 8ms lebih lambat. Ini karena piksel atau garis digerakkan dari atas ke bawah, pada dasarnya mirip CRT
Jadi kalau mau masuk ke detail, hal ini juga perlu disebutkan, sama seperti menentukan ambang pada sinyal sensor cahaya untuk memutuskan kapan piksel dianggap menyala. Melihat angka-angka di artikel itu, 8ms adalah selisih yang cukup besar. Dengan cara yang sama, mengatakan “monitor X 30ms lebih lambat daripada monitor Y” juga bisa berlebihan. Lebih tepatnya, pada konfigurasi dan pengaturan saya X, Y, Z hasilnya terukur seperti itu. Perlu juga dicek apakah monitor menambahkan latensi sambil menerapkan fitur peningkatan aneh yang tidak memberi efek nyata, atau apakah saat mengganti monitor kartu grafis atau driver diam-diam mengubah koreksi, scaling, atau profil peningkatan seolah-olah membantu. Perangkat-perangkat seperti ini biasanya tidak memberi peringatan apa pun, dan saya benar-benar pernah melihat beberapa kasus seperti itu
Lucu bahwa kita hidup di dunia yang bisa merender adegan 3D surealis dan game yang dulu tampak mustahil di hardware konsumen, tetapi pada saat yang sama masih berusaha menyempurnakan hal sesederhana menampilkan teks di terminal
Tidak terkait dengan kecepatan, tetapi saya penasaran apakah ada terminal di Linux yang, seperti Mac OSX Terminal, saat ditutup lalu dibuka lagi bisa memulihkan semua tab, riwayat perintah tiap tab, dan scrollback-nya. Di Mac, ini ditangani dengan cara seperti menetapkan file riwayat bash yang berbeda untuk setiap tab
Untuk keperluan ini saya lebih suka terminal GUI
-CC, sesi tmux dipetakan ke jendela dan tab GUI iterm2, dan ini juga bisa dilakukan saat memakai tmux di mesin jarak jauh lewat sshSaya selalu lupa pintasan dan perintah kontrol tmux, jadi fitur ini cukup saya nantikan
[1] https://iterm2.com/documentation-tmux-integration.html
https://github.com/tmux/tmux/wiki
Tentu saja tmux bisa dipakai bersama emulator terminal GUI apa pun yang Anda inginkan
Sayang sekali selain warp hampir tidak ada solusi sungguhan untuk masalah ini. Mimpi UX kecil saya adalah fitur penyimpanan ruang kerja seperti ini terintegrasi ke seluruh sistem operasi dan aplikasi di dalamnya. Itu akan keren
Setelah memakai Gnome selama beberapa tahun, 2 tahun lalu saya beralih ke sway dan alacritty, tetapi sejujurnya saya sama sekali tidak merasakan perbedaannya. Mungkin telinga dan mata saya tidak cukup terlatih untuk membedakannya, seperti perlengkapan audio kelas atas
Akhirnya ada benchmark terminal yang bukan cuma
catfile besar. Saya ingin melihat lebih banyak terminal lain, terutama konsol bawaan Linux, diuji dengan pengujian yang samahttps://sw.kovidgoyal.net/kitty/performance/#throughput
atau
https://github.com/alacritty/vtebench/tree/master
Agak di luar topik, tetapi hal yang paling saya benci dari Gnome Terminal adalah ia membuka jendela kecil secara default. Ukurannya sekitar 1/4 layar saya, dan meski saya ubah ukurannya, setelah dijalankan ulang ukurannya tidak diingat. Akhirnya saya harus masuk ke pengaturan dan menetapkan jumlah kolom dan baris secara manual
Secara pribadi, saya lebih suka membiarkan ukuran default apa adanya dan hanya me-resize jendela tertentu yang membutuhkan ruang lebih besar. Tetap saja, setidaknya harus ada opsi untuk mengingat hasil resize
hamburger menu > Preferences > nama profil. Profil saya hanya bernama “Unnamed”. Ubah “initial terminal size” dan hasilnya akan sesuai keinginan. Saya menyetelnya ke 132x43
Jadi saya harap mereka tidak mencoba melakukan itu. Tidak masalah jika perangkat lunak bersikap pintar saat benar-benar yakin dengan yang saya inginkan, tetapi kalau tidak, itu hanya jadi satu lagi contoh “Saya sudah mengacaukannya secara otomatis untuk Anda. Sama-sama.”
Saat sudah dirilis, akan bagus jika terminal Ghostty milik Mitchell Hashimoto juga dimasukkan ke benchmark. Saat ini masih dalam tahap pengembangan dan pemolesan, serta masih beta tertutup
https://mitchellh.com/ghostty
Di debian saya memakai xterm dan i3wn, dan saya belum pernah merasakan sesuatu yang lebih cepat dari ini. Saya bahkan tidak pernah berpikir untuk memboroskan GPU pada terminal, jadi menurut saya alacritty itu berlebihan