Da Anonimo (non verificato) , 29 Aprile 2026

La facility Trace2

Trace2 (introdotto in Git 2.22) e la facility di tracing strutturato integrata in Git. Emette eventi begin/end di regione, tracking dei processi figli, e informazioni di timing.

Tre varianti

  • GIT_TRACE2: testo leggibile.
  • GIT_TRACE2_PERF: testo con colonne di timing.
  • GIT_TRACE2_EVENT: JSON, un evento per riga.
GIT_TRACE2=1 git status
GIT_TRACE2_PERF=/tmp/perf.log git fetch
GIT_TRACE2_EVENT=/tmp/event.jsonl git log --oneline | head

Configurazione persistente

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

Leggere il formato 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

Analisi 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

Cosa misurare

  • git status su un checkout fresco vs dopo aver abilitato fsmonitor.
  • git log -- path con e senza Bloom filter changed-path.
  • git fetch prima e dopo MIDX e bitmap di raggiungibilita.
  • git gc con repack geometrico vs completo.

Errori comuni

Raccogliere un solo campione — cache e filesystem caldo influenzano drasticamente i numeri.