4 पॉइंट द्वारा GN⁺ 2025-03-17 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • zlib-rs डेटा compression के लिए Rust-आधारित zlib implementation है, और हाल ही में 0.4.2 रिलीज़ के साथ इसमें बड़ा performance improvement आया है
  • यह फिलहाल सबसे तेज़ API-compatible zlib implementation है, और खास तौर पर decompression performance में प्रतिस्पर्धी उत्पादों से बेहतर है
  • मुख्य performance improvements: runtime पर optimal SIMD implementation का अपने-आप चयन, DFA optimization आदि लागू

मल्टीवर्ज़न प्रोसेसिंग (Multiversioning)

  • runtime पर CPU के अनुसार सबसे तेज़ function version अपने-आप चुना जाता है
  • Rust में डिफ़ॉल्ट रूप से multiversion support नहीं है, इसलिए इसे manually implement करना पड़ता है
  • code के runtime overhead को न्यूनतम रखते हुए optimal performance देता है

DFA optimization (Deterministic Finite Automata)

  • C language switch statement में implicit fallthrough का उपयोग करके performance बढ़ाती है
  • Rust में ऐसा समान mechanism नहीं होने से performance drop होता है
  • LLVM के -Cllvm-args=-enable-dfa-jump-thread option को लागू किया गया → performance वापस मिली
  • यह LLVM की default settings में शामिल नहीं है, लेकिन आगे चलकर Rustc में default रूप से enable होने की योजना है

Benchmark performance तुलना

1. zlib-ng के मुकाबले performance तुलना

  • zlib-rs ज़्यादातर input sizes में zlib-ng से तेज़ performance दिखाता है
  • खास तौर पर 1KB input पर लगभग 10% तेज़, और 65KB input पर लगभग 6% तेज़
  • सबसे छोटे input sizes में यह थोड़ा पीछे रहता है, लेकिन सामान्य रूप से इसका performance बेहतर है

उदाहरण के लिए:

  • जब input size 4 bytes हो, तो zlib-ng थोड़ा तेज़ है, लेकिन real-world usage में इसका असर कम है
  • जब input size 1KB हो, तो zlib-rs लगभग 10% ज़्यादा तेज़ है
  • जब input size 65KB हो, तो zlib-rs लगभग 6% ज़्यादा तेज़ है

→ zlib-ng के मुकाबले बड़े chunks में स्पष्ट performance बढ़त

2. zlib-chromium के मुकाबले performance तुलना

  • छोटे chunks में zlib-chromium तेज़ है
  • लेकिन बड़े chunks में zlib-rs आगे है
  • सामान्य आकार के input में zlib-rs बेहतर performance देता है

उदाहरण के लिए:

  • जब input size 4 bytes हो, तो zlib-chromium लगभग 12% ज़्यादा तेज़ है
  • जब input size 16 bytes हो, तो zlib-chromium लगभग 6% ज़्यादा तेज़ है
  • जब input size 1KB या उससे अधिक हो, तो zlib-rs performance में आगे है

→ सामान्य sizes में zlib-rs की performance बढ़त

Compression performance तुलना

  • compression performance में सुधार जारी है, लेकिन नतीजे मिश्रित हैं
  • default compression level (6) पर 6% improvement, और highest compression level (9) पर 13% performance improvement
  • बाकी compression levels पर अभी भी zlib-ng तेज़ है

उदाहरण के लिए:

  • compression level 6 पर zlib-rs, zlib-ng से लगभग 6% तेज़ है
  • compression level 9 पर zlib-rs, zlib-ng से लगभग 13% तेज़ है
  • लेकिन compression levels 1~4 पर zlib-ng आगे है

निष्कर्ष

  • zlib-rs, decompression performance में zlib-ng और zlib-chromium से बेहतर है
  • compression performance में सुधार जारी है, और प्रमुख compression levels पर अर्थपूर्ण performance gains दिख रहे हैं
  • Rust और C projects, दोनों में इस्तेमाल किया जा सकता है
    • Rust → flate2 crate में zlib-rs flag का उपयोग करें
    • C → dynamic library के रूप में compile करके इस्तेमाल किया जा सकता है

1 टिप्पणियां

 
GN⁺ 2025-03-17
Hacker News टिप्पणियाँ
  • यह समझ में आता है कि उन्हें पहले से Rust आता है

    • लगा था कि Rust का उद्देश्य safety है, लेकिन इस लाइब्रेरी में unsafe keyword का काफी इस्तेमाल हुआ है
    • जिज्ञासा है कि किस बिंदु पर C और Rust के बीच का अंतर अर्थहीन हो जाता है
    • inline assembly का उपयोग करें तो दोनों भाषाएँ एक जैसा machine code बना सकती हैं
    • जिज्ञासा है कि क्या Rust compiler, C compiler की तुलना में optimization बेहतर करता है
  • "C से तेज़" आखिरकार अलग design, implementation, algorithm आदि पर आकर टिकता है

    • यह मौजूदा implementations से तेज़ हो सकता है, लेकिन "C से तेज़" कहना अजीब दावा है
  • दावा है कि Nim में zippy, zlib से 1.5x से 2x तेज़ है

    • C में standard install से तेज़ zlib implementations भी मौजूद हैं
    • zlib आजकल पुराना लग सकता है, लेकिन अब भी लोकप्रिय है
    • इसे नए parallel-friendly format की नींव के रूप में इस्तेमाल किया जाता है
  • जिज्ञासा है कि Rust का performance सच में Rust से जुड़ा है, या बस यह दूसरी C language versions की तुलना में ज़्यादा optimized implementation है

    • कुछ sorting cases में C++, C से consistently बेहतर performance देता है
    • जिज्ञासा है कि Rust और C के बीच भी ऐसा कुछ है या नहीं
  • Chromium standard में मौजूद algorithm की वजह से zlib का उपयोग करता है

    • बेहतर algorithm चुनने पर बेहतर performance मिल सकता है
    • Zstandard ज़्यादा तेज़ है और compression भी बेहतर करता है
    • LZ4 बहुत ज़्यादा तेज़ है, लेकिन size छोटा नहीं होता
  • Zstandard और blake3 digest की अनुमति है

  • यह कहना ज़्यादा सटीक है कि Rust, C जितना तेज़ है

    • यह फिर भी बड़ी उपलब्धि है
  • कौन सी लाइब्रेरी ज़्यादा तेज़ compile होती है

    • किस लाइब्रेरी की dependencies कम हैं
    • क्या हर लाइब्रेरी का size समान है, और कौन सी छोटी है
  • Rust users को Rust और C की तुलना करना पसंद है, लेकिन C users कम ही C और Rust की तुलना करते हैं

  • compiled system languages के मामले में language का speed पर लगभग कोई असर नहीं होता

    • optimized versions allocation को control करते हैं, अच्छे memory access patterns का उपयोग करते हैं, और SIMD व multithreading का इस्तेमाल करके आसानी से 100x से भी ज़्यादा तेज़ हो सकते हैं
    • सिर्फ बेहतर memory access से भी program की speed 20x से ज़्यादा बढ़ सकती है
  • मतलब यह implementation, C में मौजूद implementation से तेज़ है

    • "C से तेज़" जैसी कोई चीज़ नहीं है