4 poin oleh GN⁺ 2025-03-17 | 1 komentar | Bagikan ke WhatsApp
  • 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-rs di crate flate2
    • C → dapat digunakan setelah dikompilasi sebagai pustaka dinamis

1 komentar

 
GN⁺ 2025-03-17
Komentar Hacker News
  • Baru sadar bahwa saya sudah tahu Rust

    • Saya kira tujuan Rust adalah keamanan, tetapi pustaka ini banyak menggunakan kata kunci unsafe
    • Saya penasaran kapan perbedaan antara C dan Rust menjadi tidak berarti
    • Jika menggunakan inline assembly, kedua bahasa dapat menghasilkan kode mesin yang sama
    • Saya penasaran apakah kompilator Rust mengoptimalkan lebih baik daripada kompilator C
  • "Lebih cepat dari C" pada akhirnya bermuara pada desain, implementasi, algoritme, dan semacamnya

    • Bisa saja lebih cepat daripada implementasi yang sudah ada, tetapi klaim "lebih cepat dari C" terdengar aneh
  • zippy di Nim mengklaim 1,5x hingga 2x lebih cepat daripada zlib

    • Di C juga ada zlib yang lebih cepat daripada instalasi standarnya
    • zlib sekarang memang terkesan kuno, tetapi masih tetap populer
    • Digunakan sebagai dasar untuk format baru yang ramah paralelisme
  • Saya penasaran apakah performa Rust memang terkait dengan Rust itu sendiri, atau hanya karena implementasinya lebih dioptimalkan dibanding versi C lainnya

    • Ada kasus penyortiran di mana C++ secara konsisten memberi performa lebih baik daripada C
    • Saya penasaran apakah ada hal serupa antara Rust dan C
  • Chromium menggunakan zlib karena algoritme yang ada di standar

    • Jika memilih algoritme yang lebih baik, performanya bisa lebih baik
    • Zstandard lebih cepat dan kompresinya juga lebih baik
    • LZ4 jauh lebih cepat, tetapi ukurannya tidak kecil
  • Zstandard dan digest blake3 diizinkan

  • Lebih akurat jika mengatakan Rust secepat C

    • Itu sendiri tetap merupakan pencapaian besar
  • Pustaka mana yang dikompilasi lebih cepat

    • Pustaka mana yang memiliki dependensi lebih sedikit
    • Apakah ukuran masing-masing pustaka sama, dan mana yang lebih kecil
  • 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

    • Versi yang dioptimalkan dapat mengendalikan alokasi, menggunakan pola akses memori yang baik, serta memakai SIMD dan multithreading sehingga bisa dengan mudah 100x lebih cepat
    • Hanya dengan akses memori yang lebih baik saja, kecepatan program bisa naik lebih dari 20x
  • Maksudnya adalah implementasinya lebih cepat daripada yang di C

    • Tidak ada yang namanya "lebih cepat dari C"