Zlib-rs ist schneller als C
(trifectatech.org)- zlib-rs ist eine Rust-basierte zlib-Implementierung für die Datenkomprimierung; mit der kürzlich veröffentlichten Version 0.4.2 wurde die Performance deutlich verbessert
- Derzeit ist es die schnellste API-kompatible zlib-Implementierung und insbesondere bei der Dekomprimierung der Konkurrenz überlegen
- Wichtige Performance-Verbesserungen: automatische Auswahl der optimalen SIMD-Implementierung zur Laufzeit, Anwendung von DFA-Optimierungen usw.
Multiversioning
- Zur Laufzeit wird abhängig von der CPU automatisch die schnellste Funktionsversion gewählt
- In Rust gibt es standardmäßig keine Unterstützung für Multiversioning, daher muss es manuell implementiert werden
- Bietet optimale Performance bei minimalem Laufzeit-Overhead im Code
DFA-Optimierung (Deterministic Finite Automata)
- C verbessert die Performance durch implizites Fallthrough in
switch-Anweisungen - In Rust gibt es keinen vergleichbaren Mechanismus, was zu Performance-Verlusten führt
- Anwendung der LLVM-Option
-Cllvm-args=-enable-dfa-jump-thread→ Performance wiederhergestellt - Nicht in den LLVM-Standardeinstellungen enthalten, soll aber künftig in Rustc standardmäßig aktiviert werden
Benchmark-Vergleich der Performance
1. Performance-Vergleich mit zlib-ng
- zlib-rs zeigt bei den meisten Eingabegrößen eine bessere Performance als zlib-ng
- Besonders bei 1-KB-Eingaben etwa 10 % schneller und bei 65-KB-Eingaben etwa 6 % schneller
- Bei den kleinsten Eingabegrößen etwas langsamer, insgesamt aber meist im Vorteil
Zum Beispiel:
- Bei einer Eingabegröße von 4 Byte ist zlib-ng etwas schneller, in der Praxis fällt das jedoch kaum ins Gewicht
- Bei einer Eingabegröße von 1 KB ist zlib-rs etwa 10 % schneller
- Bei einer Eingabegröße von 65 KB ist zlib-rs etwa 6 % schneller
→ Gegenüber zlib-ng klarer Performance-Vorteil bei großen Chunks
2. Performance-Vergleich mit zlib-chromium
- Bei kleinen Chunks ist zlib-chromium schneller
- Bei großen Chunks ist jedoch zlib-rs überlegen
- Bei typischen Eingabegrößen liefert zlib-rs die bessere Performance
Zum Beispiel:
- Bei einer Eingabegröße von 4 Byte ist zlib-chromium etwa 12 % schneller
- Bei einer Eingabegröße von 16 Byte ist zlib-chromium etwa 6 % schneller
- Ab einer Eingabegröße von 1 KB liegt zlib-rs vorn
→ Performance-Vorteil von zlib-rs bei typischen Größen
Vergleich der Komprimierungsleistung
- Die Komprimierungsleistung wird noch verbessert und zeigt gemischte Ergebnisse
- Auf dem Standard-Komprimierungslevel (6) 6 % schneller, auf dem höchsten Komprimierungslevel (9) 13 % schneller
- Bei anderen Komprimierungsstufen ist zlib-ng weiterhin schneller
Zum Beispiel:
- Auf Komprimierungslevel 6 ist zlib-rs etwa 6 % schneller als zlib-ng
- Auf Komprimierungslevel 9 ist zlib-rs etwa 13 % schneller als zlib-ng
- Bei Komprimierungslevel 1–4 liegt jedoch zlib-ng vorn
Fazit
- zlib-rs ist bei der Dekomprimierungsleistung zlib-ng und zlib-chromium überlegen
- Die Komprimierungsleistung wird weiter verbessert und zeigt bei wichtigen Komprimierungsstufen deutliche Fortschritte
- Sowohl in Rust- als auch in C-Projekten einsetzbar
- Rust → Im
flate2-Crate das Flagzlib-rsverwenden - C → Kann als dynamische Bibliothek kompiliert und verwendet werden
- Rust → Im
1 Kommentare
Hacker-News-Kommentare
Mir wurde klar, dass ich Rust bereits kenne
unsafesehr häufig„Schneller als C“ läuft letztlich auf anderes Design, andere Implementierung, andere Algorithmen usw. hinaus
zippy in Nim behauptet, 1,5- bis 2-mal schneller als zlib zu sein
Ich frage mich, ob Rusts Leistung mit Rust selbst zu tun hat oder ob es einfach stärker optimiert ist als andere C-Versionen
Chromium verwendet zlib wegen des im Standard festgelegten Algorithmus
Zstandard und blake3-Digests sind erlaubt
Es wäre genauer zu sagen, dass Rust so schnell wie C ist
Welche Bibliothek kompiliert schneller
Rust-Nutzer vergleichen Rust und C gern miteinander, aber C-Nutzer vergleichen C und Rust nur selten
Bei kompilierten Systemsprachen hat die Sprache selbst kaum Einfluss auf die Geschwindigkeit
Gemeint ist, dass die Implementierung schneller ist als die in C