Zlib-rs, C से तेज़ है
(trifectatech.org)- 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
switchstatement में implicit fallthrough का उपयोग करके performance बढ़ाती है - Rust में ऐसा समान mechanism नहीं होने से performance drop होता है
- LLVM के
-Cllvm-args=-enable-dfa-jump-threadoption को लागू किया गया → 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 →
flate2crate मेंzlib-rsflag का उपयोग करें - C → dynamic library के रूप में compile करके इस्तेमाल किया जा सकता है
- Rust →
1 टिप्पणियां
Hacker News टिप्पणियाँ
यह समझ में आता है कि उन्हें पहले से Rust आता है
unsafekeyword का काफी इस्तेमाल हुआ है"C से तेज़" आखिरकार अलग design, implementation, algorithm आदि पर आकर टिकता है
दावा है कि Nim में zippy, zlib से 1.5x से 2x तेज़ है
जिज्ञासा है कि Rust का performance सच में Rust से जुड़ा है, या बस यह दूसरी C language versions की तुलना में ज़्यादा optimized implementation है
Chromium standard में मौजूद algorithm की वजह से zlib का उपयोग करता है
Zstandard और blake3 digest की अनुमति है
यह कहना ज़्यादा सटीक है कि Rust, C जितना तेज़ है
कौन सी लाइब्रेरी ज़्यादा तेज़ compile होती है
Rust users को Rust और C की तुलना करना पसंद है, लेकिन C users कम ही C और Rust की तुलना करते हैं
compiled system languages के मामले में language का speed पर लगभग कोई असर नहीं होता
मतलब यह implementation, C में मौजूद implementation से तेज़ है