Skip to content

Improve the forcing/promotion functions in DepKindVTable#153122

Open
Zalathar wants to merge 4 commits intorust-lang:mainfrom
Zalathar:dep-kind-vtable
Open

Improve the forcing/promotion functions in DepKindVTable#153122
Zalathar wants to merge 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
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) S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. 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