ANDROID: Add dmabuf RSS trace event

Dmabuf RSS is associated with a task, or group of tasks sharing the same
mm_struct and files_struct. Any time the RSS counter is modified for a
task, or group of tasks, emit a trace event with the current value of
the dmabuf RSS counter.

This allows for fast tracking of per-process dmabuf RSS by userspace
analysis tools like Perfetto, compared to periodically obtaining
per-process dmabuf RSS from procfs.

Bug: 424646615
Change-Id: I74434dddacc342918cb52b1b9e2fa6679e332764
Signed-off-by: T.J. Mercier <tjmercier@google.com>
This commit is contained in:
T.J. Mercier
2025-07-01 00:51:35 +00:00
committed by Suren Baghdasaryan
parent e9f7ac1c25
commit c8fdc081cf
2 changed files with 30 additions and 0 deletions

View File

@@ -31,6 +31,9 @@
#include <uapi/linux/dma-buf.h> #include <uapi/linux/dma-buf.h>
#include <uapi/linux/magic.h> #include <uapi/linux/magic.h>
#ifndef __GENKSYMS__
#include <trace/events/kmem.h>
#endif
#include <trace/hooks/dmabuf.h> #include <trace/hooks/dmabuf.h>
#include "dma-buf-sysfs-stats.h" #include "dma-buf-sysfs-stats.h"
@@ -211,6 +214,7 @@ static int new_task_dmabuf_record(struct task_struct *task, struct dma_buf *dmab
return -ENOMEM; return -ENOMEM;
dmabuf_info->rss += dmabuf->size; dmabuf_info->rss += dmabuf->size;
trace_dmabuf_rss_stat(dmabuf_info->rss, dmabuf->size, dmabuf);
/* /*
* dmabuf_info->lock protects against concurrent writers, so no * dmabuf_info->lock protects against concurrent writers, so no
* worries about stale rss_hwm between the read and write, and we don't * worries about stale rss_hwm between the read and write, and we don't
@@ -312,6 +316,7 @@ void dma_buf_unaccount_task(struct dma_buf *dmabuf, struct task_struct *task)
list_del(&rec->node); list_del(&rec->node);
kfree(rec); kfree(rec);
dmabuf_info->rss -= dmabuf->size; dmabuf_info->rss -= dmabuf->size;
trace_dmabuf_rss_stat(dmabuf_info->rss, -dmabuf->size, dmabuf);
atomic64_dec(&get_dmabuf_ext(dmabuf)->num_unique_refs); atomic64_dec(&get_dmabuf_ext(dmabuf)->num_unique_refs);
} }
err: err:

View File

@@ -8,6 +8,7 @@
#include <linux/types.h> #include <linux/types.h>
#include <linux/tracepoint.h> #include <linux/tracepoint.h>
#include <trace/events/mmflags.h> #include <trace/events/mmflags.h>
#include <linux/dma-buf.h>
TRACE_EVENT(kmem_cache_alloc, TRACE_EVENT(kmem_cache_alloc,
@@ -487,6 +488,30 @@ TRACE_EVENT(rss_stat,
__print_symbolic(__entry->member, TRACE_MM_PAGES), __print_symbolic(__entry->member, TRACE_MM_PAGES),
__entry->size) __entry->size)
); );
TRACE_EVENT(dmabuf_rss_stat,
TP_PROTO(size_t rss, ssize_t rss_delta, struct dma_buf *dmabuf),
TP_ARGS(rss, rss_delta, dmabuf),
TP_STRUCT__entry(
__field(size_t, rss)
__field(ssize_t, rss_delta)
__field(unsigned long, i_ino)
),
TP_fast_assign(
__entry->rss = rss;
__entry->rss_delta = rss_delta;
__entry->i_ino = file_inode(dmabuf->file)->i_ino;
),
TP_printk("rss=%zu delta=%zd i_ino=%lu",
__entry->rss,
__entry->rss_delta,
__entry->i_ino)
);
#endif /* _TRACE_KMEM_H */ #endif /* _TRACE_KMEM_H */
/* This part must be outside protection */ /* This part must be outside protection */