2 Punkte von GN⁺ 2024-08-25 | Noch keine Kommentare. | Auf WhatsApp teilen

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.

Noch keine Kommentare.