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.