Die Trace2-Facility
Trace2 (eingefuhrt in Git 2.22) ist die in Git eingebaute strukturierte Tracing-Facility.
Drei Varianten
GIT_TRACE2: menschenlesbarer Text.GIT_TRACE2_PERF: Text mit Timing-Spalten.GIT_TRACE2_EVENT: JSON, ein Ereignis pro Zeile.
GIT_TRACE2=1 git status
GIT_TRACE2_PERF=/tmp/perf.log git fetch
GIT_TRACE2_EVENT=/tmp/event.jsonl git log --oneline | head
Persistente Konfiguration
[trace2]
perfTarget = ~/git-trace/
eventTarget = ~/git-trace/
eventNesting = 4
maxFiles = 200
Das Perf-Format lesen
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
JSON-Analyse
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
Was zu messen ist
- git status auf einem frischen Checkout vs nach Aktivierung von fsmonitor.
- git log -- path mit und ohne changed-path Bloom-Filter.
- git fetch vor und nach MIDX und Erreichbarkeits-Bitmaps.
- git gc mit geometrischem vs vollstandigem Repack.
Haufige Fehler
Nur eine Probe sammeln — Caches und warmes Dateisystem beeinflussen Zahlen drastisch.