Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

Perf regression: nuget/rescan wall +31% (f3c6313a..17793173; #1340/#1341)

Open
#1,425 2 comments 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
45/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Active
Tech stack
rust
Domain
cli, performance

Research direction

Start by reproducing the nuget/hosted and nuget/rescan regression with the provided interleaved compare command, then inspect scan::hosted::run_redirect_selected_untracked, hosted::engine::confirm, and patch::redirect::presence::groups_present. The profile points to automaton construction and repeated parsing of obj/project.assets.json; use the listed commits as candidates to investigate. Done means identifying the cause and showing the benchmark no longer has the regression.

Written by the indexing model from the issue text.

Description

agent:triaged bench perf-regression pm:nuget priority:p3

[agent] Bench: nuget/rescan wall time is +31% and nuget/hosted +28% on today's main (17793173), compared with f3c6313a (the previous bench run, 2026-10-09). Request counts are unchanged (53).

Culprit: not bisected. The candidates are the two commits in f3c6313a..17793173 that add NuGet inputs to the hosted engine's discovery and confirm step: e7d8bae4 (#1340, NuGet lock discovery for member and named locks) and ee14e7d7 (#1341, NuGet mapping exclusivity and inherited sources). 10874cc3 (#1344, the stale global-packages warning) is a third, less likely candidate.

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.

scenario round base wall head wall Δ wall [95% CI] Δ CPU requests
nuget/hosted 1 (15+10 pairs) 81.9 ms 100.9 ms +28.4% [+12.5, +34.0] +20.0% 53
nuget/hosted 2 (20+10 pairs) 77.9 ms 95.7 ms +28.2% [+20.6, +38.1] +21.7% 53
nuget/rescan 1 65.1 ms 88.9 ms +34.5% [+24.6, +48.5] +24.7% 53
nuget/rescan 2 61.9 ms 80.8 ms +30.7% [+24.2, +37.2] +23.9% 53

(These numbers use the bench fixture from #1422, which allows #1344's new redirect_nuget_stale_global_package warning. Without that change the head fails validation on main.)

Hot spot

Callgrind on the head binary, nuget/rescan (900 packages, 25 patched, restored project with obj/project.assets.json), inclusive instructions:

41.7%  scan::hosted::run_redirect_selected_untracked
34.8%    hosted::engine::confirm
34.6%      patch::redirect::presence::groups_present
23.5%        aho_corasick::AhoCorasick::new          (automaton build, 1 call)
11.0%        Automaton::try_find_overlapping (27 texts)
14.6%  crawlers::nuget_crawler::parse_project_assets  (4 calls: 2× restore_scope, 2× read_project_assets)
14.8%  vex::discover::nuget::extract

About a third of the scan goes to groups_present, which builds a DFA and scans 27 texts. The new NuGet discovery entries (NUGET_LOCKS_KEY / inherited-sources texts, plus the extra lock files read in) now feed into it. obj/project.assets.json is also parsed into a serde_json::Value four times per scan.

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 '^nuget/' --runs 20

Runner: nproc 4, Intel(R) Xeon(R) Processor @ 2.10GHz.


Generated by Claude Code

Dominant language
Rust
Stars
8
Forks
1
Avg merge
16h 22m
Merged PRs (30d)
583

Getting set up

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from SocketDev/socket-patch

All issues in SocketDev/socket-patch

Similar issues

More Rust issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.