Perf regression: golang/rescan wall +34% (1d523d30, #1403)
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 55/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Ambito
- backend, performance
Direzione di ricerca
Start in patch/redirect/mod.rs around line 8536 and inspect how the Go rewriter calls GoSumEditor::zip_versions and go_mod_edit::prunes_module_graph for each patched dependency. Read the benchmark repro and run its golang/ comparison to establish a baseline. The issue is done when the repeated scans are addressed and the benchmark shows the regression has been brought back toward the base performance.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
[agent] Bench: golang/rescan wall time is +34% and golang/hosted +23% on today's main (17793173), compared with f3c6313a (the previous bench run, 2026-10-09). Request counts are unchanged (64).
Culprit: 1d523d30, #1403 ("Fix Go replace for unselected versions (#391, #392, #509)"). Profiling found it: the hot function, GoSumEditor::zip_versions, was introduced by that commit. It was not bisected with builds.
Same-machine interleaved compare
Base f3c6313a → head 17793173, on a 4 vCPU Intel Xeon @ 2.10GHz cloud sandbox. An A/A run on the same machine was clean (golang/rescan +2.6%, ≈).
| scenario | round | base wall | head wall | Δ wall [95% CI] | Δ CPU | requests |
|---|---|---|---|---|---|---|
golang/hosted |
1 (15+10 pairs) | 73.0 ms | 94.5 ms | +27.3% [+18.5, +36.3] | +26.8% | 64 |
golang/hosted |
2 (20+10 pairs) | 70.6 ms | 87.2 ms | +23.4% [+14.6, +32.1] | +27.7% | 64 |
golang/rescan |
1 | 67.1 ms | 95.2 ms | +45.5% [+33.9, +51.1] | +37.2% | 64 |
golang/rescan |
2 | 67.0 ms | 88.2 ms | +34.3% [+26.4, +39.0] | +31.0% | 64 |
Hot spot
Callgrind on the head binary, golang/rescan (1200 modules, 30 patched), inclusive instructions:
68.3% patch::redirect::rewriter_groups::{{closure}}
30.4% vendor::go_sum_edit::GoSumEditor::zip_versions
29.0% <SplitWhitespace as Iterator>::next
15.9% vendor::go_mod_edit::scan_hosted_replace
10.3% go_mod_edit::strip_comment
The golang rewriter (patch/redirect/mod.rs, around line 8536) calls go_sum.zip_versions(&fname) once per patched dep, and each call splits every line of go.sum. That makes it O(patched deps × go.sum lines). go_mod_edit::prunes_module_graph(&go_mod) is also evaluated per dep. One pass over go.sum that builds a module → zip versions map, plus a single prunes_module_graph read hoisted out of the loop, should bring it back.
Repro
export CARGO_PROFILE_PERF_INHERITS=release CARGO_PROFILE_PERF_LTO=thin CARGO_PROFILE_PERF_STRIP=none
git worktree add /tmp/base f3c6313a && (cd /tmp/base && CARGO_TARGET_DIR=/tmp/tb cargo build --locked --profile perf -p socket-patch-cli)
CARGO_TARGET_DIR=/tmp/th cargo build --locked --profile perf -p socket-patch-cli -p socket-patch-bench
/tmp/th/perf/socket-patch-bench compare --base /tmp/tb/perf/socket-patch --head /tmp/th/perf/socket-patch -f '^golang/' --runs 20
Runner: nproc 4, Intel(R) Xeon(R) Processor @ 2.10GHz.
Generated by Claude Code
- Lingua principale
- Rust
- Stelle
- 8
- Fork
- 1
- Merge medio
- 19h 1m
- PR unite (30g)
- 473
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di SocketDev/socket-patch
-
agent:triaged bug pm:go priority:p2
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
SocketDev/socket-patch#1409 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
agent:triaged bug bughunt pm:npm priority:p3 ux
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
SocketDev/socket-patch#1072 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
agent:triaged bug bughunt pm:yarn-berry priority:p1
Difficoltà 2/5 1-3 ore Idoneità per principianti 73/100
SocketDev/socket-patch#783 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Vendored cargo warns cargo_multi_version_old_cargo ("declares no rust-version") when the root package inherits rust-version from [workspace.package]Forse già presa Una pull request collegata a questa issue è aperta o già unita. Apertaagent:triaged bug bughunt pm:cargo priority:p2
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
SocketDev/socket-patch#651 · 3 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
agent:triaged bench perf-regression pm:nuget priority:p3
Difficoltà 4/5 3-5 giorni Idoneità per principianti 45/100
SocketDev/socket-patch#1425 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di SocketDev/socket-patch
Issue simili
-
proxy: SQL-over-HTTP turns empty arrays into [""] or [false], or HTTP 500 for int and float arraysAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 83/100
neondatabase/neon#12965 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
goauthentik/authentik#26867 ·
I maintainer di solito rispondono entro 1 giorno
-
api bug macos maintainer-needed p2 triaged
Difficoltà 2/5 1-3 ore Idoneità per principianti 66/100
I maintainer di solito rispondono entro 1 giorno
-
area::tern difficulty::easy good first issue kind::cleanup triage::ready
Difficoltà 1/5 1-3 ore Idoneità per principianti 88/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
eclipse-zenoh/zenoh#2842 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno