本讲是Android Camera性能分析专题的第50讲,我们介绍Perfetto内存分析之使用Perfetto来分析Dmabuf内存。
更多资源:
资源 | 描述 |
---|---|
在线课程 | 极客笔记在线课程 |
知识星球 | 星球名称:深入浅出Android Camera 星球ID: 17296815 |
极客笔记圈 |
什么是DMABUF
dmabuf 的出现就是为了解决各个驱动之间 buffer 共享的问题,它本质上是 buffer 与 file 的结合,即 dmabuf 既是块物理 buffer,又是个 Linux file。
buffer 是内容,file 是媒介,只有通过 file 这个媒介才能实现同一 buffer 在不同驱动之间的流转。
- exporter: 分配 buffer 的模块
-
importer/user:使用 buffer 的模块
通过命令行dump dmabuf
dmabuf_dump是一个可执行文件,接收参数调用libdmabufinfo.a的接口完成dump功能,代码在:system/memory/libmeminfo/libdmabufinfo/tools/
包含如下功能:
- Dump整个系统DMA-BUF per-buffer, per-exporter (dmabuf_dump -b),在kernel版本>= 5.10上生效。
-
Dump整个系统的dmabuf info (dmabuf_dump)
-
Dump某个PID的dmabuf info (dmabuf_dump <****pid****>)
-
以Table[buffer x process]方式呈现dmabuf info (dmabuf_dump -a)
视频实战演示dump
通过Perfetto抓取dmabuf dump
TraceConfig
data_sources: {
config {
name: "linux.ftrace"
ftrace_config {
ftrace_events: "ion/ion_stat"
ftrace_events: "dmabuf_heap/dma_heap_stat"
ftrace_events: "kmem/ion_heap_grow"
ftrace_events: "kmem/ion_heap_shrink"
}
}
}
视频实战讲解Trace