2 points par GN⁺ 2024-08-25 | Aucun commentaire pour le moment. | Partager sur WhatsApp

Partage d’expérience sur l’amélioration des performances de serde_json

  • Introduction
    • Un récent travail d’optimisation a permis d’améliorer de 20 % la vitesse de traitement des chaînes dans serde_json.
    • Utilisation de serde, le framework de sérialisation et de désérialisation de Rust, ainsi que de serde_json pour le traitement de JSON.
    • Ces améliorations de performances peuvent bénéficier à l’ensemble de l’écosystème.

Point de départ

  • Travail sur la bibliothèque #[iex]
    • Utilisation de serde et serde_json pour les benchmarks de performance.
    • Découverte de choix discutables dans du code critique pour les performances.
    • Le chemin d’erreur était plus de deux fois plus lent que le chemin de succès.

Résolution du problème

  • Optimisation du chemin d’erreur
    • La fonction position_of_index provoquait un goulot d’étranglement.
    • Utilisation du crate memchr pour optimiser la recherche dans les chaînes.
    • Résultat : amélioration de la vitesse sur le chemin d’erreur.

Optimisations supplémentaires

  • Optimisation du parsing des chaînes
    • Tentative infructueuse d’utiliser la fonction memchr2.
    • Utilisation de la technique SWAR (SIMD dans les registres) pour optimiser la recherche de caractères de contrôle.
    • Résolution du problème de baisse de performances sur les chaînes courtes.

Traitement Unicode

  • Optimisation du parsing Unicode
    • Amélioration des performances du décodage hexadécimal.
    • Mise en place d’un décodage efficace à l’aide de la table HEX.
    • Résultat : parsing de War and Peace encodé en JSON accéléré de 21 %.

Résultat final

  • Optimisation de l’encodage UTF-8
    • Implémentation directe de l’encodage UTF-8 à la place de la fonction char::encode_utf8.
    • Résultat : nouvelle amélioration de 9 % de la vitesse de parsing de War and Peace.

Résumé de GN⁺

  • Cet article partage une expérience d’amélioration de 20 % des performances de serde_json, largement utilisé dans l’écosystème Rust.
  • Le processus d’optimisation couvre diverses techniques et méthodes de résolution de problèmes.
  • Les optimisations du parsing Unicode et des chaînes améliorent fortement les performances du traitement JSON.
  • Cet article sera utile aux développeurs intéressés par l’optimisation des performances et aura un impact positif sur l’ensemble de l’écosystème Rust.

Aucun commentaire pour le moment.

Aucun commentaire pour le moment.