bzip2 crate, C yerine %100 Rust uygulamasına geçti
(trifectatech.org)bzip2crate 0.6.0, bzip2 algoritmasının Rust uygulaması olanlibbz2-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-syssembollerini 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
bzip2kullanan ü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
bzip2crate 0.6.0, bzip2 algoritmasının Rust uygulaması olanlibbz2-rs-sys'i varsayılan olarak kullanıyor- Mevcut C bağımlılığı kaldırılırken
bzip2crate daha hızlı ve çapraz derlenmesi daha kolay hale geliyor libbz2-rs-syscrate'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.reflevel 1:38.51M→33.53M, -%14.87silesia-small.tarlevel 1:3.43G→3.00G, -%14.30silesia-small.tarlevel 9:3.47G→3.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.48sample1.bz2: -%8.63sample2.bz2: -%7.67dancing-color.ps.bz2: -%5.17re2-exhaustive.txt.bz2: -%7.65zip64support.tar.bz2: -%10.00
- macOS kıyaslama makinesinde açma performansı değerleri bazen daha düşük çıkabiliyor
- Nedeni belirlenemedi ve macOS üzerinde
perfbenzeri performans izleme araçlarını otomatikleştirmek zordu
- Nedeni belirlenemedi ve macOS üzerinde
Derleme ve sembol çakışmalarının azaltılması
- C bağımlılığı içeren Rust projelerinde çapraz derleme,
cccrate 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
externblokları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
- C bağımlılıkları kullanıldığında Rust
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
bzip2kullanan ü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
- Bunun dışında önemli bir bulgu yoktu
- Denetim Radically Open Security tarafından yapıldı; tam rapor denetim raporu PDF'i üzerinden görülebilir
- Bu çalışma,
bzip2crate'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.