Zlib-rs Lebih Cepat daripada C
(trifectatech.org)- zlib-rs adalah implementasi zlib berbasis Rust untuk kompresi data, dan versi 0.4.2 yang baru dirilis menghadirkan peningkatan performa besar
- Saat ini merupakan implementasi zlib kompatibel API tercepat, dan terutama unggul dari produk pesaing dalam performa dekompresi
- Peningkatan performa utama: otomatis memilih implementasi SIMD optimal saat runtime, menerapkan optimasi DFA, dan lainnya
Multiversioning
- Secara otomatis memilih versi fungsi tercepat sesuai CPU saat runtime
- Di Rust, dukungan multiversioning tidak tersedia secara bawaan sehingga harus diimplementasikan secara manual
- Memberikan performa optimal sambil meminimalkan overhead runtime pada kode
Optimasi DFA (Deterministic Finite Automata)
- Bahasa C meningkatkan performa dengan menggunakan fallthrough implisit pada pernyataan
switch - Rust tidak memiliki mekanisme serupa, sehingga terjadi penurunan performa
- Menerapkan opsi LLVM
-Cllvm-args=-enable-dfa-jump-thread→ performa pulih - Belum termasuk dalam pengaturan default LLVM, tetapi direncanakan akan diaktifkan secara default di Rustc ke depannya
Perbandingan performa benchmark
1. Perbandingan performa terhadap zlib-ng
- zlib-rs menunjukkan performa lebih cepat daripada zlib-ng pada sebagian besar ukuran input
- Khususnya, sekitar 10% lebih cepat pada input 1KB, dan sekitar 6% lebih cepat pada input 65KB
- Sedikit tertinggal pada ukuran input paling kecil, tetapi secara umum unggul dalam performa
Contohnya:
- Saat ukuran input 4 byte, zlib-ng sedikit lebih cepat, tetapi dampaknya kecil dalam penggunaan nyata
- Saat ukuran input 1KB, zlib-rs sekitar 10% lebih cepat
- Saat ukuran input 65KB, zlib-rs sekitar 6% lebih cepat
→ Keunggulan performa yang jelas dibanding zlib-ng pada chunk besar
2. Perbandingan performa terhadap zlib-chromium
- Pada chunk kecil, zlib-chromium lebih cepat
- Namun, zlib-rs unggul pada chunk besar
- zlib-rs memberikan performa lebih baik pada input berukuran umum
Contohnya:
- Saat ukuran input 4 byte, zlib-chromium sekitar 12% lebih cepat
- Saat ukuran input 16 byte, zlib-chromium sekitar 6% lebih cepat
- Saat ukuran input 1KB atau lebih, zlib-rs unggul dalam performa
→ zlib-rs unggul dalam performa pada ukuran yang umum
Perbandingan performa kompresi
- Performa kompresi masih terus ditingkatkan, dengan hasil yang beragam
- Peningkatan 6% pada level kompresi default (6), dan peningkatan performa 13% pada level kompresi tertinggi (9)
- Pada level kompresi lainnya, zlib-ng masih lebih cepat
Contohnya:
- Pada level kompresi 6, zlib-rs sekitar 6% lebih cepat daripada zlib-ng
- Pada level kompresi 9, zlib-rs sekitar 13% lebih cepat daripada zlib-ng
- Namun, pada level kompresi 1~4, zlib-ng masih unggul
Kesimpulan
- zlib-rs unggul dalam performa dekompresi dibanding zlib-ng dan zlib-chromium
- Performa kompresi masih terus ditingkatkan, dan sudah menunjukkan peningkatan berarti pada level-level kompresi utama
- Dapat digunakan di proyek Rust maupun C
- Rust → gunakan flag
zlib-rsdi crateflate2 - C → dapat digunakan setelah dikompilasi sebagai pustaka dinamis
- Rust → gunakan flag
1 komentar
Komentar Hacker News
Baru sadar bahwa saya sudah tahu Rust
"Lebih cepat dari C" pada akhirnya bermuara pada desain, implementasi, algoritme, dan semacamnya
zippy di Nim mengklaim 1,5x hingga 2x lebih cepat daripada zlib
Saya penasaran apakah performa Rust memang terkait dengan Rust itu sendiri, atau hanya karena implementasinya lebih dioptimalkan dibanding versi C lainnya
Chromium menggunakan zlib karena algoritme yang ada di standar
Zstandard dan digest blake3 diizinkan
Lebih akurat jika mengatakan Rust secepat C
Pustaka mana yang dikompilasi lebih cepat
Pengguna Rust suka membandingkan Rust dan C, tetapi pengguna C jarang membandingkan C dan Rust
Saat berurusan dengan bahasa sistem yang dikompilasi, bahasa hampir tidak memengaruhi kecepatan
Maksudnya adalah implementasinya lebih cepat daripada yang di C