On Wed, Jul 22, 2026 at 12:40 AM <[email protected]> wrote:
>
> With the various nits addressed or responded to, for the whole series:
>
> Reviewed-by: Lyude Paul <[email protected]>
>
> (I assume with you moving stuff into nvkm I might need to re-review
> later, but that's fine with me)
>

Thanks a lot! All your suggestions are fine by me so I'll incorporate
them, do the shifting around to prevent the errors on unsupported
metrics/cold reads from reaching userspace, and push a V2.

> On Wed, 2026-07-15 at 01:14 +0400, Mohamed Ahmed wrote:
> > On the GSP firmware, nouveau reports nothing about the GPU. The GSP
> > owns
> > the sensors, so the legacy nvkm therm/clk/volt hwmon paths never run,
> > and
> > monitoring tools have no data to read.
> >
> > GSP on later firmware does publish all of it through a stable
> > interface.
> > It maintains a shared-memory region called "RM User Shared Data"
> > (RUSD),
> > which the firmware fills with all the relevant sensor readings like
> > power,
> > temperatures, clocks, and many others. Consuming it needs only two
> > internal subdevice controls: INIT_USER_SHARED_DATA to register the
> > buffer,
> > and SET_DATA_POLL to tell the GSP which data groups to poll and how
> > often.
> >
> > This series makes nouveau a RUSD client and exposes the data through
> > two
> > main surfaces:
> >
> >   - hwmon, for the values that map onto standard channels: GPU and
> > memory
> >     temperature, GPU/board/VRAM power, power cap.
> >
> >   - sysfs, under /sys/class/drm/cardN/device/rusd/, for everything
> > hwmon
> >     has no channel type for: clocks, utilisation, pstate, throttle
> > reason,
> >     ECC counters, PCIe error counters, and everything exposed to
> > hwmon as
> >     well. One value per file according to sysfs convention.
> >
> > Polling is demand-driven. GSP polls a group only while a client is
> > reading
> > it, and a group idles off after 10s after the last read. Polling
> > costs
> > power, so nothing is polled unless someone is looking. A section that
> > has
> > not been polled yet, or that the board does not support, reads -
> > ENODATA.
> >
> > The sysfs interface is documented in
> > Documentation/ABI/testing/sysfs-driver-nouveau.
> >
> > While the original scope was RUSD support only, monitoring tools
> > needed
> > two extra additions to complete the picture:
> >
> >   - VRAM size and usage on sysfs (patch 5): since this series adds a
> > sysfs
> >     interface for nouveau, it's better to expose VRAM metrics there
> > rather
> >     than force monitoring apps to pull in libdrm for the GETPARAM
> > memory
> >     ioctls.
> >
> >   - fdinfo (patch 6): nouveau implemented none at all, and monitoring
> > apps
> >     could not show per-process GPU and memory usage. It now reports
> >     per-client memory and per-engine busy time, accounted from the
> > DRM
> >     scheduler that the EXEC/VM_BIND path already uses.
> >
> > Limitations, caveats, and additional considerations or questions:
> >
> >   - RUSD needs r570 or newer GSP firmware; r535 does not have the
> > needed
> >     controls. Pre-GSP and r535 behavior is identical to what it was:
> > the
> >     rusd/ group is not created, and hwmon keeps its current behavior.
> >
> >   - This is all read-only telemetry. Clock, voltage, or power control
> > is
> >     through other interfaces out of scope of this series.
> >
> >   - The sysfs interface exposed here should be stable and valid for
> > nova
> >     as well. RUSD is stable and only grows more fields with newer GSP
> >     firmware (e.g., fan telemetry gets added in r580), so it is
> > possible
> >     to keep the same interface as we use newer firmware or as we move
> > to
> >     nova and any potential considerations should be ironed out before
> > this
> >     gets merged and the interface gets frozen.
> >
> >   - amdgpu offers a single binary blob with all the telemetry
> > embedded in
> >     addition to the sysfs sensor files. This series currently only
> > exposes
> >     sensor files, but it is possible to add a similar binary for a
> > v2.
> >     This mainly offers a more efficient way to read the telemetry as
> >     clients would read only a few files instead of reading all of
> > them.
> >
> >   - The last two patches don't depend on RUSD and work on every GPU.
> > But
> >     they are here because they complete the sensor telemetry story. I
> > am
> >     happy to split them into their own series if that is preferred.
> >
> > Userspace WIP work built on this sysfs surface exists in form of
> > nouveau
> > backends for nvtop, LACT, and a NVK HUD:
> >
> >   - nvtop: https://github.com/mohamexiety/nvtop/tree/nvtop-nouvtop
> >
> >   - LACT: https://github.com/mohamexiety/LACT/tree/lnouvct
> >
> >   - NVK HUD:
> >     https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/39898
> >
> > None of these are merged yet and exist for testing only. Upstreaming
> > will
> > begin when this series gets merged and the interface is stable.
> >
> > Mohamed Ahmed (6):
> >   drm/nouveau/gsp: vendor the RUSD header
> >   drm/nouveau/gsp: add RUSD telemetry support
> >   drm/nouveau: add GSP hwmon support
> >   drm/nouveau: expose RUSD telemetry via sysfs
> >   drm/nouveau: expose global VRAM size and usage via sysfs
> >   drm/nouveau: expose per-client GPU usage via fdinfo
> >
> >  .../ABI/testing/sysfs-driver-nouveau          | 167 ++++++
> >  MAINTAINERS                                   |   1 +
> >  drivers/gpu/drm/nouveau/Kbuild                |   1 +
> >  .../gpu/drm/nouveau/include/nvkm/subdev/gsp.h |  33 ++
> >  .../drm/nouveau/include/nvkm/subdev/rusd.h    | 114 ++++
> >  .../gpu/drm/nouveau/include/nvrm/nvtypes.h    |   3 +
> >  drivers/gpu/drm/nouveau/nouveau_abi16.c       |  16 +
> >  drivers/gpu/drm/nouveau/nouveau_chan.h        |   2 +
> >  drivers/gpu/drm/nouveau/nouveau_drm.c         |  22 +
> >  drivers/gpu/drm/nouveau/nouveau_drv.h         |  29 +
> >  drivers/gpu/drm/nouveau/nouveau_exec.c        |   3 +
> >  drivers/gpu/drm/nouveau/nouveau_gem.c         |  16 +
> >  drivers/gpu/drm/nouveau/nouveau_hwmon.c       | 375 ++++++++++---
> >  drivers/gpu/drm/nouveau/nouveau_sched.c       |  87 +++
> >  drivers/gpu/drm/nouveau/nouveau_sched.h       |  11 +
> >  drivers/gpu/drm/nouveau/nouveau_sysfs.c       | 311 ++++++++++
> >  drivers/gpu/drm/nouveau/nouveau_sysfs.h       |  10 +
> >  .../drm/nouveau/nvkm/subdev/gsp/rm/r535/gsp.c |  26 +
> >  .../drm/nouveau/nvkm/subdev/gsp/rm/r535/rm.c  |   1 +
> >  .../nouveau/nvkm/subdev/gsp/rm/r570/Kbuild    |   1 +
> >  .../nvkm/subdev/gsp/rm/r570/nvrm/rusd.h       | 303 ++++++++++
> >  .../drm/nouveau/nvkm/subdev/gsp/rm/r570/rm.c  |   1 +
> >  .../nouveau/nvkm/subdev/gsp/rm/r570/rusd.c    | 531
> > ++++++++++++++++++
> >  .../gpu/drm/nouveau/nvkm/subdev/gsp/rm/rm.h   |   7 +
> >  24 files changed, 1990 insertions(+), 81 deletions(-)
> >  create mode 100644 Documentation/ABI/testing/sysfs-driver-nouveau
> >  create mode 100644
> > drivers/gpu/drm/nouveau/include/nvkm/subdev/rusd.h
> >  create mode 100644 drivers/gpu/drm/nouveau/nouveau_sysfs.c
> >  create mode 100644 drivers/gpu/drm/nouveau/nouveau_sysfs.h
> >  create mode 100644
> > drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/nvrm/rusd.h
> >  create mode 100644
> > drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/rusd.c
>

Reply via email to