Adaptateurs de Harnais de Benchmark


Les adaptateurs convertissent la sortie de l’outil de benchmark en format JSON Bencher Metric Format (BMF). Les adaptateurs sont exécutés sur le serveur API lorsqu’un nouveau rapport est reçu. Voir l’aperçu du benchmarking pour plus de détails. Un adaptateur peut être spécifié pour la sous-commande CLI le bencher run avec l’option --adapter. Si aucun adaptateur n’est spécifié, l’adaptateur magic est utilisé par défaut.

🪄 Magie (par défaut)

L’adaptateur Magic (magic) est un superset de tous les autres adaptateurs. Pour cette raison, il est l’adaptateur par défaut pour bencher run. Cependant, l’adaptateur magic doit être utilisé uniquement pour l’exploration.

Pour obtenir les meilleurs résultats, vous devriez spécifier un adaptateur de banc d’essai :


{…} JSON

L’adaptateur JSON (json) attend du JSON au format Bencher Metric Format (BMF). Il est parfait pour intégrer des harnais de benchmark personnalisés avec Bencher. Pour plus de détails, consultez comment suivre des benchmarks personnalisés et la référence JSON BMF.

Terminal window
bencher run --adapter json "bencher mock"

⏱️ Temps de Compilation

La sous-commande CLI bencher run peut être utilisée pour suivre le temps de compilation (c’est-à-dire le temps de construction) de vos livrables avec le drapeau --build-time. En coulisse, bencher run génère les résultats sous forme de JSON Bencher Metric Format (BMF). Il est donc conseillé d’utiliser explicitement l’adaptateur json. Pour plus de détails, voir comment suivre le temps de compilation.

La Mesure build-time (à savoir secondes (s)) est collectée. Seule la valeur du temps de compilation (c’est-à-dire value) est disponible. Ni lower_value ni upper_value ne sont collectés. La Mesure build-time n’est pas créée par défaut pour tous les Projets. Cependant, lorsque vous utilisez le drapeau --build-time, cette Mesure sera automatiquement créée pour votre Projet.

Terminal window
bencher run --adapter json --build-time "echo 0 > binary"

⚖️ Taille de fichier

La sous-commande CLI bencher run peut être utilisée pour suivre la taille du fichier (c’est-à-dire la taille binaire) de vos livrables avec l’option --file-size. L’option --file-size attend un chemin de fichier vers le fichier dont la taille sera mesurée. Sous le capot, bencher run sort les résultats en format JSON Bencher Metric Format (BMF). Il est donc de bonne pratique d’utiliser explicitement l’adaptateur json. Pour plus de détails, voir comment suivre la taille de fichier.

La Mesure de taille de fichier (c’est-à-dire octets (B)) est recueillie. Seule la valeur de la taille de fichier (c’est-à-dire valeur) est disponible. Ni valeur_inférieure ni valeur_supérieure ne sont collectées. La Mesure de taille de fichier n’est pas créée par défaut pour tous les Projets. Cependant, lorsque vous utilisez l’option --file-size, cette Mesure sera automatiquement créée pour votre Projet. L’option --file-size peut être utilisée plusieurs fois pour suivre plusieurs tailles de fichier.

Terminal window
bencher run --adapter json --file-size binary "echo 0 > binary"

#️⃣ C# DotNet

L’adaptateur C# DotNet (c_sharp_dot_net) attend une sortie BenchmarkDotNet au format JSON (c’est-à-dire --exporters json). La mesure de latence (c’est-à-dire nanosecondes (ns)) est recueillie. Cette sortie JSON est sauvegardée dans un fichier, vous devez donc utiliser l’argument --file du CLI bencher run pour spécifier le chemin de ce fichier.

Terminal window
bencher run --adapter c_sharp_dot_net --file results.json "dotnet run --exporters json --filter '*'"

Il existe deux options pour la métrique :

  • moyenne (par défaut) : Les valeurs inferieure et superieure sont une déviation standard en dessous et au-dessus de la moyenne (c’est-à-dire valeur) respectivement.
  • mediane : Les valeurs inferieure et superieure sont un écart interquartile en dessous et au-dessus de la médiane (c’est-à-dire valeur) respectivement.

Cela peut être spécifié dans la sous-commande CLI exécution du banc d’essai avec l’option --average.


➕ C++ Catch2

L’adaptateur C++ Catch2 (cpp_catch2) attend une sortie Catch2. La mesure de latency (c’est-à-dire nanosecondes (ns)) est recueillie. Les lower_value et upper_value sont une déviation standard en dessous et au-dessus de la moyenne (c’est-à-dire value) respectivement.

Terminal window
bencher run --adapter cpp_catch2 "make benchmarks"

➕ C++ Google

L’adaptateur C++ Google (cpp_google) nécessite un résultat Google Benchmark au format JSON (c’est-à-dire --benchmark_format=json). La mesure de latence (c’est-à-dire nanosecondes (ns)) est recueillie. Seule la moyenne (c’est-à-dire valeur) est disponible. Il n’y a ni valeur_inférieure ni valeur_supérieure.

Terminal window
bencher run --adapter cpp_google "make benchmarks --benchmark_format=json"

🕳 Go Bench

L’adapteur Go Bench (go_bench) attend la sortie de go test -bench. La mesure de latence (c’est-à-dire nanosecondes (ns)) est recueillie. Seule la moyenne (c’est-à-dire valeur) est disponible. Il n’y a pas de lower_value et de upper_value.

Terminal window
bencher run --adapter go_bench "go test -bench"

☕️ Java JMH

L’adaptateur Java JMH (java_jmh) attend une sortie Java Microbenchmark Harness (JMH) au format JSON (c.-à-d. -rf json). Cette sortie JSON est sauvegardée dans un fichier, vous devez donc utiliser l’argument --file du CLI bencher run pour spécifier le chemin de ce fichier. Les mesures de latence et de débit (c.-à-d. nanosecondes (ns) et opérations / seconde (ops/sec)) peuvent être recueillies. Les lower_value et upper_value sont les intervalles de confiance inférieur et supérieur pour la moyenne (c.-à-d. value) respectivement.

Terminal window
bencher run --adapter java_jmh --file results.json "java -jar benchmarks.jar -rf json -rff results.json"

🕸 Adaptateur de Benchmark JavaScript

L’Adaptateur de Benchmark JavaScript (js_benchmark) attend une sortie de Benchmark.js. La mesure de throughput (c’est-à-dire opérations / seconde (ops/sec)) est recueillie. Les valeurs lower_value et upper_value sont la marge d’erreur relative en dessous et au-dessus de la médiane (c’est-à-dire value) respectivement.

Terminal window
bencher run --adapter js_benchmark "node benchmarks.js"

🕸 Temps JavaScript

L’adaptateur Temps JavaScript (js_time) attend une sortie console.time/console.timeEnd. La mesure de latence (c’est-à-dire nanosecondes (ns)) est recueillie. Seul le temps d’opération (c’est-à-dire value) est disponible. Il n’y a ni lower_value ni upper_value.

Terminal window
bencher run --adapter js_time "node benchmarks.js"

🐍 Adaptateur Python ASV

L’adaptateur Python ASV (python_asv) attend la sortie de la ligne de commande airspeed velocity asv run. La mesure de latence (c’est-à-dire nanosecondes (ns)) est recueillie. Les lower_value et upper_value sont l’intervalle interquartile inférieur et supérieur à la médiane (c’est-à-dire value) respectivement.

Terminal window
bencher run --adapter python_asv "asv run"

🐍 Python Pytest

L’adaptateur Python Pytest (python_pytest) attend une sortie de pytest-benchmark au format JSON (c’est-à-dire --benchmark-json results.json). Cette sortie JSON est sauvegardée dans un fichier, vous devez donc utiliser l’argument --file du CLI bencher run pour spécifier le chemin de ce fichier. La mesure de latence (c’est-à-dire nanosecondes (ns)) est recueillie.

Terminal window
bencher run --adapter python_pytest --file results.json "pytest --benchmark-json results.json benchmarks.py"

Il y a deux options pour la Métrique :

  • mean (par défaut) : Les lower_value et upper_value sont une déviation standard en dessous et au-dessus de la moyenne (c’est-à-dire value) respectivement.
  • median : Les lower_value et upper_value sont une intervalle interquartile en dessous et au-dessus de la médiane (c’est-à-dire value) respectivement.

Cela peut être spécifié dans la sous-commande CLI bencher run avec l’argument optionnel --average.


♦️ Benchmark Ruby

L’adaptateur Benchmark Ruby (ruby_benchmark) attend la sortie du module Benchmark pour les méthodes #bm, #bmbm et #benchmark. Un libellé est requis pour chaque benchmark. La mesure de latence (c’est-à-dire nanosecondes (ns)) est recueillie. Seule la valeur rapportée (c’est-à-dire valeur) est disponible. Il n’y a ni valeur_inférieure ni valeur_supérieure.

Terminal window
bencher run --adapter ruby_benchmark "ruby benchmarks.rb"

🦀 Banc de test Rust

L’adaptateur de banc de test Rust (rust_bench) attend la sortie du banc de test libtest. La mesure de latence (c’est-à-dire nanosecondes (ns)) est recueillie. Les valeurs lower_value et upper_value sont l’écart en dessous et au-dessus de la médiane (c’est-à-dire valeur) respectivement.

Terminal window
bencher run --adapter rust_bench "cargo +nightly bench"

🦀 Critère Rust

L’adaptateur Critère Rust (rust_criterion) attend une sortie Criterion. La mesure de latence (c’est-à-dire nanosecondes (ns)) est recueillie. Les lower_value et upper_value sont les limites inférieure et supérieure de la pente (si disponible) ou de la moyenne (sinon) (c’est-à-dire valeur) respectivement.

Terminal window
bencher run --adapter rust_criterion "cargo bench"

🦀 Adaptateur Rust Iai

L’adaptateur Rust Iai (rust_iai) attend la sortie de Iai. Les mesures instructions, l1-accesses, l2-accesses, ram-accesses et estimated-cycles sont recueillies. Seules ces mesures (c’est-à-dire value) sont disponibles. Il n’y a pas de mesures lower_value et upper_value. Les mesures pour cet adaptateur ne sont pas créées par défaut pour tous les projets. Cependant, lorsque vous utilisez cet adaptateur, ces mesures seront automatiquement créées pour votre projet.

Terminal window
bencher run --adapter rust_iai "cargo bench"

🦀 Rust Iai-Callgrind

L’adaptateur Rust Iai (rust_iai_callgrind) nécessite une sortie Iai-Callgrind. Les mesures instructions, l1-hits, l2-hits, ram-hits, total-read-write et estimated-cycles sont recueillies. Seulement ces mesures (c’est-à-dire value) sont disponibles. Il n’y a pas de mesures de lower_value et upper_value. Les mesures pour cet adaptateur ne sont pas créées par défaut pour tous les projets. Cependant, lorsque vous utilisez cet adaptateur, ces mesures seront automatiquement créées pour votre Projet.

Terminal window
bencher run --adapter rust_iai_callgrind "cargo bench"

❯_️ Adaptateur Shell Hyperfine

L’adaptateur Shell Hyperfine (shell_hyperfine) attend une sortie Hyperfine au format JSON (c’est-à-dire --export-json results.json). Cette sortie JSON est sauvegardée dans un fichier, donc vous devez utiliser l’argument --file de la CLI bencher run pour spécifier le chemin de ce fichier. La mesure de latency (c’est-à-dire nanosecondes (ns)) est recueillie.

Terminal window
bencher run --adapter shell_hyperfine --file results.json "hyperfine --export-json results.json 'sleep 0.1'"

Il y a deux options pour la Métrique :

  • mean (par défaut) : Les valeurs lower_value et upper_value sont un écart-type en dessous et au-dessus de la moyenne (c’est-à-dire value) respectivement.
  • median : Les valeurs lower_value et upper_value sont les valeurs min et max respectivement.

Ceci peut être spécifié dans la sous-commande CLI bencher run avec l’option --average.



🐰 Félicitations! Vous avez tout appris sur les adaptateurs de harnais de benchmark! 🎉


Continuer : Benchmarking Continu ➡

🤖 Ce document a été automatiquement généré par OpenAI GPT-4. Il peut ne pas être précis et peut contenir des erreurs. Si vous trouvez des erreurs, veuillez ouvrir une issue sur GitHub.


Published: Fri, October 27, 2023 at 8:40:00 AM UTC | Last Updated: Thu, May 9, 2024 at 5:17:00 PM UTC