Skip to content

Improve the forcing/promotion functions in DepKindVTable#153122

Merged
rust-bors[bot] merged 4 commits intorust-lang:mainfrom
Zalathar:dep-kind-vtable
Mar 1, 2026
Merged

Improve the forcing/promotion functions in DepKindVTable#153122
rust-bors[bot] merged 4 commits intorust-lang:mainfrom
Zalathar:dep-kind-vtable

Conversation

@Zalathar
Copy link
Member

@Zalathar Zalathar commented Feb 26, 2026

This is a bundle of changes to the two function pointers in DepKindVTable that are responsible for forcing dep nodes, or promoting disk-cached values from the previous session into memory.

The perf improvements to incr-unchanged and incr-patched are likely from skipping more of the “promotion” plumbing for queries that never cache to disk.

@rustbot rustbot added A-query-system Area: The rustc query system (https://rustc-dev-guide.rust-lang.org/query.html) S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Feb 26, 2026
@Zalathar
Copy link
Member Author

This is not fully-baked yet, but I want to run PR CI and perf to check for unanticipated problems.

@bors try @rust-timer queue

@rust-timer

This comment has been minimized.

@rust-bors

This comment has been minimized.

rust-bors bot pushed a commit that referenced this pull request Feb 26, 2026
Improve the forcing/promotion functions in `DepKindVTable`
@rustbot rustbot added the S-waiting-on-perf Status: Waiting on a perf run to be completed. label Feb 26, 2026
@rust-log-analyzer

This comment has been minimized.

@rust-bors
Copy link
Contributor

rust-bors bot commented Feb 26, 2026

☀️ Try build successful (CI)
Build commit: dff6afa (dff6afa28aa02dfe76c0d36c5fc140333bf99233, parent: 1ed488274bec5bf5cfe6bf7a1cc089abcc4ebd68)

@rust-timer

This comment has been minimized.

@rust-timer
Copy link
Collaborator

Finished benchmarking commit (dff6afa): comparison URL.

Overall result: ✅ improvements - no action needed

Benchmarking this pull request means it may be perf-sensitive – we'll automatically label it not fit for rolling up. You can override this, but we strongly advise not to, due to possible changes in compiler perf.

@bors rollup=never
@rustbot label: -S-waiting-on-perf -perf-regression

Instruction count

Our most reliable metric. Used to determine the overall result above. However, even this metric can be noisy.

mean range count
Regressions ❌
(primary)
- - 0
Regressions ❌
(secondary)
- - 0
Improvements ✅
(primary)
-0.8% [-1.7%, -0.2%] 102
Improvements ✅
(secondary)
-1.2% [-6.5%, -0.2%] 68
All ❌✅ (primary) -0.8% [-1.7%, -0.2%] 102

Max RSS (memory usage)

Results (primary -3.7%, secondary 4.3%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

mean range count
Regressions ❌
(primary)
- - 0
Regressions ❌
(secondary)
8.2% [8.1%, 8.2%] 2
Improvements ✅
(primary)
-3.7% [-3.7%, -3.7%] 1
Improvements ✅
(secondary)
-3.4% [-3.4%, -3.4%] 1
All ❌✅ (primary) -3.7% [-3.7%, -3.7%] 1

Cycles

Results (primary -3.1%, secondary -8.1%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

mean range count
Regressions ❌
(primary)
- - 0
Regressions ❌
(secondary)
- - 0
Improvements ✅
(primary)
-3.1% [-3.2%, -3.1%] 2
Improvements ✅
(secondary)
-8.1% [-18.7%, -2.7%] 7
All ❌✅ (primary) -3.1% [-3.2%, -3.1%] 2

Binary size

This benchmark run did not return any relevant results for this metric.

Bootstrap: 492.161s -> 478.802s (-2.71%)
Artifact size: 395.78 MiB -> 397.55 MiB (0.45%)

@rustbot rustbot removed the S-waiting-on-perf Status: Waiting on a perf run to be completed. label Feb 26, 2026
@Zalathar Zalathar force-pushed the dep-kind-vtable branch 3 times, most recently from 2aba5f0 to 3b6451e Compare February 26, 2026 22:56
@Zalathar
Copy link
Member Author

r? nnethercote (or compiler)

@Zalathar Zalathar marked this pull request as ready for review February 27, 2026 01:17
@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Feb 27, 2026
@nnethercote
Copy link
Contributor

Fantastic perf results!

I would like to eliminate GetQueryVTable if possible. I think it might be possible if each normal query's DepKindVTable had a pointer to its QueryVTable. But not in this PR.

@bors r+

@rust-bors
Copy link
Contributor

rust-bors bot commented Feb 27, 2026

📌 Commit 3b6451e has been approved by nnethercote

It is now in the queue for this repository.

@rust-bors rust-bors bot added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Feb 27, 2026
@Zalathar
Copy link
Member Author

I would like to eliminate GetQueryVTable if possible. I think it might be possible if each normal query's DepKindVTable had a pointer to its QueryVTable. But not in this PR.

Right now, GetQueryVTable is what allows DepKindVTable to not know about query key/value/cache types at all, because that knowledge is baked into the different generic instantiations of its function pointers instead.

So I currently don't see a way to usefully put a query-vtable pointer into DepKindVTable.

/// True if a key can _potentially_ be recovered from a key fingerprint
/// with this style.
///
/// For some key types, recovery is possible but not guaranteed.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This seems a bit misleading. Do we have any types where recovery will fail?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, it's possible for DefId to fail recovery, for example.

I verified this by adding a panic to the failure path of one of the try_recover_key calls, and then running x test incremental.

@rust-bors rust-bors bot added the S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. label Mar 1, 2026
@rust-bors

This comment has been minimized.

@rust-bors rust-bors bot removed the S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. label Mar 1, 2026
Zalathar added 4 commits March 1, 2026 19:41
- `force_from_dep_node` → `force_from_dep_node_fn`
- `try_load_from_disk_cache` → `promote_from_disk_fn`

This commit also inlines the wrapper function around `promote_from_disk_fn`.
@rustbot
Copy link
Collaborator

rustbot commented Mar 1, 2026

This PR was rebased onto a different main commit. Here's a range-diff highlighting what actually changed.

Rebasing is a normal part of keeping PRs up to date, so no action is needed—this note is just to help reviewers.

@Zalathar
Copy link
Member Author

Zalathar commented Mar 1, 2026

Rebased to fix trivial conflict.

@bors r=nnethercote

@rust-bors
Copy link
Contributor

rust-bors bot commented Mar 1, 2026

📌 Commit 08df254 has been approved by nnethercote

It is now in the queue for this repository.

@rust-bors rust-bors bot added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Mar 1, 2026
@rust-bors

This comment has been minimized.

@rust-bors rust-bors bot added merged-by-bors This PR was explicitly merged by bors. and removed S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. labels Mar 1, 2026
@rust-bors
Copy link
Contributor

rust-bors bot commented Mar 1, 2026

☀️ Test successful - CI
Approved by: nnethercote
Duration: 3h 15m 52s
Pushing 28b5c1c to main...

@rust-bors rust-bors bot merged commit 28b5c1c into rust-lang:main Mar 1, 2026
12 checks passed
@rustbot rustbot added this to the 1.96.0 milestone Mar 1, 2026
@github-actions
Copy link
Contributor

github-actions bot commented Mar 1, 2026

What is this? This is an experimental post-merge analysis report that shows differences in test outcomes between the merged PR and its parent PR.

Comparing 024757f (parent) -> 28b5c1c (this PR)

Test differences

Show 4 test diffs

4 doctest diffs were found. These are ignored, as they are noisy.

Test dashboard

Run

cargo run --manifest-path src/ci/citool/Cargo.toml -- \
    test-dashboard 28b5c1cc084d3d21168f034b39c23193a9a7f127 --output-dir test-dashboard

And then open test-dashboard/index.html in your browser to see an overview of all executed tests.

Job duration changes

  1. x86_64-rust-for-linux: 42m 15s -> 53m 34s (+26.8%)
  2. dist-i586-gnu-i586-i686-musl: 1h 22m -> 1h 35m (+16.2%)
  3. pr-check-1: 29m 8s -> 33m 43s (+15.8%)
  4. aarch64-gnu-llvm-20-1: 53m 42s -> 1h 2m (+15.4%)
  5. dist-aarch64-llvm-mingw: 1h 28m -> 1h 41m (+15.2%)
  6. i686-gnu-1: 2h 1m -> 2h 16m (+13.0%)
  7. dist-aarch64-apple: 2h 1m -> 1h 46m (-12.3%)
  8. test-various: 1h 51m -> 2h 5m (+12.2%)
  9. x86_64-gnu-llvm-21-3: 1h 44m -> 1h 56m (+12.1%)
  10. i686-gnu-2: 1h 29m -> 1h 40m (+12.0%)
How to interpret the job duration changes?

Job durations can vary a lot, based on the actual runner instance
that executed the job, system noise, invalidated caches, etc. The table above is provided
mostly for t-infra members, for simpler debugging of potential CI slow-downs.

@rust-timer
Copy link
Collaborator

Finished benchmarking commit (28b5c1c): comparison URL.

Overall result: ✅ improvements - no action needed

@rustbot label: -perf-regression

Instruction count

Our most reliable metric. Used to determine the overall result above. However, even this metric can be noisy.

mean range count
Regressions ❌
(primary)
- - 0
Regressions ❌
(secondary)
1.9% [1.9%, 1.9%] 1
Improvements ✅
(primary)
-0.8% [-1.7%, -0.3%] 102
Improvements ✅
(secondary)
-1.2% [-6.5%, -0.2%] 68
All ❌✅ (primary) -0.8% [-1.7%, -0.3%] 102

Max RSS (memory usage)

Results (secondary -2.7%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

mean range count
Regressions ❌
(primary)
- - 0
Regressions ❌
(secondary)
- - 0
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
-2.7% [-2.7%, -2.7%] 1
All ❌✅ (primary) - - 0

Cycles

Results (primary -3.0%, secondary -6.3%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

mean range count
Regressions ❌
(primary)
- - 0
Regressions ❌
(secondary)
- - 0
Improvements ✅
(primary)
-3.0% [-3.0%, -2.9%] 2
Improvements ✅
(secondary)
-6.3% [-15.9%, -2.9%] 11
All ❌✅ (primary) -3.0% [-3.0%, -2.9%] 2

Binary size

This benchmark run did not return any relevant results for this metric.

Bootstrap: 477.708s -> 479.821s (0.44%)
Artifact size: 397.23 MiB -> 397.02 MiB (-0.05%)

@Zalathar Zalathar deleted the dep-kind-vtable branch March 1, 2026 22:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-query-system Area: The rustc query system (https://rustc-dev-guide.rust-lang.org/query.html) merged-by-bors This PR was explicitly merged by bors. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants