veilletech.fr
9 oct. Feed du jour
#04 MESURE Article

Hyperfine 2.0 : plus de shell, et un JSON qui change

Votre benchmark tourne toujours. Il ne mesure peut-être plus la même chose.

Hyperfine 2.0.0 lance désormais les commandes mesurées sans shell, exporte un JSON au schéma 2 — la moyenne passe de results[i].mean à results[i].summary.time_wall_clock.mean — et supprime --time-unit, --sort et --reference. En échange, il mesure le pic mémoire par défaut et, via --metrics, les compteurs matériels. Les scripts de CI qui s'en servent sont à revoir avant la mise à jour.

2 min de lectureintermédiairevidéo 1:22
Partager
Sommaire4 sections
  1. Ce qui se passe
  2. Ce qui casse
  3. Ce que ça apporte
  4. À retenir

Ce qui se passe

Hyperfine, l'outil de benchmark en ligne de commande (sharkdp/hyperfine), passe en 2.0.0. Il mesure désormais bien plus que le temps, mais change en route trois comportements dont dépendent les scripts existants. L'article d'origine est en allemand ; chaque point ci-dessous est recoupé avec les notes de version.

Ce qui casse

Plus de shell par défaut. Les commandes mesurées sont lancées directement (--shell=none) : pipes, redirections, && et variables ne sont plus interprétés. -S, alias de --shell=default, rétablit l'ancien comportement (sh sous Unix, cmd.exe sous Windows) ; --shell <SHELL> en choisit un autre. Les commandes --setup, --prepare, --conclude et --cleanup passent toujours par un shell.

Terminal
hyperfine 'cat data.json | jq .items'      # 1.x : interprété par sh
hyperfine -S 'cat data.json | jq .items'   # 2.0 : à demander

Un nouveau JSON. --export-json suit le schéma version 2 : métadonnées, mesures par exécution et résumé statistique pour chaque métrique. Les temps sont en secondes, la mémoire en octets.

Terminal
jq '.results[0].summary.time_wall_clock.mean' bench.json        # ex-.results[0].mean
jq '.results[0].measurements[].time_wall_clock.value' bench.json  # ex-.results[0].times[]

Le CSV aligne toutes les métriques retenues ; Markdown, AsciiDoc et Org-mode n'en montrent plus qu'une, la première.

Des options en moins. --time-unit/-u, --sort, --reference et --reference-name disparaissent. La première commande sert toujours de référence ; un appel avec --reference indique comment migrer.

Ce que ça apporte

Hyperfine affiche désormais le pic de mémoire résidente à côté du temps écoulé : une variante plus rapide mais plus gourmande se voit d'emblée. --metrics choisit d'autres mesures — instructions, cycles CPU, défauts de cache, erreurs de prédiction de branchement — et leurs unités :

Terminal
hyperfine --metrics time_wall_clock:ms,memory_peak_resident:MiB 'mypy .' 'ty check'

Les compteurs matériels exigent que le processeur et le système les exposent. La nouvelle option --env pose une variable d'environnement sans shell, y compris en benchmark paramétré :

Terminal
hyperfine -P threads 1 8 --env 'OMP_NUM_THREADS={threads}' './solveur'

Source : Welcher Befehl ist schneller? Hyperfine misst nach, heise Developer, article en allemand, 8 octobre 2026. Notes de version : hyperfine v2.0.0.