Par Anonyme (non vérifié) , 29 avril 2026

La fonctionnalité Trace2

Trace2 (introduit dans Git 2.22) est la fonctionnalité de tracing structuré intégrée dans Git. Elle émet des événements de début/fin de région, du tracking de processus enfants et des informations de timing dans un schéma stable.

Trois saveurs

  • GIT_TRACE2 : texte lisible.
  • GIT_TRACE2_PERF : texte avec colonnes de timing.
  • GIT_TRACE2_EVENT : JSON, un événement par ligne.
GIT_TRACE2=1 git status
GIT_TRACE2_PERF=/tmp/perf.log git fetch
GIT_TRACE2_EVENT=/tmp/event.jsonl git log --oneline | head

Config persistante

[trace2]
perfTarget = ~/git-trace/
eventTarget = ~/git-trace/
eventNesting = 4
maxFiles = 200

Lire le format perf

14:23:01.000 |  d0 | main         |  start  |  ... | git status
14:23:01.012 |  d0 | main         | region_enter |  | label:read_directory
14:23:01.220 |  d0 | main         | region_leave |  | label:read_directory
14:23:01.230 |  d0 | main         | exit         |  | code:0

Analyse JSON

jq -c 'select(.event=="region_leave") | {label, t_rel}' /tmp/event.jsonl
jq -s 'group_by(.label) | map({label:.[0].label, total:(map(.t_rel) | add)})' /tmp/event.jsonl

Quoi mesurer

  • git status sur checkout frais vs après activation fsmonitor.
  • git log -- path avec et sans filtres Bloom.
  • git fetch avant et après MIDX et bitmaps.
  • git gc avec repack géométrique vs complet.

Erreurs courantes

Ne collecter qu'un échantillon — caches et filesystem chaud affectent dramatiquement les chiffres.

Tooling externe

Des outils comme git-trace2-tools sur GitHub transforment les streams JSON en flame graphs.