- GNOME 46 döngüsünde VTE tabanlı terminallerin giriş gecikmesi büyük ölçüde azaldı; Fedora 40 testlerinde hızlı bir referans çizgisi olarak kullanılan Alacritty’ye neredeyse yaklaştı
- Ölçüm, tuş basımından ekrandaki piksel değişimine kadar olan uçtan uca giriş gecikmesini donanım sensörüyle ölçtüğü için çekirdek, compositör, uygulama ve monitör yanıt süresi birlikte yansıtılıyor
- Basit
cat > /dev/nullgirdisi ile karmaşık neovim kaydırma senaryosunda Console, VTE Test App ve GNOME Terminal, GNOME 45’e kıyasla belirgin biçimde iyileşti - Temel değişikliğin, VTE’nin eski 40Hz repaint timer yerine monitörle senkronize şekilde her karede yeniden çizim yapmaya geçmesi olma ihtimali yüksek
- VTE 0.76 kullanan GNOME 46 terminalleri, hissedilen gecikmeyi azaltıyor; bu yüzden VTE tabanlı terminalleri yavaş diye kaçınan kullanıcılar yeniden denemeye değer bulabilir
VTE tabanlı terminallerde neler değişti?
- VTE, birçok GNOME terminal emülatörünün temelini oluşturan Virtual TErminal library'dir
- GTK widget'ı olarak terminal görünümü sağlar
- GNOME Terminal, Console, Black Box, Tilix, Terminator, Ptyxis gibi uygulamalarda kullanılır
- Builder ve Workbench içindeki gömülü terminaller de VTE kullanır
- GNOME 46 döngüsü boyunca VTE’ye birçok performans iyileştirmesi geldi ve kullanıcıların gerçekten hissettiği giriş gecikmesi başlıca doğrulama konusu oldu
Giriş gecikmesi nasıl ölçüldü?
- Giriş gecikmesi, klavyede bir tuşa basıldığı andan monitörde bir pikselin renginin değiştiği ana kadar geçen süredir
- Gecikme ne kadar düşükse uygulama o kadar anında tepki veriyormuş gibi hissedilir
- Düşük ve yüksek gecikme art arda karşılaştırıldığında fark daha belirgin olur
- Ölçüm için yazılımsal ekran yakalama yerine donanım tabanlı giriş gecikmesi test cihazı kullanıldı
- Bir ışık sensörü Teensy karta bağlandı ve kart USB üzerinden bilgisayara bağlandı
- Sensör, tuş girdisiyle parlaklığı değişen küçük bir ekran alanına, örneğin terminalde belirli bir karakter hücresine bakıyor
- Kart, Space gibi bir tuş girdisi gönderip ışık değişimini algılıyor; ardından Backspace gibi ikinci bir tuşla durumu eski haline getiriyor
- Ölçümün monitör yenileme hızına kilitlenmesini önlemek için tekrarlar arasına rastgele bekleme süresi ekleniyor
- Bu yöntem, çekirdek, compositör, uygulama ve monitör yanıt süresini içeren uçtan uca gecikmeyi ölçüyor
- Klavye firmware gecikmesi hariç tutuluyor
- Mevcut kart ve firmware ile saniyede yaklaşık 35.500 ışık sensörü değeri kaydediliyor
- Her test 120 kez tekrarlandı
- Noktaların dağılımının, monitörün tek bir yenileme periyodu kadar düzgün yayılması beklenen bir durumdur
- 144Hz monitörde bir yenileme periyodu yaklaşık 6,94 ms’dir ve örnek grafikteki noktalar 7–8 ms aralığına yayılır
- Daha yüksek aykırı değerler veya daha geniş dağılım, test edilen uygulamada gecikme ya da yavaş işlemeye işaret edebilir
Test ortamı ve karşılaştırılan uygulamalar
- Test sistemi Lenovo Legion 7 Gen 7 AMD dizüstü bilgisayardı
- CPU: Ryzen 7 6800H
- GPU: Radeon RX 6700M dGPU ve MUX anahtarıyla yalnızca dGPU kullanılıyor
- Monitör: Acer Nitro XV320QU, 2560×1440, 144Hz, %100 ölçek
- Host: Fedora 40 Silverblue Beta, Mesa 24.0.4
- Compositör: raw Mutter 46.0
- raw Mutter, GNOME Shell olmadan yalnızca Mutter’ın çalıştırıldığı basit bir test ortamıdır
mutter --display-server -- alacrittygibi komutlarla çalıştırılabilir- GNOME Shell yükünün neredeyse hiç olmadığı, ideale yakın bir koşuldur
- Karşılaştırılan terminal sayısı dört
- Alacritty: VTE tabanlı değildir; önceki testlerde sürekli hızlı çıkan bir terminal olduğu için referans çizgisi görevi görür
- Console: GTK 4 tabanlı GNOME varsayılan terminali
- VTE Test App: VTE deposundaki GTK 4 test terminali
- GNOME Terminal: GNOME 46’da GTK 3 uygulamasıdır ve birçok dağıtımda varsayılan olarak sunulur
- GNOME 45 ile GNOME 46 karşılaştırması için Fedora 39 ve Fedora 40
toolboxkonteynerleri kullanıldı- Her terminal Fedora paketleriyle olduğu gibi kuruldu ve ek ayar yapılmadan çalıştırıldı
- Pencere monitörün sol üstüne yerleştirildi, fare imleci ise bağlantı algılama mantığının sonucu bozmasını önlemek için pencerenin dışında tutuldu
Basit giriş ve neovim kaydırma sonuçları
- İlk testte
cat > /dev/nullçalıştırıldı ve Space girdisiyle blok imlecin sağa bir hücre kayması için geçen süre ölçüldü- Bu, readline gibi ek işleme olmayan asgari ek yük senaryosudur
- Alacritty, Fedora 39’dan Fedora 40’a geçildiğinde beklendiği gibi değişmedi
- VTE tabanlı terminaller, GNOME 45’e kıyasla GNOME 46’da büyük ölçüde iyileşti ve Alacritty ile neredeyse aynı seviyeye ulaştı
- GTK 3 tabanlı GNOME Terminal de buna çok yakın sonuç verdi
- Büyük iyileştirmenin başlıca nedeni muhtemelen Christian Hergert’in yaptığı VTE değişikliği
- Eski 40Hz VTE repaint timer kullanımından çıkıldı
- Bir GTK widget'ı gibi monitörle senkronize şekilde her karede çizim yapmaya geçildi
- Console’da birkaç aykırı değer vardı; bunun süreç izleme nedeniyle olması mümkün
- Bu aykırı değerler yeni ortaya çıkmış bir durum değil
- GNOME 47’de incelenebilecek bir konu olarak duruyor
- İkinci test, daha gerçekçi bir neovim yapılandırması kullandı
- neovim ayarları anlık görüntüsünde Ptyxis README açıldı ve ışık sensörünün algılayabilmesi için bazı metinler Unicode full-block karakterleriyle değiştirildi
- Ctrl+D ve Ctrl+U tekrarlanarak metin tamponu aşağı ve yukarı kaydırıldı
- Terminalin alt çizgi, undercurl, gutter simgeleri, durum çubuğu gibi ekran öğelerini çizmesi gerekiyor
- neovim testinde de GNOME 46 terminallerindeki iyileşme belirgin
- GNOME 46’daki VTE tabanlı terminaller hâlâ Alacritty’ye çok yakın seviyede
- Yalnızca Fedora 40 sonuçlarına bakıldığında neovim testi, basit
cattestine göre gecikmeyi artırıyor; ancak artış miktarı tüm terminallerde benzer
vtebench’in gösterdiği kalan farklar
- vtebench, giriş gecikmesini değil PTY okuma ve ayrıştırma performansını ölçen otomatik bir benchmark’tır
- Kare hızı veya gecikme gibi önemli unsurları ele almadığı için terminal performansının tamamını anlamak adına yeterli değildir
- Esas olarak terminalin PTY’den ne kadar hızlı okuduğunu zorlar
- repaint süresi vtebench sonuçlarını da etkileyebilir
- Özellikle VTE gibi PTY okuma-ayrıştırma ile repaint mantığını aynı thread üzerinde çalıştıran terminallerde bu etki daha büyük olabilir
- GNOME 46’daki VTE, vtebench’te de iyileşti
- İyileşme miktarı giriş gecikmesi testlerine göre daha değişken
- Okuma ve ayrıştırmayı render’dan ayrı thread’de yapan Alacritty seviyesine ulaşamıyor
- Bu gelişme, GNOME 46 döngüsü boyunca VTE’ye eklenen çeşitli optimizasyonlardan kaynaklanıyor gibi görünüyor
dense_cellsveunicodebenchmark’ları varsayılan sonuç grafiklerine dahil edilmedi- Bu iki test vtebench’in başlıca stres testleri
- VTE hâlâ bu testlerde ciddi dalgalanma gösterdiği için grafiklerin okunabilirliğini düşürüyor
- Test senaryolarına göre kalan fark neredeyse ihmal edilebilir düzeye yakın
- Bazı farklar, VTE’nin erişilebilirlik, kaydırma çubuğu hesaplaması ve diğer özellikler için ek iş yapmasıyla açıklanabilir
- Erişilebilirlik GNOME Terminal’de etkin, GTK 4 terminallerde ise şu anda devre dışı
- VTE 0.76 kullanıldığında GNOME 46’daki iyileştirmeleri içeren performans elde edilebilir
1 yorum
Hacker News yorumları
Bu değişiklik sayesinde, test edilen yapılandırmada giriş gecikmesinin medyanı nihayet Apple //e'den daha düşük oldu. Console yaklaşık 12 ms, 1983 tarihli Apple //e ise 30 ms idi; yani bu 41 yıl sürdü
https://www.extremetech.com/computing/261148-modern-computer...
https://danluu.com/input-lag/
Ancak bu benchmark GNOME Shell'i değil, bir compositor olan raw Mutter 46.0'ı kullandı; raw mutter test amaçlı sayılabilecek oldukça temel bir ortam. Ayrıca klavye gecikmesini içermediği için uçtan uca bir ölçüm de değil. Bu testte kart, tuş girişlerini USB üzerinden gönderiyor; oysa yalnızca klavyenin iç gecikmesi bile 60 ms'ye kadar çıkabiliyor
https://danluu.com/keyboard-latency/
Asıl önemli olan varsayılan yapılandırmadaki gerçek uçtan uca değerleri merak ediyorum; keşke makalede bunlar ölçülseydi. GNOME ekibinin ve benchmark yazarının çalışması harika, ama önemli soru hâlâ duruyor. Apple //e donanım hızlandırma kullanıyordu ve Unicode da işlemiyordu, dolayısıyla arada çok fark var; yine de 41 yılı aşkın bir makinenin insani tepki hızına geri dönebilsek güzel olurdu
Bu tür bileşenlerin gecikmesi test sırasında ciddi biçimde oynarsa, bu yazının odağı olan VTE gecikme iyileştirmesini analiz etmek zorlaşır. Tamamen sabit olsa bile mutlak değere yalnızca bir sabit gibi eklenir, sonuç değişmez. Bu yüzden gecikme farklarını yüzde olarak ifade etmemek gerekir. Örneklem kümesinde normalize edilebilecek bir sabit vardır, ama tüm kullanıcı kitlesinde normalize edilemeyen çok sayıda sabit bulunur. Mutter kısmı ilginç; GNOME Mutter'ın üzerinde çalıştığı için mutlak gecikme iyileştirmesinin benzer görünme ihtimali var. Yine de GNOME da klavye gecikmesi gibi istenmeyen oynaklıklar yaratabileceğinden bunu gerçekten doğrulamak isterim
Bu yazıda asıl beni rahatsız eden şey, en yeni test sürümünden önce Gnome'da yeniden çizim hızının sabit 40 Hz olmasıydı. Buna kim karar vermiş acaba
Güzel. VTE geliştiricilerinin performansa odaklanması da iyi; yazıdaki donanım tabanlı ölçüm süreci de etkileyici
Gecikme ölçümünde ışık sensörü kullanmaları, Ben Heck'in oldukça açık isimli “Xbox One Controller Monitor” [1] ürününü hatırlattı. Oyun konsolu kontrolcüsünün düğme durumunu doğrudan okuyup ışık sensörüyle birleştirerek oyun geliştiricilerinin gecikmeyi düşük tutmasına yardımcı olan bir ürün. Havalı görünüyor ama fiyatı 900 dolar
[1]: https://www.benheck.com/xbox1monitor/
Hem bu yazıda hem de bağlantılı yazıda ışık sensörünü monitörün yaklaşık ortasına koymuşlar. Ölçüm değerlerini karşılaştırmak için sorun yok, ama tipik monitörlerin önemli bir kısmında 60 Hz'de sensörü ekranın üst tarafına koyarsanız yaklaşık 8 ms daha hızlı, alt tarafına koyarsanız yaklaşık 8 ms daha yavaş ölçersiniz. Çünkü pikseller ya da satırlar yukarıdan aşağıya sürülür; temelde CRT'ye benzer
Dolayısıyla ayrıntıya girilecekse, ışık sensörü sinyalinde pikselin yandığına karar vermek için eşiğin nereye konacağı gibi bu noktanın da belirtilmesi gerekir. Yazıdaki değerlere bakınca 8 ms oldukça büyük bir fark. Benzer şekilde “X monitörü Y monitöründen 30 ms daha yavaş” demek de abartı olabilir. Bunu, benim yapılandırmamda ve X, Y, Z ayarlarında böyle ölçüldü diye görmek gerekir. Monitörün yalnızca gecikme ekleyen ve hissedilir bir etkisi olmayan tuhaf iyileştirme özellikleri uygulayıp uygulamadığını; monitörü değiştirirken ekran kartının veya sürücünün yardımseverlik taslayıp düzeltme, ölçekleme ya da iyileştirme profillerini gizlice değiştirip değiştirmediğini de kontrol etmek gerekir. Bu cihazlar genelde hiçbir uyarı vermez; gerçekten gördüğüm birkaç örnek var
Tüketici donanımında imkânsız gibi görünen aşırı gerçekçi 3D sahneleri ve oyunları render ettiğimiz bir dünyada yaşarken, aynı zamanda terminale metin yazdırma işini hâlâ kusursuz hâle getirmeye çalışıyor olmamız komik
Hızla ilgili değil ama Linux’ta, Mac OSX Terminal gibi kapatıp yeniden açınca tüm sekmeleri, her sekmenin komut geçmişini ve scrollback’ini geri getiren bir terminal olup olmadığını merak ediyorum. Mac tarafı bunu her sekme için farklı bir bash geçmiş dosyası ayarlayarak hallediyor
Bu kullanım için GUI terminal tercih ediyorum
-CCargümanıyla çalıştırınca tmux oturumu iterm2’nin GUI pencerelerine ve sekmelerine eşleniyor; ssh ile uzak makinedeki tmux’u kullanırken de mümküntmux kontrol kısayollarını ve komutlarını hep unutuyordum; bu özellik beni epey heyecanlandırdı
[1] https://iterm2.com/documentation-tmux-integration.html
https://github.com/tmux/tmux/wiki
Elbette tmux, istediğiniz herhangi bir GUI terminal emülatörüyle birlikte kullanılabilir
warp dışında bu sorun için gerçek bir çözümün neredeyse olmaması üzücü. Benim küçük UX hayalim, böyle bir çalışma alanı kaydetme özelliğinin işletim sisteminin tamamına ve içindeki uygulamalara entegre edilmesi. Harika olurdu
Birkaç yıl Gnome kullandıktan sonra 2 yıl önce sway ve alacritty’ye geçtim; açıkçası hiçbir farkı anlayamıyorum. Üst seviye ses ekipmanlarında olduğu gibi, kulaklarım ve gözlerim o farkı ayırt edecek şekilde ayarlı değil sanırım
Sonunda yalnızca devasa dosyaları
catetmekten ibaret olmayan bir terminal benchmark’ı çıktı. Aynı testte daha fazla terminali, özellikle de Linux’un varsayılan konsolunu görmek isterdimhttps://sw.kovidgoyal.net/kitty/performance/#throughput
veya
https://github.com/alacritty/vtebench/tree/master
Konu dışı ama Gnome Terminal’de en sevmediğim şey varsayılan olarak küçük bir pencere açması. Ekranımın yaklaşık 1/4’ü boyutunda ve yeniden boyutlandırsam da yeniden başlatınca hatırlamıyor. Sonunda ayarlara girip sütun ve satır sayısını elle belirtmek gerekiyor
Kişisel olarak varsayılan boyutu bırakıp, daha büyük alana ihtiyaç duyan belirli pencereleri yeniden boyutlandırmayı tercih ediyorum. Yine de yeniden boyutlandırmayı hatırlama seçeneği en azından olmalı
Hamburger menüsü > Preferences > profil adına girmeniz yeterli. Benim profilim sadece “Unnamed”. “initial terminal size”ı değiştirince istediğiniz gibi oluyor. Ben 132x43 olarak ayarladım
Bu yüzden böyle bir şey denenmesin isterim. Yazılım ne istediğimden emin olabiliyorsa akıllı davranması sorun değil; değilse bu da bir başka “Sizin için otomatik olarak mahvettim, teşekkür edersiniz değil mi?” vakası oluyor
Herkese açıldığında Mitchell Hashimoto’nun Ghostty terminalinin de benchmark’a dahil edilmesi güzel olurdu. Şimdilik geliştirme ve cilalama aşamasında, kapalı beta
https://mitchellh.com/ghostty
Debian’da xterm ve i3wn kullanıyorum; bundan daha hızlısını deneyimlemedim. Terminal için GPU harcamayı hiç düşünmedim bile, bu yüzden alacritty bana şahsen fazla geliyor