Skip to content

docs(rdc): split the RDC 1.3.1 and 1.4.0 changelog sections - #13874

Merged
marifamd merged 3 commits into
developfrom
users/adam360x/rdc-changelog-10.2
Oct 27, 2026
Merged

marifamd merged 3 commits into
developfrom
users/adam360x/rdc-changelog-10.2

Conversation

@adam360x

@adam360x adam360x commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

Motivation

A release notes review found that the RDC changelog on develop mixes RDC 1.4.0 entries, which ship in ROCm 10.2.0, with entries that already shipped in ROCm 10.1.0 as RDC 1.3.1. #11722 opened the 1.4.0 section as "for ROCm 10.1.0" after ROCm 10.1 had branched, so later RDC entries landed under the wrong release.

Technical Details

Evidence:

Issue Tracking

No JIRA ticket. Reported in a release notes review.

Test Plan

Changelog-only change. A script moved the #10973 entries byte for byte and checked that the only added or removed non-blank lines are section headings. A second script replaced the #11634 entry by exact match and checked that it stays in the 1.4.0 section.

Test Result

projects/rdc/CHANGELOG.md only, +12/-8. pre-commit passes (it skips Markdown). Trial merges with develop and with the other open PR that edits this changelog are clean.

RDC 1.4.0 ships in ROCm 10.2.0, not ROCm 10.1.0. ROCm 10.1.0 shipped RDC
1.3.1, which already contains the GetBlockNameStr() removal and the ECC
totals fix (#10973). Move those two entries to a new "RDC 1.3.1 for ROCm
10.1.0" section and retitle the 1.4.0 section for ROCm 10.2.0.

The RDC_FI_GPU_MEMORY_CUR_BANDWIDTH fix (#11634) stays under 1.4.0. It
merged after the ROCm 10.1 branch point, so ROCm 10.1.0 does not contain it.

Signed-off-by: Adam360x <Adam.pryor@amd.com>
@therock-pr-bot

Copy link
Copy Markdown

✅ All Policy Checks Passed

Check Status Details
📝 PR Description ✅ Pass —
⛔ Forbidden Files ✅ Pass —
🧪 Unit Test ✅ Pass PR does not contain code files — Unit Test auto-passed
🚫 Draft PR 🔜 To Be Enabled —
🚩 Feature Flag 🔜 To Be Enabled —
📊 Code Coverage 🔜 To Be Enabled —

🎉 All policy checks passed!

📖 Need help? See the Policy FAQ for details on every check and how to fix failures.

🙋 Wish to Override Policy?

@adam360x
adam360x marked this pull request as ready for review October 21, 2026 01:26
@adam360x
adam360x requested review from a team as code owners October 21, 2026 01:26
Copilot AI balanced review requested due to automatic review settings October 21, 2026 01:26

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟢 Approval recommended

The documentation-only diff matches the intended release split and has no identified blocking issues.

No open issues 🎉

What changed in this PR

Corrects RDC’s changelog release assignments without changing entry text or runtime behavior.

Changes:

  • Labels RDC 1.4.0 for ROCm 10.2.0.
  • Moves the helper removal and ECC hang fix into RDC 1.3.1 for ROCm 10.1.0.
  • Keeps the memory-bandwidth fix under RDC 1.4.0.
File Description
projects/​rdc/​CHANGELOG.md Separates release sections and preserves existing entry text.

Review effort: Balanced

Comment thread projects/rdc/CHANGELOG.md Resolved
The ROCm 10.1.0 release notes already list the RDC_FI_GPU_MEMORY_CUR_BANDWIDTH
fix, but ROCm 10.1.0 does not include it. Instead of repeating that entry in
full, say that the fix is now included and that ROCm 10.1.0 does not include it.

Signed-off-by: Adam360x <Adam.pryor@amd.com>
Keep only the line saying that the RDC_FI_GPU_MEMORY_CUR_BANDWIDTH fix is now
included, as the release notes review asked.

Signed-off-by: Adam360x <Adam.pryor@amd.com>
@marifamd
marifamd merged commit 72111c7 into develop Oct 27, 2026
30 of 32 checks passed
@marifamd
marifamd deleted the users/adam360x/rdc-changelog-10.2 branch October 27, 2026 17:53
@systems-assistant

Copy link
Copy Markdown
Contributor

TheRock Submodule Bump Activity

Newest first

adam360x added a commit that referenced this pull request Nov 3, 2026
## Motivation

QA reported that `rdcd` aborts during `rdci diag -u -r 2 -g 1` on AMD
Instinct MI455X (gfx1250) with ROCm build #265:

```
F0921 ... queue_controller.cpp:147] Could not find agent - 129205111608944
```

The checks of the ROCr diagnostic module (`librdc_rocr.so`: Compute
Queue ready, System memory check) build test objects that call
`hsa_init()` and `hsa_shut_down()` themselves. Nothing else held a
reference, so ROCr was unloaded and loaded again between them.

`rdcd` always loads rocprofiler-sdk (the profiler module registers a
tool at the first `hsa_init()`, even with `RDC_DISABLE_ROCP=1`), and
rocprofiler-sdk does not support a ROCr reload. Depending on its
version, the next queue creation aborts `rdcd` (`Could not find agent`)
or fails, or the next profiler field read aborts it (`HSA Queue is not
initialized`).

ROCm 10.2.0 and develop are affected too, and not only on MI455X: with a
10.2.0 nightly on MI350X the checks pass, but the next profiler field
read aborts `rdcd`.

Keeping ROCr loaded exposed a second rocprofiler-sdk problem: it never
destroys a queue it intercepted. With a queue per check, each `rdci
diag` run left two queues and about 70 MB of VRAM in `rdcd`, until queue
creation failed after 126 runs (MI455X allows 254 queues per process).
So the checks now share one queue per GPU.

## Technical Details

- **ROCr lifetime** (`RdcDiagnosticLib.cc`): the module takes one
`hsa_init()` reference at its first check and releases it in
`rdc_diag_destroy()`; the test objects' calls only move the count. If
that `hsa_init()` fails, the run fails (`ROCr initialization failed`)
before any check is built, and the next run retries.
- **Shared queue**: `AcquireDiagQueue()` creates one 128-packet queue
per GPU, destroyed by `rdc_diag_destroy()` (the System memory check used
to create a 131072-packet queue per run). A mutex runs one check at a
time, since they share the queues (and `MemoryAccess.cc` a global
kernel-argument pointer). The unused `CreateQueue()` helper is removed.
- **Cleanup** (`ComputeQueueTest.cc`, `MemoryAccess.cc`,
`base_rocr_utils.cc`, `RdcRocrBase.*`): both checks release their
signals, memory, file descriptors and loaded code objects on every path,
including Skip and failure (`ScopeExit` guard in `common.h`). A copy
that fails after it started no longer leaks its signal.
- **gfx1250 kernels**: without them both checks reported Skip on MI455X.
They are code object v4 (ROCm 10.1 compiler: `clang -x cl -Xclang
-finclude-default-header -target amdgcn-amd-amdhsa -mcpu=gfx1250
-mcode-object-version=4 -O3`), because the checks fill in the v4 kernel
arguments; the default v6 fails the System memory check.
- **Tests**: new GPU-less `rdc_rocr_lifetime_tests` runs the module
against fake HSA calls that count loads, references and objects: ROCr is
loaded once, one queue per GPU, a failed `hsa_init()` loads nothing and
is retried, and no check leaves objects behind. It is built with the
module, installed with the RDC test package, and run in RDC CI by
`tests/ci/test_gtest_runner.py`. `rdc_diag_kernel_tests` requires v4
gfx1250 kernels.
- `CHANGELOG.md` entries. No public API, proto or struct changes (the
changed headers are not installed).

Trade-off: after the first `rdci diag`, `rdcd` keeps ROCr and one queue
per GPU until it stops (MI455X: 3 KFD queues and about 149 MB of VRAM,
flat across runs after the first), as it already does after the first
profiler read. Changing the GPU partition mode then needs `rdcd`
stopped, and a second `rdci diag` waits for the first.

#13570 and #13874 also edit `CHANGELOG.md`; trial merges show the three
PRs merge cleanly in any order.

Not in this PR:
- rocprofiler-sdk: support a ROCr reload and destroy the queues it
intercepts (ROCM-33402). A process that creates and destroys a queue in
a loop aborts after about 250 iterations under `rocprofv3 --pmc`.
- Kernel arguments: the shipped gfx950 kernels (code object v6) and the
gfx940-gfx942 binary search kernel (v5) declare 280-288 bytes of kernel
arguments, while the checks fill in the 80-byte v4 layout. Release
builds pass both checks on MI350X with them, but an assertion-enabled
build aborts `rdcd` on the Compute Queue check's existing
kernel-argument size assertion. v4 rebuilds match and pass on MI350X.

## Issue Tracking

JIRA ID: ROCM-31379

## Test Plan

- 1x MI455X (gfx1250), Ubuntu 26.04: QA's build #265, ROCm 10.2.0, and a
10.2.0 BKC build of 2026-10-13. Each experiment runs its own `rdcd -u`
in a private network namespace: N `rdci diag -u -r 2 -g 1` runs, a
profiler `rdci dmon` (fields 805/806), one more diag; also profiler
first. KFD queues and VRAM from `/sys/class/kfd/kfd/proc/<pid>/`. The
module is built from this branch against each ROCm.
- 8x MI350X (gfx950), Ubuntu 24.04, 10.2.0 nightly of 2026-10-22: on GPU
0, the stock module and this PR's module (release and assertion-enabled
builds, shipped gfx950 kernels and v4 rebuilds); on a group of all 8
GPUs, this PR's release build with the shipped kernels, in both orders.
- `rdc_rocr_lifetime_tests` and `rdc_diag_kernel_tests` (GCC 11) on this
branch, against develop's module, and with each part of the fix removed;
the CI wrapper; `pre-commit`.

## Test Result

| MI455X | `rdci diag` runs | KFD queues / VRAM, run 1 → last | profiler
after | `rdcd` exit |
|---|---|---|---|---|
| #265 stock | aborts in run 1 (`Could not find agent`) | - | - | 134 |
| 10.2.0 stock | run 1 Skip (no gfx1250 kernels), run 2 fails queue
creation | - | aborts | 134 |
| BKC 10-13 stock | aborts in run 1 | - | - | 134 |
| 10.2.0, ROCr kept loaded, a queue per check | 126 Pass, then Fail | 4
→ 254 / 0.39 → 9.3 GB | aborts | 134 |
| 10.2.0, this PR | 141/141 Pass | 3 → 3 / 149 → 149 MB | works | 0 |
| #265, this PR | 21/21 Pass | 3 → 3 / 149 → 149 MB | works | 0 |
| BKC 10-13, this PR | 21/21 Pass | 3 → 3 / 287 → 149 MB | works | 0 |

- Pass = both checks Pass. Profiler read first: 3/3 on #265 and on the
BKC build. Stock builds run clean with `HSA_TOOLS_DISABLE_REGISTER=1`
(rocprofiler-sdk not registered with ROCr). On the BKC build `rdci`
itself exits with SIGSEGV after printing (the client exit crash fixed on
develop by #13296), which does not affect `rdcd`.
- 8x MI350X: stock passes 3/3 diags on GPU 0, then the profiler read
aborts `rdcd` (`HSA Queue is not initialized`, exit 134). This PR
(release build, shipped kernels): 4/4 on GPU 0 and 11/11 on all 8 GPUs,
every GPU passing both checks, including a run after the profiler read;
3/3 on all 8 GPUs with the profiler read first. KFD queues stay flat
across runs (24 with all 8 GPUs) and `rdcd` exits 0.
- gfx1250 kernels: v4 passes both checks; v6 fails the System memory
check in a release build.
- `rdc_rocr_lifetime_tests` 5/5 pass and 4 of 5 fail against develop's
module; each of 14 mutants of the fix, and reverting either review fix,
makes a test fail. The mutex is not unit-tested.
`rdc_diag_kernel_tests`, the CI wrapper and pre-commit pass.

## Submission Checklist

- [x] Look over the contributing guidelines at
https://github.com/ROCm/rocm-systems/blob/develop/CONTRIBUTING.md.

---------

Signed-off-by: Adam360x <Adam.pryor@amd.com>
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.

4 participants