Apologies, I forgot to set the CC. Below is my opinion that I wrote outside the thread.
--- amdgpu_top already divides average_vcn_activity in gpu_metrics_v3_0 by 100, so this patch would unfortunately end up affecting user-space applications. In my view, if users want to obtain media engine usage that is properly corrected based on the firmware (or firmware version) in the AMDGPU driver, the best option is to use the vcn_busy_percent sysfs interface. However, that adds extra reading cost. Alternatively, since gpu_metrics is designed as an interface that provides raw data[^1] (but undocumented it[^2]), it would be better to have the correction applied on the user-space. [^1]: https://gitlab.freedesktop.org/drm/amd/-/work_items/3251#note_2904104 [^2]: https://www.kernel.org/doc/html/latest/gpu/amdgpu/thermal.html#gpu-metrics --- On Friday, August 14th, 2026 at 7:25, 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. > > [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) > > > > >
