内存管理-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)    收藏  举报

导航