RE: [PATCH] drm/amd/pm: Fix incorrect avg vcn utilization in gpu_metrics

"Wang, Yang(Kevin)" <[email protected]>
Newsgroups org.freedesktop.lists.amd-gfx,org.freedesktop.lists.dri-devel,org.kernel.vger.linux-kernel
Message-ID <BN9PR12MB5211679FCDBB9B1BC8ABA54A82DA2@BN9PR12MB5211.namprd12.prod.outlook.com>
AMD General

> -----Original Message-----
> From: Alex Deucher <[email protected]>
> Sent: Friday, August 14, 2026 8:51 AM
> To: Boqun Feng <[email protected]>
> Cc: [email protected]; Mark Janes <[email protected]>; Feng,
> Kenneth <[email protected]>; Deucher, Alexander
> <[email protected]>; Koenig, Christian
> <[email protected]>; David Airlie <[email protected]>; Simona
> Vetter <[email protected]>; Lazar, Lijo <[email protected]>; Kamal, Asad
> <[email protected]>; Wang, Yang(Kevin) <[email protected]>;
> Hosur, Priya <[email protected]>; M, Mythila <[email protected]>;
> Limonciello, Mario <[email protected]>; dri-
> [email protected]; [email protected]; Umio Yasuno
> <[email protected]>
> Subject: Re: [PATCH] drm/amd/pm: Fix incorrect avg vcn utilization in
> gpu_metrics
>
> On Thu, Aug 13, 2026 at 6:25 PM Boqun Feng <[email protected]> wrote:
> >
> > On Thu, Aug 13, 2026 at 06:01:47PM -0400, Alex Deucher wrote:
> > > On Thu, Aug 13, 2026 at 5:36 PM Boqun Feng <[email protected]> wrote:
> > > >
> > > > On Wed, Aug 05, 2026 at 07:02:21AM -0700, Boqun Feng wrote:
> > > > > In a Strix Halo system, a >100 average_vcn_activity in
> > > > > gpu_metrics can be observed by running the following command:
> > > > >
> > > > >     ffmpeg -hwaccel vappi -vappi_device /dev/dri/renderD128 -i \
> > > > >     ~/sample-10s.mp4 -vf hwupload,scale_vappi=format=nv12 -c:v \
> > > > >     h264_vappi /tmp/output.mp4
> > > > >
> > > > > This is incorrect because the value is supposed to be in [0-100] range.
> > > > >
> > > > > The cause of the issue is that the metrics.VcnActivity reported
> > > > > by
> > > > > smu_cmn_get_metrics_table() is a permyriad value instead of a
> > > > > percentage value (e.g. smu_v14_0_0_get_smu_metrics_data() has a
> > > > > division by 100 to report the vcn_busy_percent). Therefore fix
> > > > > this by applying the same division in smu_v14_0_0_get_gpu_metrics().
> > >
> > > I think this is correct as is.  smu_v14_0_0_get_smu_metrics_data()
> > > is used to fetch data for standardized formats like hwmon while
> > > smu_v14_0_0_get_gpu_metrics() is for dumping the raw metrics data.
> > >
> >
> > Well, then kgd_pp_interface.h needs some help?
> >
> > struct gpu_metrics_v3_0 {
> >         ...
> >         /* Utilization */
> >         /* time filtered GFX busy % [0-100] */
> >         uint16_t                        average_gfx_activity;
> >         /* time filtered VCN busy % [0-100] */
> >         uint16_t                        average_vcn_activity;
> >         ...
> > }
> >
> > Clearly it's not true.
>
> That was likely copy and pasted from the firmware interface
> (smu14_driver_if_v14_0_0.h):
> uint16_t VcnActivity;                //Time filtered VCN busy % [0-100]
>
> Other generations seem to do the same thing (raw data in metrics table
> and % in the hwmon type interfaces). E.g., smu_v13_0_4_ppt.c:
> smu_v13_0_4_get_gpu_metrics()
> gpu_metrics->average_mm_activity = metrics.UvdActivity; vs
> smu_v13_0_4_get_smu_metrics_data():
> *value = metrics->UvdActivity / 100;

For SMU 14.0.0, the VCN activity value returned from PMFW ranges from 0 to 10000, and the driver shall divide this value by 100 before reporting it.
This scaling does **not** apply to GFX activity.

Best Regards,
Kevin
>
> Alex
>
> >
> > [Cc amdgpu_top]
> >
> > Regards,
> > Boqun
> >
> > > Alex
> > >
> > > > >
> > > > > Reported-by: Mark Janes <[email protected]>
> > > > > Signed-off-by: Boqun Feng <[email protected]>
> > > >
> > > > Ping?
> > > >
> > > > Regards,
> > > > Boqun
> > > >
> > > > > ---
> > > > >  drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_0_ppt.c | 3 ++-
> > > > >  1 file changed, 2 insertions(+), 1 deletion(-)
> > > > >
> > > > > diff --git
> > > > > a/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_0_ppt.c
> > > > > b/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_0_ppt.c
> > > > > index 568665265a13..1058338344b0 100644
> > > > > --- a/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_0_ppt.c
> > > > > +++ b/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_0_ppt.c
> > > > > @@ -566,7 +566,8 @@ static ssize_t
> smu_v14_0_0_get_gpu_metrics(struct smu_context *smu,
> > > > >       gpu_metrics->temperature_skin = metrics.SkinTemp;
> > > > >
> > > > >       gpu_metrics->average_gfx_activity = metrics.GfxActivity;
> > > > > -     gpu_metrics->average_vcn_activity = metrics.VcnActivity;
> > > > > +     /* metrics.VcnActivity is permyriad, convert it to percentage. */
> > > > > +     gpu_metrics->average_vcn_activity = metrics.VcnActivity /
> > > > > + 100;
> > > > >       memcpy(&gpu_metrics->average_ipu_activity[0],
> > > > >               &metrics.IpuBusy[0],
> > > > >               sizeof(uint16_t) * 8);
> > > > > --
> > > > > 2.50.1 (Apple Git-155)
> > > > >
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.