Skip to content

[Issue]: GL2C EA size-split counters (GL2C_EA_RDREQ_32B/64B/128B, WRREQ_64B) always read zero on gfx1201 while base GL2C counters work #158

Description

@The-Monk

Summary

On gfx1201 (RDNA4, Radeon AI PRO R9700), the GL2C EA request-size-split counters — GL2C_EA_RDREQ_32B, GL2C_EA_RDREQ_64B, GL2C_EA_RDREQ_128B, GL2C_EA_WRREQ_64B — always collect zero, while the base GL2C counters (GL2C_HIT, GL2C_MISS, GL2C_EA_RDREQ, GL2C_EA_WRREQ) and SQ_WAVES collect healthy values in the same run. All documented preconditions are satisfied, so this looks like the size-split variants are unimplemented or mis-plumbed for gfx12 rather than an environment problem.

Environment

  • GPU: AMD Radeon AI PRO R9700 (gfx1201), VBIOS 113-APM107573-101
  • rocprofv3 / rocprofiler-sdk: 1.3.2 (git 2b22ab0195cc1461cd9abf3b969e9dd7c10af350), ROCm 7.14
  • Kernel 7.0.0-28-generic, amdgpu DKMS 6.19.4
  • power_dpm_force_performance_level = profile_standard on the measured GPU (verified — the AUTO/perfmon-clock trap is handled)
  • amdgpu.ppfeaturemask=0xffffffff (default was 0xfff7bfff; explicitly tested both — no effect on this symptom)

Reproduction

echo profile_standard | sudo tee /sys/class/drm/card1/device/power_dpm_force_performance_level
rocprofv3 --pmc "SQ_WAVES GL2C_HIT GL2C_MISS GL2C_EA_RDREQ GL2C_EA_WRREQ" \
          --pmc "GL2C_EA_RDREQ_32B GL2C_EA_RDREQ_64B GL2C_EA_RDREQ_128B GL2C_EA_WRREQ_64B" \
          --output-format csv -d out -o run -- <any GPU workload; we used llama-bench>

All four counters in the second group are listed by --list-avail and accepted without error; every dispatch row reports 0 for them. Same-run first-group totals (LLM decode workload, for scale): GL2C_HIT 61.2M, GL2C_MISS 18.9M, GL2C_EA_RDREQ healthy and consistent with hit/miss, SQ_WAVES 2.77M.

Secondary observation (same setup)

Base GL2C counter absolute values appear to under-report by a roughly constant ~4x versus hardware-timestamp-derived bandwidth on the same kernels (ratios are self-consistent; absolute magnitudes are not). If GL2C is instanced on gfx1201 and only a subset of instances is sampled, that would explain both the ~4x and possibly the size-split zeros — mentioning in case it localizes the bug.

Questions

  1. Are the GL2C_EA_*_<size> derived counters expected to work on gfx12, or are they gfx9-only definitions that happen to be listed?
  2. If unimplemented: is there any counter route on RDNA4 for DRAM request-size distribution?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions