La facilidad Trace2
Trace2 (introducido en Git 2.22) es la facilidad de tracing estructurado integrada en Git. Emite eventos de inicio/fin de región, tracking de procesos hijos e información de tiempo en un esquema estable, adecuado tanto para inspección humana como análisis automatizado.
Tres sabores
GIT_TRACE2: texto legible.GIT_TRACE2_PERF: texto con columnas de tiempo.GIT_TRACE2_EVENT: JSON, un evento por línea.
GIT_TRACE2=1 git status
GIT_TRACE2_PERF=/tmp/perf.log git fetch
GIT_TRACE2_EVENT=/tmp/event.jsonl git log --oneline | head
Config persistente
[trace2]
perfTarget = ~/git-trace/
eventTarget = ~/git-trace/
eventNesting = 4
maxFiles = 200
Leer el 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
Análisis 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
Qué medir
- git status en checkout fresco vs tras habilitar fsmonitor.
- git log -- path con y sin filtros Bloom.
- git fetch antes y después de MIDX y bitmaps.
- git gc con repack geométrico vs completo.
Errores comunes
Recolectar solo una muestra — caches y filesystem caliente afectan dramáticamente los números.
Tooling externo
Herramientas como git-trace2-tools en GitHub convierten streams JSON en gráficos de llama.