deniz.in

Piyasalar

Hava durumu

Hava durumu yükleniyor

· kaynak dev.to (home feed)

uutils 0.12 ile GNU coreutils 9.12 kıyaslaması: Rust araçları 157 senaryonun 91'inde daha yavaş, başlatmada 2,8 kat fark

157 komutu kapsayan bir kıyaslama, uutils 0.12'nin davranış olarak GNU coreutils 9.12'ye çok yakın olduğunu, ancak 91 senaryoda daha yavaş kaldığını ve 5.000 process başlatmada 2,8 kat daha yavaş olduğunu gösteriyor.

uutils 0.12 ile GNU coreutils 9.12 kıyaslaması: Rust araçları 157 senaryonun 91'inde daha yavaş, başlatmada 2,8 kat fark

Yeni bir kıyaslama, Unix temel araçlarının Rust ile yeniden yazılmış halini mevcut uygulamayla karşılaştırıyor ve karışık bir sonuç ortaya koyuyor: komutların çoğunda ikisi birebir aynı davranıyor, ancak Rust sürümleri hız konusunda kazanmaktan çok kaybediyor ve bir process başlatmanın maliyeti neredeyse üç kat daha yüksek.

efraingaray tarafından dev.to'da yayımlanan karşılaştırma, uutils coreutils 0.12'yi GNU coreutils 9.12 ile eşleştirdi. Tüm ölçümler, kaynak limitleri altında çalışan container'lar içinde, üç boyutta yürütüldü: eksiksiz GNU test paketi, 157 komutu kapsayan bayt bayt çıktı karşılaştırmaları ve process başlatma sürelerinin ölçümü.

Sayılar nerede duruyor

Ham hızda, GNU çoğu kez öne çıktı. Kıyaslamaya göre uutils, 157 ölçüm hücresinin 91'inde — yaklaşık yüzde 58 — daha yavaş olan seçenekti; kalan 66'sı ise uutils'e gitti ya da berabere bitti. dev.to yazısı bir özet niteliğinde; hangi tarafın hangi araçlarda kazandığını komut komut gösteren matris, uutils'in gerçek bir makinede GNU'nun yerine geçip geçemeyeceğine dair bir değerlendirmeyle birlikte yazarın kendi sitesindeki daha uzun bir incelemede yer alıyor.

Davranış konusunda ise ana sonuç yeniden yazım için umut verici: karşılaştırılan komutların büyük çoğunluğu aynı çıktıyı üretti; bir drop-in replacement için ulaşılması gereken tam da budur. Bir istisna açıkça belirtildi.

2,8 katlık başlatma cezası

En dengesiz sonuç process oluşturmayla ilgili. uutils altında 5.000 process başlatmak, GNU coreutils altına kıyasla 2,8 kat daha uzun sürdü. Özet herhangi bir teşhis sunmuyor; dolayısıyla sebebin binary boyutu, linking stratejisi, runtime başlatılması mı yoksa başka bir şey mi olduğu belirtilmiyor.

Bu sayı, bu araçların gerçekte nasıl kullanıldığı nedeniyle önemli. Shell script'leri, build sistemleri ve paket yöneticileri coreutils komutlarını hızlı ardışıklarla çağırır ve her çağrı genellikle çıkış yapmadan önce ufak bir iş görür. Bu rejimde, sabit başlatma maliyeti toplam çalışma süresine baskın olabilir ve process başına yaklaşık 3 katı bulan bir ceza, tek bir build'i veya paket kurulumunu oluşturan binlerce çağrı boyunca birikir.

mv'deki sapma

Kıyaslama ayrıca bir doğruluk açığını da işaret ediyor: mv bir dosyayı diskler arasında taşırken, ortaya çıkan dosya zaman damgalarını kaybediyor. Dosya sistemleri arası bir taşıma basit bir rename olarak gerçekleştirilemeyeceği için aracın önce kopyalayıp ardından silmesi gerekiyor; bu yolda uutils, özgün dosyanın zaman meta verilerini düşürüyor. mtime'lara dayanan her şey için — build sistemleri ve yedekleme araçları klasik örneklerdir — sessiz bir meta veri değişimi, bir yavaşlamadan muhtemelen daha yıkıcıdır.

Neden önemli

uutils, GNU coreutils'leri — neredeyse her Linux sisteminin temelinde duran ls, cp, mv ve cat ailesindeki araçları — Rust'ta yeniden inşa etme çabasının bugüne kadarki en göze çarpan örneği; Rust'ın bellek güvenliği garantileri, C uygulamalarının her zaman az da oscar taşıdığı bir hata sınıfını ortadan kaldırıyor. Bunun GNU'nun gerçekten yerine geçip geçemeyeceği, tam da bu kıyaslamanın sunduğu türden kanıtlara bağlı: komutların çoğunda işlevsel eşitlik ön koşul ve yazarın ifadesine göre uutils bunu büyük ölçüde başarıyor. Geriye kalan daha dar ve daha somut: script ağırlıklı iş yüklerini cezalandıran bir başlatma vergisi ve mv'de en az bir davranış farkı — ve artık bu açıkların yanında sayılar da var. Değiştirmeyi değerlendiren bakımcılar için bu, izlenim sorusunu bir mühendislik kararına dönüştürüyor: verilen bir dağıtımda daha yavaş process akışına ve kenar durumdaki meta veri farklarına gösterilecek tahammül, yeniden yazım lehindeki güvenlik argümanından ağır basıyor mu?

  • #rust
  • #coreutils
  • #gnu
  • #benchmark
  • #open-source

İlgili yazılar