[PATCH] drm/v3d: Expose memory stats through fdinfo
Maíra Canal
mcanal at igalia.com
Sat Jul 13 14:57:53 UTC 2024
On 7/11/24 11:25, Maíra Canal wrote:
> Use the common DRM function `drm_show_memory_stats()` to expose standard
> fdinfo memory stats.
>
> V3D exposes global GPU memory stats through debugfs. Those stats will be
> preserved while the DRM subsystem doesn't have a standard solution to
> expose global GPU stats.
>
> Signed-off-by: Maíra Canal <mcanal at igalia.com>
Applied to drm-misc/drm-misc-next!
Best Regards,
- Maíra
> ---
>
> * Example fdinfo output:
>
> $ cat /proc/10100/fdinfo/19
> pos: 0
> flags: 02400002
> mnt_id: 25
> ino: 521
> drm-driver: v3d
> drm-client-id: 81
> drm-engine-bin: 4916187 ns
> v3d-jobs-bin: 98 jobs
> drm-engine-render: 154563573 ns
> v3d-jobs-render: 98 jobs
> drm-engine-tfu: 10574 ns
> v3d-jobs-tfu: 1 jobs
> drm-engine-csd: 0 ns
> v3d-jobs-csd: 0 jobs
> drm-engine-cache_clean: 0 ns
> v3d-jobs-cache_clean: 0 jobs
> drm-engine-cpu: 0 ns
> v3d-jobs-cpu: 0 jobs
> drm-total-memory: 15168 KiB
> drm-shared-memory: 9336 KiB
> drm-active-memory: 0
>
> * Example gputop output:
>
> DRM minor 128
> PID MEM RSS bin render tfu csd cache_clean cpu NAME
> 10257 19M 19M | 3.6% ▎ || 43.2% ██▋ || 0.0% || 0.0% || 0.0% || 0.0% | glmark2
> 9963 3M 3M | 0.3% ▏ || 2.6% ▎ || 0.0% || 0.0% || 0.0% || 0.0% | glxgears
> 9965 10M 10M | 0.0% || 0.0% || 0.0% || 0.0% || 0.0% || 0.0% | Xwayland
> 10100 14M 14M | 0.0% || 0.0% || 0.0% || 0.0% || 0.0% || 0.0% | chromium-browse
>
> Best Regards,
> - Maíra
>
> drivers/gpu/drm/v3d/v3d_bo.c | 12 ++++++++++++
> drivers/gpu/drm/v3d/v3d_drv.c | 2 ++
> 2 files changed, 14 insertions(+)
>
> diff --git a/drivers/gpu/drm/v3d/v3d_bo.c b/drivers/gpu/drm/v3d/v3d_bo.c
> index a165cbcdd27b..ecb80fd75b1a 100644
> --- a/drivers/gpu/drm/v3d/v3d_bo.c
> +++ b/drivers/gpu/drm/v3d/v3d_bo.c
> @@ -26,6 +26,17 @@
> #include "v3d_drv.h"
> #include "uapi/drm/v3d_drm.h"
>
> +static enum drm_gem_object_status v3d_gem_status(struct drm_gem_object *obj)
> +{
> + struct v3d_bo *bo = to_v3d_bo(obj);
> + enum drm_gem_object_status res = 0;
> +
> + if (bo->base.pages)
> + res |= DRM_GEM_OBJECT_RESIDENT;
> +
> + return res;
> +}
> +
> /* Called DRM core on the last userspace/kernel unreference of the
> * BO.
> */
> @@ -63,6 +74,7 @@ static const struct drm_gem_object_funcs v3d_gem_funcs = {
> .vmap = drm_gem_shmem_object_vmap,
> .vunmap = drm_gem_shmem_object_vunmap,
> .mmap = drm_gem_shmem_object_mmap,
> + .status = v3d_gem_status,
> .vm_ops = &drm_gem_shmem_vm_ops,
> };
>
> diff --git a/drivers/gpu/drm/v3d/v3d_drv.c b/drivers/gpu/drm/v3d/v3d_drv.c
> index a47f00b443d3..e883f405f26a 100644
> --- a/drivers/gpu/drm/v3d/v3d_drv.c
> +++ b/drivers/gpu/drm/v3d/v3d_drv.c
> @@ -184,6 +184,8 @@ static void v3d_show_fdinfo(struct drm_printer *p, struct drm_file *file)
> drm_printf(p, "v3d-jobs-%s: \t%llu jobs\n",
> v3d_queue_to_string(queue), jobs_completed);
> }
> +
> + drm_show_memory_stats(p, file);
> }
>
> static const struct file_operations v3d_drm_fops = {
More information about the dri-devel
mailing list