3 puan yazan GN⁺ 2025-06-19 | Henüz yorum yok. | WhatsApp'ta paylaş
  • bzip2 crate 0.6.0, bzip2 algoritmasının Rust uygulaması olan libbz2-rs-sys'i varsayılan olarak benimseyerek C bağımlılığını kaldırıyor; böylece hem hızı hem de çapraz derleme kolaylığını iyileştiriyor
  • bzip2, kullanım sıklığı azalmış eski bir algoritma olsa da, birçok protokol ve kütüphane spesifikasyona uyum için hâlâ desteklemek zorunda olduğundan bağımlılık ağacının derinlerinde yaşamayı sürdürüyor
  • Rust uygulaması, sıkıştırmada C'ye kıyasla yaklaşık %9.66~14.87 daha az CPU çevrimi kullandı; açmada da testlerin genelinde %4.48~10.00 iyileşme sağladı
  • C'nin kaldırılmasıyla WebAssembly, Windows ve Android derlemeleri sadeleşiyor; ayrıca varsayılan olarak libbz2-rs-sys sembollerini dışa aktarmadığı için diğer bağımlılıklarla sembol çakışması riski de azalıyor
  • Denetimde off-by-one mantık hatası 1 adet ve bazı fuzzer kısıtları düzeltildi; ayrıca bzip2 kullanan üst seviye kütüphane ve uygulamalar da artık MIRI üzerinde çalıştırılabiliyor

bzip2 0.6.0'da varsayılan uygulama değişikliği

  • bzip2 crate 0.6.0, bzip2 algoritmasının Rust uygulaması olan libbz2-rs-sys'i varsayılan olarak kullanıyor
  • Mevcut C bağımlılığı kaldırılırken bzip2 crate daha hızlı ve çapraz derlenmesi daha kolay hale geliyor
  • libbz2-rs-sys crate'i, C projelerinin de bu iyileştirmelerden yararlanabilmesi için C dinamik kütüphanesi olarak derlenebiliyor
  • bzip2 bugün çok yaygın kullanılmasa da, birçok protokol ve kütüphane spesifikasyona uyum için hâlâ bunu desteklemek zorunda ve birçok projenin bağımlılık ağacının derinlerinde bulunuyor
  • Uygulama ayrıntıları önceki şu yazıda bulunabilir: Translating bzip2 with c2rust

Performans iyileştirme sonuçları

  • Rust uygulaması genel olarak C uygulamasından daha hızlı ve bazı durumlarda C performansına yakın değil, onu aşıyor
    • Bilinen aralıkta gerçekte daha yavaş olan bir örnek yok
  • Sıkıştırma kıyaslamalarında C'ye göre CPU çevrimi azaldı
    • sample3.ref level 1: 38.51M33.53M, -%14.87
    • silesia-small.tar level 1: 3.43G3.00G, -%14.30
    • silesia-small.tar level 9: 3.47G3.17G, -%9.66
    • bzip2'de level, çalışma belleği kullanımını ifade eder ve performansı büyük ölçüde etkilemez
    • sample3.ref, yalnızca level 1'de bile dosya boyutundan fazla bellek ayırdığından daha yüksek level değerleri çok anlamlı değildir
  • Açma performansı da testlerin tamamında iyileşti
    • sample3.bz2: -%4.48
    • sample1.bz2: -%8.63
    • sample2.bz2: -%7.67
    • dancing-color.ps.bz2: -%5.17
    • re2-exhaustive.txt.bz2: -%7.65
    • zip64support.tar.bz2: -%10.00
  • macOS kıyaslama makinesinde açma performansı değerleri bazen daha düşük çıkabiliyor
    • Nedeni belirlenemedi ve macOS üzerinde perf benzeri performans izleme araçlarını otomatikleştirmek zordu

Derleme ve sembol çakışmalarının azaltılması

  • C bağımlılığı içeren Rust projelerinde çapraz derleme, cc crate sayesinde çoğu zaman doğrudan çalışsa da, başarısız olduğunda hatayı ayıklamak zor olabilir
    • Sistem kütüphanesi bağlama işlemleri de kafa karıştırıcı ve yeniden üretmesi zor sorunlar yaratabilir
    • bzip2'nin WebAssembly derlemesi uzun süredir sorunluydu
    • C bağımlılığı kaldırılıp yalnızca Rust kodu kullanıldığında WebAssembly, Windows ve Android derlemelerinin çalışması kolaylaşıyor
  • libbz2-rs-sys, varsayılan olarak sembol dışa aktarmıyor
    • C bağımlılıkları kullanıldığında Rust extern bloklarının bunları bulabilmesi için sembollerin dışa aktarılması gerekir
    • Dışa aktarılan adlar, başka bağımlılıklar aynı sembolleri tanımladığında çakışabilir
    • Rust projesi sembol dışa aktarmaya ihtiyaç duyuyorsa bu bir özellik bayrağıyla etkinleştirilebilir

Doğrulama ve denetim sonuçları

  • Performanslı bir bzip2 uygulaması için bir miktar unsafe kod gerekiyor ve C arayüzünü Rust'ta yeniden üretmek daha fazla unsafe kod gerektiriyor
    • Bu kod MIRI üzerinde çalıştırılabiliyor
    • bzip2 kullanan üst seviye kütüphane veya uygulamalar da artık MIRI ile çalıştırılabiliyor
  • Denetimde off-by-one mantık hatası 1 adet bulundu ve bazı fuzzer kısıtları düzeltildi
  • Bu çalışma, bzip2 crate'inin bakımcısı Alex Crichton, denetim ve uzmanlık sağlayan Radically Open Security ve e-Commons Fund aracılığıyla finansman sağlayan NLnet Foundation'ın desteğiyle yürütüldü

Henüz yorum yok.

Henüz yorum yok.