Zlib-rs, C'den daha hızlı
(trifectatech.org)- zlib-rs, veri sıkıştırma için Rust tabanlı bir zlib uygulaması; kısa süre önce 0.4.2 sürümü yayımlandı ve performansta büyük iyileştirmeler getirdi
- Şu anda API uyumlu en hızlı zlib uygulaması ve özellikle açma performansında rakiplerinden daha iyi
- Başlıca performans iyileştirmeleri: çalışma zamanında en uygun SIMD uygulamasını otomatik seçme, DFA optimizasyonu vb.
Çoklu sürümleme (Multiversioning)
- Çalışma zamanında CPU'ya göre en hızlı işlev sürümü otomatik seçiliyor
- Rust'ta varsayılan olarak çoklu sürümleme desteği olmadığı için bunun elle uygulanması gerekiyor
- Kodun çalışma zamanı ek yükünü en aza indirirken en iyi performansı sağlıyor
DFA optimizasyonu (Deterministic Finite Automata)
- C dili,
switchdeyimlerinde örtük fallthrough kullanarak performansı artırıyor - Rust'ta buna benzer bir mekanizma olmadığından performans düşüşü oluşuyor
- LLVM'nin
-Cllvm-args=-enable-dfa-jump-threadseçeneği uygulandı → performans geri kazanıldı - LLVM'nin varsayılan ayarlarında yer almıyor, ancak gelecekte Rustc'de varsayılan olarak etkinleştirilmesi planlanıyor
Benchmark performans karşılaştırması
1. zlib-ng ile performans karşılaştırması
- zlib-rs, çoğu girdi boyutunda zlib-ng'den daha hızlı performans gösteriyor
- Özellikle 1KB girdide yaklaşık %10 daha hızlı, 65KB girdide ise yaklaşık %6 daha hızlı
- En küçük girdi boyutlarında biraz geride kalsa da genel olarak performans üstünlüğü var
Örneğin:
- Girdi boyutu 4 bayt olduğunda zlib-ng biraz daha hızlı, ancak gerçek kullanımda etkisi sınırlı
- Girdi boyutu 1KB olduğunda zlib-rs yaklaşık %10 daha hızlı
- Girdi boyutu 65KB olduğunda zlib-rs yaklaşık %6 daha hızlı
→ Büyük chunk'larda zlib-ng'ye karşı belirgin performans üstünlüğü
2. zlib-chromium ile performans karşılaştırması
- Küçük chunk'larda zlib-chromium daha hızlı
- Ancak büyük chunk'larda zlib-rs üstün
- Genel kullanım boyutlarındaki girdilerde zlib-rs daha iyi performans sunuyor
Örneğin:
- Girdi boyutu 4 bayt olduğunda zlib-chromium yaklaşık %12 daha hızlı
- Girdi boyutu 16 bayt olduğunda zlib-chromium yaklaşık %6 daha hızlı
- Girdi boyutu 1KB ve üzeri olduğunda zlib-rs performans avantajına sahip
→ Genel kullanım boyutlarında zlib-rs performans üstünlüğü
Sıkıştırma performansı karşılaştırması
- Sıkıştırma performansında iyileştirmeler sürüyor, ancak sonuçlar karışık
- Varsayılan sıkıştırma seviyesi (6) için %6 iyileşme, en yüksek sıkıştırma seviyesi (9) için %13 performans artışı
- Diğer sıkıştırma seviyelerinde ise hâlâ zlib-ng daha hızlı
Örneğin:
- Sıkıştırma seviyesi 6'da zlib-rs, zlib-ng'den yaklaşık %6 daha hızlı
- Sıkıştırma seviyesi 9'da zlib-rs, zlib-ng'den yaklaşık %13 daha hızlı
- Ancak sıkıştırma seviyeleri 1~4 arasında zlib-ng üstün
Sonuç
- zlib-rs, açma performansında zlib-ng ve zlib-chromium'a karşı üstünlük sağlıyor
- Sıkıştırma performansı hâlâ geliştiriliyor ve başlıca sıkıştırma seviyelerinde anlamlı iyileşmeler gösteriyor
- Hem Rust hem de C projelerinde kullanılabilir
- Rust →
flate2crate'indezlib-rsbayrağını kullanın - C → dinamik kütüphane olarak derlenip kullanılabilir
- Rust →
1 yorum
Hacker News görüşü
Rust'ı zaten bildiğini fark etmiş
unsafeanahtar sözcüğü yoğun biçimde kullanılıyor"C'den daha hızlı" ifadesi, sonunda farklı tasarım, uygulama, algoritma vb. anlamına geliyor
Nim'deki zippy'nin zlib'den 1,5 ila 2 kat daha hızlı olduğunu iddia ediyor
Rust'ın performansının Rust'ın kendisiyle mi ilgili olduğunu, yoksa diğer C sürümlerine göre daha iyi optimize edilmiş olmasından mı kaynaklandığını merak ediyorum
Chromium, standartta yer alan algoritmalar nedeniyle zlib kullanıyor
Zstandard ve blake3 digest'e izin veriliyor
Rust'ın C kadar hızlı olduğunu söylemek daha doğru olur
Hangi kütüphanenin daha hızlı derlendiği
Rust kullanıcıları Rust ile C'yi karşılaştırmayı seviyor ama C kullanıcıları C ile Rust'ı karşılaştırmayı nadiren yapıyor
Derlenen sistem dilleri söz konusu olduğunda dilin hıza etkisi neredeyse yoktur
Kastedilen şey, uygulamanın C'dekinden daha hızlı olduğudur