Rust: query evaluation ~15× slower on 2.26.4 vs 2.26.3 (4 min → 45–60 min, type-inference/data-flow stage)
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 45/100
- Tipo di issue
- Bug
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Attiva
- Stack tecnologico
- rust
- Ambito
- compilers, performance
Direzione di ricerca
Confronta i bundle CodeQL 2.26.3 e 2.26.4 usando il Rust workspace segnalato ed esamina i commit 52cbb679, e9bd6988, ce360c4f, 5f76c946 e 1d6ac57d. Raccogli, se necessario, l’output evaluator-log o tuple-counting suggerito, quindi determina se le modifiche a callback, rust-analyzer o macro spiegano la regressione. Il lavoro è completato quando sono stati identificati la causa e un fix supportato o un’opzione di tuning.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Description of the issue
After the CodeQL bundle moved from 2.26.3 to 2.26.4, Rust analysis of our workspace went from ~4 minutes to ~45–60 minutes per run, with no change on our side. The extra time is almost entirely in query evaluation — the type-inference / data-flow stage — not extraction.
Setup
- GitHub code scanning default setup (so the bundle version is whatever the action ships;
codeql-actionv4.37.9 bumped the default bundle to 2.26.4 on 2026-08-26). build-mode: none,ubuntu-latesthosted runner (2 vCPU,CODEQL_THREADS=2,CODEQL_RAM=6914).- Private Rust workspace: 15 crates, ~470k lines of Rust (roughly a third of that under
tests/), ~720 packages inCargo.lock, edition 2021. Standard async web-service stack — nothing exotic in the code. - The default query suite (36 queries).
What changed / what didn't
We compared the last run on 2.26.3 and the first run on 2.26.4:
- Same
github/codeql-actioncommit, same runner image. - Same commit of our code (identical merge base; no diff at all in
Cargo.toml/Cargo.lock). - ~150 consecutive runs on 2.26.3 over the preceding four weeks: all 2–4 min. 50+ consecutive runs on 2.26.4 since: all 41–59 min. No overlap.
Timings from the job logs
| Stage | 2.26.3 | 2.26.4 |
|---|---|---|
total duration (Extract) |
12.8 s | 59 s |
diagnostics/DataFlowConsistencyCounts |
2m01s (slowest query) | ~30 min |
diagnostics/TypeInferenceConsistencyCounts |
58 s | ~17 min |
diagnostics/SsaConsistencyCounts |
50 s | ~13 min |
summary/NodesWithTypeAtLengthLimit |
< 1 s | ~22 min |
diagnostics/UnresolvedMacroCalls |
— | 6m11s |
whole security/* data-flow batch (CWE-089/SqlInjection, CWE-312/CleartextLogging, CWE-319/UseOfHttp, CWE-327/BrokenCryptoAlgorithm, …) |
well under a minute each | ~30 min each (shared batch) |
So extraction got ~5× slower but is still small; evaluation of everything downstream of type inference got roughly 15–30× slower.
Suspected cause
Looking at the Rust changes between codeql-cli/v2.26.3 and codeql-cli/v2.26.4, the ones that touch the stage that regressed are:
52cbb679"Rust: EvaluatemayInvokeCallbackin type inference stage"e9bd6988"Rust: Assume callbacks will be invoked in library functions"- the rust-analyzer upgrade to 0.0.328 (
ce360c4f,5f76c946) and the derive-macro expansion restore (1d6ac57d).
The first two look like they widen the call graph feeding type inference, which is consistent with every data-flow query slowing down together. Happy to be corrected — that's inferred from the commit list, not from profiling.
One other difference we noticed in the extractor output on 2.26.4: a handful of new macro expansion failed for '$crate::count' warnings on the metrics crate's counter!-style macros that did not appear on 2.26.3. Possibly unrelated, mentioning it in case it points at the rust-analyzer upgrade.
What would help
- Is this a known regression in 2.26.4, and is there a tuning knob (e.g. an extractor option, or a way to cap the callback assumption) short of pinning the bundle?
- If profiling output from a run would help, tell me what to collect (
--evaluator-log/--tuple-countingetc.) and I'll attach it.
We can pin codeql-bundle-v2.26.3 via advanced setup in the meantime.
- Lingua principale
- CodeQL
- Stelle
- 10.1k
- Fork
- 2.1k
- Merge medio
- 2g 11h
- PR unite (30g)
- 129
Guida per i contributori
Apri 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 github/codeql
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
-
C#: cs/simplifiable-boolean-expression false positive on Nullable<bool> compared with a literal Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
-
false-positive
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
-
False positive Apertafalse-positive
Difficoltà 4/5 3-5 giorni Idoneità per principianti 15/100
Tutte le issue di github/codeql
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
EricSpencer00/Resilient#4824 · 1 commento ·
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
objectionary/jeo-maven-plugin#1758 ·
-
mlir
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
llvm/llvm-project#224908 · 1 commento ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
-
area-CodeGen-coreclr untriaged
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 92/100