Skip to content

[release/11.0] [GC] Preserve workstation GC diagnostic data in heap dumps - #133054

Open
github-actions[bot] wants to merge 1 commit into
release/11.0from
backport/pr-132973-to-release/11.0
Open

[release/11.0] [GC] Preserve workstation GC diagnostic data in heap dumps#133054
github-actions[bot] wants to merge 1 commit into
release/11.0from
backport/pr-132973-to-release/11.0

Conversation

@github-actions

@github-actions github-actions Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

Backport of #132973 to release/11.0

/cc @max-charlamb

Customer Impact

  • Customer reported
  • Found internally

[Select one or both of the boxes. Describe how this issue impacts customers, citing the expected and actual behaviors and scope of the issue. If customer-reported, provide the issue number.]

Regression

  • Yes
  • No

[If yes, specify when the regression was introduced. Provide the PR or commit if known.]

Testing

[How was the fix verified? How was the issue missed previously? What tests were added?]

Risk

[High/Medium/Low. Justify the indication by mentioning how risks were measured and addressed.]

IMPORTANT: If this backport is for a servicing release, please verify that:

  • For .NET 8 and .NET 9: The PR target branch is release/X.0-staging, not release/X.0.
  • For .NET 10+: The PR target branch is release/X.0 (no -staging suffix).

Package authoring no longer needed in .NET 9

IMPORTANT: Starting with .NET 9, you no longer need to edit a NuGet package's csproj to enable building and bump the version.
Keep in mind that we still need package authoring in .NET 8 and older versions.

## Summary
- Append the workstation `card_table` pointer to `GcDacVars` at GC
interface minor version 9.
- Use the versioned GC-DAC variable when returning workstation heap
details, retaining the VM-global fallback when the field is unavailable.
- Explicitly enumerate the workstation card-table pointer storage.
- Preserve the complete workstation `interesting_data_per_heap`,
`compact_reasons_per_heap`, `expand_mechanisms_per_heap`, and
`interesting_mechanism_bits_per_heap` arrays.

Before this change, CDB `/mw` heap dumps did not preserve the
workstation card-table pointer storage and preserved only the first
element of each GC diagnostics array. After the card-table read was
fixed, legacy DAC `!dumpgcdata` could load the dump and print global GC
mechanisms, but failed when requesting per-heap interesting information:

```text
[info per heap]
Error requesting interesting GC info
```

cDAC's GC contract also eagerly reads these complete arrays while
constructing `GCHeapData`, so it encountered the same missing-memory
problem. Explicitly preserving the card-table pointer and complete
diagnostic-array ranges makes this data available to both the legacy DAC
API used by `!dumpgcdata` and the cDAC GC heap reader.

## Testing
- `./build.cmd clr -rc checked`
- `./build.cmd clr+libs -rc release`
- `./build.cmd clr+libs+host -rc release`
- `src/tests/build.cmd -GenerateLayoutOnly x64 Release`
- Generated a CDB `/mw` dump from a workstation GC process after GC
initialization.
- Verified the pre-change dump reports `Error requesting interesting GC
info` from `!dumpgcdata`.
- Verified the post-change dump prints all 9 interesting-data points, 11
compacting reasons, 6 expansion mechanisms, and 2 mechanism bits through
legacy DAC `!dumpgcdata`.

> [!NOTE]
> This pull request description was generated with GitHub Copilot.

---------

Co-authored-by: Max Charlamb <maxcharlamb@microsoft.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Copilot-Session: c3074ed7-2a88-4fa7-92fd-5b96a9ff20c6
@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 3 pipeline(s).
13 pipeline(s) were filtered out due to trigger conditions.
There may be pipelines that require an authorized user to comment /azp run to run.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @anicka-net, @dotnet/gc
See info in area-owners.md if you want to be subscribed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant