Erfahrungen mit Performance-Verbesserungen in serde_json
- Einleitung
- Durch jüngste Performance-Arbeiten wurde die Geschwindigkeit der String-Verarbeitung in serde_json um 20 % verbessert.
- Verwendet werden serde, das Serialisierungs- und Deserialisierungs-Framework von Rust, und serde_json für die JSON-Verarbeitung.
- Von Performance-Verbesserungen kann das gesamte Ökosystem profitieren.
Ausgangspunkt
- Arbeit an der Bibliothek #[iex]
- Für Performance-Benchmarks werden serde und serde_json verwendet.
- In performancekritischem Code wurde eine fragwürdige Entscheidung entdeckt.
- Der Fehlerpfad war mehr als doppelt so langsam wie der Erfolgspfad.
Problemlösung
- Optimierung des Fehlerpfads
- Die Funktion
position_of_index verursachte einen Flaschenhals.
- Mit dem Crate
memchr wurde die String-Suche optimiert.
- Ergebnis der Performance-Verbesserung: Der Fehlerpfad wurde schneller.
Weitere Optimierungen
- Optimierung des String-Parsings
- Ein Versuch mit der Funktion
memchr2 scheiterte.
- Mit der SWAR-Technik (SIMD innerhalb eines Registers) wurde die Suche nach Steuerzeichen optimiert.
- Das Problem des Performance-Abfalls bei kurzen Strings wurde gelöst.
Unicode-Verarbeitung
- Optimierung des Unicode-Parsings
- Die Performance beim Hexadezimal-Decoding wurde verbessert.
- Mit der Tabelle
HEX wurde ein effizientes Decoding implementiert.
- Ergebnis der Performance-Verbesserung: Das Parsen der JSON-kodierten Ausgabe von War and Peace wurde um 21 % beschleunigt.
Endergebnis
- Optimierung der UTF-8-Kodierung
- Statt der Funktion
char::encode_utf8 wurde eine direkte UTF-8-Kodierung implementiert.
- Ergebnis der Performance-Verbesserung: Das Parsen von War and Peace wurde zusätzlich um 9 % schneller.
Zusammenfassung von GN⁺
- Dieser Beitrag teilt die Erfahrung, die Performance von serde_json, das im Rust-Ökosystem weit verbreitet ist, um 20 % verbessert zu haben.
- Im Verlauf der Performance-Optimierung werden verschiedene Techniken und Lösungsansätze behandelt.
- Optimierungen beim Unicode- und String-Parsing verbessern die JSON-Verarbeitungsleistung deutlich.
- Der Beitrag ist nützlich für Entwickler, die sich für Performance-Optimierung interessieren, und wird sich positiv auf das gesamte Rust-Ökosystem auswirken.
Noch keine Kommentare.