内存管理-80-dma-buf-1-调试-2-dmabuf_dump
一、简介
1. 命令介绍
AOSP 自带的 dmabuf_dump(源码在 system/memory/libmeminfo/libdmabufinfo/tools/dmabuf_dump.cpp), debug 版本默认会带入,若没带入可 m dmabuf_dump 单独编一个。
# dmabuf_dump --help Usage: dmabuf_dump [-abh] [PID] [-o <raw|csv>] -a show all dma buffers (ion) in big table, [buffer x process] grid -b show DMA-BUF per-buffer, per-exporter and per-device statistics -o [raw][csv] print output in the specified format. -h show this help If PID is supplied, the dmabuf information for that process is shown. Per-buffer DMA-BUF stats do not take an argument.
用法:
dmabuf_dump # 可看每进程 Rss / Pss
dmabuf_dump -a # 大表:每行一个 Dmabuf Inode,每列一个 进程(pid),格子里是 fd/map 引用数 dmabuf_dump -a -o csv # 机器可读 dmabuf_dump <PID> # 单进程,列出它的 buffer(含 Inode / Exporter) dmabuf_dump -b # 按 buffer/exporter 汇总
2. 使用示例
2.1 dmabuf_dump -a
大表:每行一个 Dmabuf Inode,每列一个 进程(pid),格子里是 fd/map 引用数。
/data/local/tmp # dmabuf_dump -a ----------------------- DMA-BUF Table buffer x process -------------------------- Dmabuf Inode | Size | Fd Ref Counts | Map Ref Counts | qseecomd:634 | binder:1034_2:1034 | surfaceflinger:1085 | com.sam.arhud:3893 | ... 31 | 20 kB | 1 | 1 | 1( 1) refs | -- | -- | -- | ... ... 2251 | 4820 kB | 3 | 0 | -- | 3( 0) refs | 2( 0) refs | 2( 0) refs | ... ... 2436 | 4 kB | 0 | 1 | -- | -- | -- | -- | ... ------------------------------------ TOTALS 3383764 kB | n/a | n/a | 564 kB | 248212 kB | 462984 kB | 107504 kB | ...
2.2 dmabuf_dump pid
单进程,列出它的 buffer(含 Inode / Exporter).
/data/local/tmp # dmabuf_dump 3973 com.sam.maps:3973 Name Rss Pss nr_procs Inode Exporter <unknown> 4096 kB 4096 kB 1 2111 qcom_hgsl <unknown> 4 kB 4 kB 1 2114 msm_hab ... qcom,system 18440 kB 18440 kB 1 2142 qcom,system qcom,system 28 kB 28 kB 1 2143 qcom,system <unknown> 16928 kB 16928 kB 1 2144 qcom_hgsl ... <unknown> 16384 kB 16384 kB 1 2424 qcom_hgsl PROCESS TOTAL 1018352 kB 1018352 kB ---------------------- dmabuf total: 3387304 kB kernel_rss: 2368952 kB userspace_rss: 1018352 kB userspace_pss: 1018352 kB
2.2.1 字段解释:
(1) 标题行
-------------------------------------------------------------------------------------------------------------------------- 列 含义 依据 -------------------------------------------------------------------------------------------------------------------------- Name dma-buf 的 name(DMA_BUF_SET_NAME),没设过就是 <unknown> dmabuf_output_helper.h:192-197 Rss 不是常驻内存,而是这块 buffer 的申请大小 buf.size()/1024 dmabuf_dump.cpp:171 Pss 不是 smaps 的真实 PSS,是 size / nr_procs 的平均分摊估算 dmabufinfo.h:65 nr_procs 引用它的进程数(持 fd 或 mmap 任一即算),不是 fd 数/映射次数 dmabufinfo.h:40-48 Inode 就是 /sys/kernel/dmabuf/buffers/<ino> 目录名,可 cat size 对照上 dma-buf.c 的 dma_buf_getfile Exporter exporter_name(KBUILD_MODNAME,如 qcom_hgsl) — --------------------------------------------------------------------------------------------------------------------------
(2) PROCESS TOTAL
是本进程所有 buffer 的 Rss 列求和 与 Pss 列求和(dmabuf_dump.cpp:171-175)。你的两个数都是 1,018,352 kB,因为带 PID 时只扫这一个进程,每个 buffer 的 nr_procs 恒为 1,Pss 必然退化成 Rss。
(3) dmabuf total
userspace_rss = 扫描到的进程(这里只有 3973)所引用 buffer 的 size 之和;
userspace_pss = 这些 buffer 的 size/nr_procs 之和;
dmabuf total = 系统全部导出 dma-buf 之和,来自 sysfs(GetDmabufTotalExportedKb,dmabuf_sysfs_stats.cpp:121-145),与 PID 无关;
kernel_rss = dmabuf total − userspace_rss(dmabuf_dump.cpp:181-190),并不代表内核内存,而是“系统里没被 3973 引用的那部分(含别的进程持有的、以及没人引用的)”。验算:1,018,352 + 2,368,952 = 3,387,304 对应的上。
注意:带 PID 跑时 nr_procs 恒 1、Pss=Rss,别拿它算进程内存占比;要看系统级真实归属用 dmabuf_dump -a(inode×进程网格,含 fd/map 引用数)或不带 PID 跑。
2.3 dmabuf_dump
显示每个进程的 dma_buf 映射信息,包含每进程的 Rss 和 Pss。
/data/local/tmp # dmabuf_dump ... ---------------------- system_server:1852 Name Rss Pss nr_procs Inode Exporter <unknown> 4096 kB 4096 kB 1 1541 qcom_hgsl ... qcom,system 18440 kB 9220 kB 2 1549 qcom,system qcom,system 18440 kB 6146 kB 3 1551 qcom,system ... PROCESS TOTAL 293036 kB 238275 kB ---------------------- ... android.systemui:3457 Name Rss Pss nr_procs Inode Exporter ... qcom,system 28 kB 14 kB 2 2198 qcom,system PROCESS TOTAL 63756 kB 58111 kB ---------------------- dmabuf total: 3377608 kB kernel_rss: 1924 kB userspace_rss: 3979328 kB userspace_pss: 3375683 kB
2.4 dmabuf_dump -b
按 exporter name 汇总个数和大小。
# dmabuf_dump -b ----------------------- DMA-BUF per-buffer stats ----------------------- Dmabuf Inode | Size(bytes) | Exporter Name | 1400 | 8192 | qcom_hgsl ... ... 5224 | 32768 | qcom_hgsl ----------------------- DMA-BUF exporter stats ----------------------- Exporter Name | Total Count | Total Size(bytes) | qcom_hgsl | 3637| 1453314048 qcom,system-uncached | 1| 131072 qcom,qseecom | 4| 577536 qcom,system | 200| 861634560 msm_hab | 99| 1806336 ----------------------- DMA-BUF total stats ----------------------- Total DMA-BUF count: 3941, Total DMA-BUF size(bytes): 2317463552
posted on 2026-10-28 15:45 Hello-World3 阅读(5) 评论(0) 收藏 举报
浙公网安备 33010602011771号