[PATCH v4 2/2] drm/xe/bo: add GPU memory trace points

Juston Li justonli at chromium.org
Fri Jun 13 17:57:46 UTC 2025


On Fri, 2025-06-13 at 09:34 -0500, Lucas De Marchi wrote:
> On Fri, Jun 13, 2025 at 03:14:24PM +0100, Tvrtko Ursulin wrote:
> > 
> > On 13/06/2025 15:10, Lucas De Marchi wrote:
> > > On Fri, Jun 13, 2025 at 09:02:27AM +0100, Tvrtko Ursulin wrote:
> > > > 
> > > > On 12/06/2025 19:53, Yiwei Zhang wrote:
> > > > > On Thu, Jun 12, 2025 at 11:02 AM Lucas De Marchi
> > > > > <lucas.demarchi at intel.com> wrote:
> > > > > > 
> > > > > > On Thu, Jun 12, 2025 at 05:46:52PM +0100, Tvrtko Ursulin
> > > > > > wrote:
> > > > > > > 
> > > > > > > On 12/06/2025 06:40, Lucas De Marchi wrote:
> > > > > > > > On Wed, Jun 11, 2025 at 03:51:24PM -0700, Juston Li
> > > > > > > > wrote:
> > > > > > > > > Add TRACE_GPU_MEM tracepoints for tracking global and
> > > > > > > > > per-process GPU
> > > > > > > > > memory usage.
> > > > > > > > > 
> > > > > > > > > These are required by VSR on Android 12+ for
> > > > > > > > > reporting 
> > > > > > > > > GPU driver memory
> > > > > > > > > allocations.
> > > > > > > > > 
> > > > > > > > > v3:
> > > > > > > > > - Use now configurable CONFIG_TRACE_GPU_MEM instead
> > > > > > > > > of adding a
> > > > > > > > >  per-driver Kconfig (Lucas)
> > > > > > > > > 
> > > > > > > > > v2:
> > > > > > > > > - Use u64 as preferred by checkpatch (Tvrtko)
> > > > > > > > > - Fix errors in comments/Kconfig description (Tvrtko)
> > > > > > > > > - drop redundant "CONFIG" in Kconfig
> > > > > > > > > 
> > > > > > > > > Signed-off-by: Juston Li <justonli at chromium.org>
> > > > > > > > > Reviewed-by: Tvrtko Ursulin
> > > > > > > > > <tvrtko.ursulin at igalia.com>
> > > > > > > > > ---
> > > > > > > > > drivers/gpu/drm/xe/xe_bo.c           | 47 
> > > > > > > > > +++++++++++++++++++++++ +++++
> > > > > > > > > drivers/gpu/drm/xe/xe_device_types.h | 16 ++++++++++
> > > > > > > > > 2 files changed, 63 insertions(+)
> > > > > > > > > 
> > > > > > > > > diff --git a/drivers/gpu/drm/xe/xe_bo.c
> > > > > > > > > b/drivers/gpu/drm/xe/xe_bo.c
> > > > > > > > > index 4e39188a021ab..89a3d23e3b800 100644
> > > > > > > > > --- a/drivers/gpu/drm/xe/xe_bo.c
> > > > > > > > > +++ b/drivers/gpu/drm/xe/xe_bo.c
> > > > > > > > > @@ -19,6 +19,8 @@
> > > > > > > > > 
> > > > > > > > > #include <kunit/static_stub.h>
> > > > > > > > > 
> > > > > > > > > +#include <trace/events/gpu_mem.h>
> > > > > > > > > +
> > > > > > > > > #include "xe_device.h"
> > > > > > > > > #include "xe_dma_buf.h"
> > > > > > > > > #include "xe_drm_client.h"
> > > > > > > > > @@ -418,6 +420,35 @@ static void
> > > > > > > > > xe_ttm_tt_account_subtract(struct
> > > > > > > > > xe_device *xe, struct ttm_tt *tt)
> > > > > > > > >        xe_shrinker_mod_pages(xe->mem.shrinker, 
> > > > > > > > > -(long)tt- >num_pages, 0);
> > > > > > > > > }
> > > > > > > > > 
> > > > > > > > > +#if IS_ENABLED(CONFIG_TRACE_GPU_MEM)
> > > > > > > > > +static void update_global_total_pages(struct
> > > > > > > > > ttm_device *ttm_dev,
> > > > > > > > > long num_pages)
> > > > > > > > > +{
> > > > > > > > > +    struct xe_device *xe =
> > > > > > > > > ttm_to_xe_device(ttm_dev);
> > > > > > > > > +    u64 global_total_pages =
> > > > > > > > > +        atomic64_add_return(num_pages, &xe-
> > > > > > > > > >global_total_pages);
> > > > > > > > > +
> > > > > > > > > +    trace_gpu_mem_total(0, 0, global_total_pages <<
> > > > > > > > > PAGE_SHIFT);
> > > > > > > > > +}
> > > > > > > > > +
> > > > > > > > > +static void update_process_mem(struct drm_file
> > > > > > > > > *file, ssize_t size)
> > > > > > > > > +{
> > > > > > > > > +    struct xe_file *xef = to_xe_file(file);
> > > > > > > > > +    u64 process_mem = atomic64_add_return(size,
> > > > > > > > > &xef->process_mem);
> > > > > > > > > +
> > > > > > > > > +    rcu_read_lock(); /* Locks file->pid! */
> > > > > > > > > +    trace_gpu_mem_total(0,
> > > > > > > > > pid_nr(rcu_dereference(file->pid)),
> > > > > > > > > process_mem);
> > > > > > > > 
> > > > > > > > Isn't the first arg supposed to be the gpu id? Doesn't
> > > > > > > > this become
> > > > > > > > invalid when I have e.g. LNL + BMG and the trace is
> > > > > > > > enabled?
> > > > > > > 
> > > > > > > Good point.
> > > > > > > 
> > > > > > > u32 gpu_id does not seem possible to map to anything
> > > > > > > useful.
> > > > > > 
> > > > > > maybe minor_id? although I'm not sure if the intention is
> > > > > > to share this
> > > > > > outside drm as seems the case.
> > > > > 
> > > > > Yes, that was for render minor in the case of drm.
> > > > 
> > > > Or to keep the field as integer we can use dev->primary->index,
> > > > which would then correlate with the /sys/class/drm/card%u, in
> > > > case 
> > > > it needs to be mapped back.
> > > > 
> > > > There is prior art in various drivers to use either dev_name or
> > > > dev- >primary->index, but for this one it is probably easier to
> > > > stick with the integer so both msm can keep passing the zero
> > > > and 
> > > > we don't
> > > 
> > > both msm?  In xe we'd use dev->primary->index, right?
> > 
> > Right. I could have used some punctuation. Both as in 1) msm can
> > keep 
> > passing hardcoded zero, 2) we don't have to even start thinking
> > about 
> > Android userspace compatibility.
> 
> ah.. ok, misunderstood that. Makes sense.
> 
> thanks
> Lucas De Marchi

Tested with dev->primary->index and it works for us, will send v5.

Apologies this got missed, thanks for the guidance everyone!

Juston

> > 
> > Regards,
> > 
> > Tvrtko
> > 
> > > 
> > > Lucas De Marchi
> > > 
> > > > have to think about Android userspace forward/backward
> > > > compatibility.
> > > > 
> > > > Regards,
> > > > 
> > > > Tvrtko
> > > > 
> > > > > 
> > > > > > 
> > > > > > > 
> > > > > > > Shall we replace it with a string obtained from
> > > > > > > dev_name(struct device
> > > > > > > *) ? As only Android parses them I think we can get still
> > > > > > > away with
> > > > > > > changing the tracepoints ABI.
> > > > > > 
> > > > > > works for me too. Is Android actually parsing it or just
> > > > > > ignoring?
> > > > > > Because afaics it's always 0 in msm.
> > > > > 
> > > > > Android has used it as part of the bpf map key:
> > > > > https://cs.android.com/android/platform/superproject/main/+/ 
> > > > > main:frameworks/native/services/gpuservice/bpfprogs/gpuMem.c
> > > > > 
> > > > > > 
> > > > > > Lucas De Marchi
> > > > 
> > 


More information about the dri-devel mailing list