本文是极客笔记出品,介绍如何使用dmabuf_dump工具。
什么是DMA-BUF
dma-buf 的出现就是为了解决各个驱动之间 buffer 共享的问题,因此它本质上是 buffer 与 file 的结合,即 dma-buf 既是块物理 buffer,又是个 linux file。
buffer 是内容,file 是媒介,只有通过 file 这个媒介才能实现同一 buffer 在不同驱动之间的流转。
- exporter: 分配 buffer 的模块
- importer/user:使用 buffer 的模块
dmabuf_dump工具介绍
dmabuf_dump是一个可执行文件,接收参数调用libdmabufinfo.a的接口完成dump功能,代码在:system/memory/libmeminfo/libdmabufinfo/tools/
结构如下(基于Android 13):
包含如下功能:
- Dump整个系统DMA-BUF per-buffer, per-exporter and per-device statistics(dmabuf_dump -b),在kernel版本>= 5.10上生效。
- Dump整个系统的dmabuf info (dmabuf_dump)
- Dump某个PID的dmabuf info (dmabuf_dump )
- 以Table[buffer x process]方式呈现dmabuf info (dmabuf_dump -a)
dmabuf_dump工具的使用
Dump整个系统的dmabuf info
xxx:/ # dmabuf_dump
mediaswcodec:774
Name Rss Pss nr_procs Inode
<unknown> 32 kB 0 kB 2 54037
<unknown> 32 kB 0 kB 2 63993
<unknown> 16 kB 0 kB 2 63994
<unknown> 16 kB 0 kB 2 63995
<unknown> 32 kB 0 kB 2 64923
<unknown> 32 kB 0 kB 2 64924
<unknown> 32 kB 0 kB 2 64925
<unknown> 32 kB 0 kB 2 64932
<unknown> 16 kB 0 kB 2 64933
<unknown> 32 kB 0 kB 2 65906
<unknown> 32 kB 0 kB 2 66870
PROCESS TOTAL 304 kB 0 kB
----------------------
ndroid.systemui:1505
Name Rss Pss nr_procs Inode
<unknown> 392 kB 196 kB 2 45482
<unknown> 392 kB 130 kB 3 45484
<unknown> 196 kB 65 kB 3 45489
<unknown> 392 kB 130 kB 3 46741
<unknown> 4160 kB 1386 kB 3 49696
<unknown> 196 kB 65 kB 3 51564
<unknown> 196 kB 65 kB 3 51566
<unknown> 16 kB 16 kB 1 51802
<unknown> 16 kB 16 kB 1 53584
<unknown> 16 kB 16 kB 1 64935
<unknown> 16 kB 16 kB 1 65914
<unknown> 16 kB 16 kB 1 65916
<unknown> 16 kB 16 kB 1 65918
<unknown> 16 kB 16 kB 1 66879
<unknown> 16 kB 16 kB 1 66882
PROCESS TOTAL 6052 kB 2167 kB
----------------------
droid.launcher3:1903
Name Rss Pss nr_procs Inode
<unknown> 68 kB 68 kB 1 44867
<unknown> 68 kB 68 kB 1 44870
<unknown> 68 kB 68 kB 1 44872
<unknown> 52 kB 52 kB 1 50076
<unknown> 52 kB 52 kB 1 50078
<unknown> 52 kB 52 kB 1 51809
<unknown> 52 kB 52 kB 1 51811
<unknown> 52 kB 52 kB 1 52583
<unknown> 52 kB 52 kB 1 53586
<unknown> 52 kB 52 kB 1 53598
<unknown> 52 kB 52 kB 1 62391
<unknown> 52 kB 52 kB 1 62396
<unknown> 52 kB 52 kB 1 62398
<unknown> 52 kB 52 kB 1 62400
<unknown> 52 kB 52 kB 1 62402
<unknown> 52 kB 52 kB 1 62523
<unknown> 52 kB 52 kB 1 62525
<unknown> 52 kB 52 kB 1 62527
<unknown> 52 kB 52 kB 1 62529
<unknown> 52 kB 52 kB 1 62531
<unknown> 52 kB 52 kB 1 62533
<unknown> 5072 kB 1690 kB 3 66874
<unknown> 5072 kB 1690 kB 3 66876
<unknown> 5072 kB 1690 kB 3 66877
PROCESS TOTAL 16356 kB 6211 kB
----------------------
mediaserver:681
Name Rss Pss nr_procs Inode
<unknown> 32 kB 0 kB 2 54037
<unknown> 32 kB 32 kB 2 63993
<unknown> 16 kB 0 kB 2 63994
<unknown> 16 kB 0 kB 2 63995
<unknown> 32 kB 0 kB 2 64923
<unknown> 32 kB 32 kB 2 64924
<unknown> 32 kB 32 kB 2 64925
<unknown> 32 kB 0 kB 2 64932
<unknown> 16 kB 0 kB 2 64933
<unknown> 32 kB 0 kB 2 65906
<unknown> 32 kB 32 kB 2 66870
PROCESS TOTAL 304 kB 128 kB
----------------------
surfaceflinger:472
Name Rss Pss nr_procs Inode
<unknown> 5072 kB 2536 kB 2 30958
<unknown> 5072 kB 2536 kB 2 30960
<unknown> 5072 kB 2536 kB 2 30962
<unknown> 392 kB 196 kB 2 45482
<unknown> 392 kB 130 kB 3 45484
<unknown> 196 kB 65 kB 3 45489
<unknown> 392 kB 130 kB 3 46741
<unknown> 4160 kB 1386 kB 3 49696
<unknown> 196 kB 65 kB 3 51564
<unknown> 196 kB 65 kB 3 51566
<unknown> 5072 kB 1690 kB 3 66874
<unknown> 5072 kB 1690 kB 3 66876
<unknown> 5072 kB 1690 kB 3 66877
PROCESS TOTAL 36356 kB 14719 kB
----------------------
composer@2.1-se:414
Name Rss Pss nr_procs Inode
<unknown> 5072 kB 2536 kB 2 30958
<unknown> 5072 kB 2536 kB 2 30960
<unknown> 5072 kB 2536 kB 2 30962
<unknown> 392 kB 130 kB 3 45484
<unknown> 196 kB 65 kB 3 45489
<unknown> 392 kB 130 kB 3 46741
<unknown> 4160 kB 1386 kB 3 49696
<unknown> 196 kB 65 kB 3 51564
<unknown> 196 kB 65 kB 3 51566
<unknown> 5072 kB 1690 kB 3 66874
<unknown> 5072 kB 1690 kB 3 66876
<unknown> 5072 kB 1690 kB 3 66877
PROCESS TOTAL 35964 kB 14523 kB
----------------------
keymaster@4.0-s:294
Name Rss Pss nr_procs Inode
<unknown> 72 kB 72 kB 1 27411
<unknown> 72 kB 72 kB 1 27412
PROCESS TOTAL 144 kB 144 kB
----------------------
dmabuf total: 38072 kB kernel_rss: 0 kB userspace_rss: 95480 kB userspace_pss: 37895 kB
Dump某个PID的dmabuf info
Dump Camera Provider进程的dmabuf使用情况。
xxx:/ # dmabuf_dump 407
provider@2.4-se:407
Name Rss Pss nr_procs Inode
<unknown> 76 kB 76 kB 1 67578
<unknown> 4 kB 4 kB 1 67580
<unknown> 4 kB 4 kB 1 67581
<unknown> 4 kB 4 kB 1 67582
<unknown> 4 kB 4 kB 1 67583
<unknown> 4 kB 4 kB 1 67584
<unknown> 100 kB 100 kB 1 83420
<unknown> 64 kB 64 kB 1 83421
<unknown> 19396 kB 19396 kB 1 83453
<unknown> 1016 kB 0 kB 1 83454
<unknown> 24 kB 24 kB 1 83455
<unknown> 36 kB 36 kB 1 83456
<unknown> 12 kB 12 kB 1 83457
<unknown> 8 kB 8 kB 1 83458
<unknown> 4 kB 4 kB 1 83459
<unknown> 384 kB 384 kB 1 83460
<unknown> 1080 kB 1080 kB 1 83461
<unknown> 4 kB 4 kB 1 83462
<unknown> 1080 kB 1080 kB 1 83894
<unknown> 976 kB 976 kB 1 84456
<unknown> 8 kB 8 kB 1 84457
<unknown> 4 kB 4 kB 1 84458
<unknown> 4 kB 4 kB 1 84459
<unknown> 76 kB 76 kB 1 84460
<unknown> 4 kB 4 kB 1 84461
<unknown> 12 kB 12 kB 1 84462
<unknown> 176 kB 176 kB 1 86253
<unknown> 264 kB 264 kB 1 86254
<unknown> 312 kB 312 kB 1 86255
<unknown> 196 kB 196 kB 1 86259
<unknown> 4 kB 4 kB 1 86260
<unknown> 1080 kB 1080 kB 1 86267
<unknown> 1080 kB 1080 kB 1 86299
<unknown> 19396 kB 19396 kB 1 86301
<unknown> 1080 kB 1080 kB 1 86305
<unknown> 19396 kB 19396 kB 1 86306
<unknown> 96 kB 96 kB 1 88216
<unknown> 4 kB 4 kB 1 88217
<unknown> 116 kB 116 kB 1 88218
<unknown> 4 kB 4 kB 1 88219
<unknown> 4 kB 4 kB 1 88220
<unknown> 4668 kB 4668 kB 1 88227
<unknown> 4 kB 4 kB 1 88228
<unknown> 64 kB 64 kB 1 88243
<unknown> 24 kB 24 kB 1 88244
<unknown> 1080 kB 1080 kB 1 88258
<unknown> 4 kB 4 kB 1 89493
<unknown> 24 kB 24 kB 1 89528
<unknown> 2772 kB 2772 kB 1 89529
<unknown> 1444 kB 0 kB 1 89544
<unknown> 408 kB 408 kB 1 89545
<unknown> 12 kB 12 kB 1 89547
<unknown> 4 kB 4 kB 1 89548
<unknown> 1444 kB 0 kB 1 89549
<unknown> 408 kB 408 kB 1 89550
<unknown> 4 kB 4 kB 1 89553
<unknown> 4 kB 4 kB 1 89554
<unknown> 4 kB 4 kB 1 89555
<unknown> 4 kB 4 kB 1 89556
<unknown> 1080 kB 1080 kB 1 89560
<unknown> 1016 kB 0 kB 1 89568
<unknown> 24 kB 24 kB 1 89569
<unknown> 36 kB 36 kB 1 89570
<unknown> 12 kB 12 kB 1 89571
<unknown> 8 kB 8 kB 1 89572
<unknown> 4 kB 4 kB 1 89573
<unknown> 384 kB 384 kB 1 89574
<unknown> 8 kB 8 kB 1 89579
<unknown> 1080 kB 1080 kB 1 89589
<unknown> 19396 kB 19396 kB 1 89594
<unknown> 4 kB 4 kB 1 90233
<unknown> 2772 kB 2772 kB 1 90235
<unknown> 4 kB 4 kB 1 90236
<unknown> 4 kB 4 kB 1 90237
<unknown> 4 kB 4 kB 1 90238
<unknown> 196 kB 196 kB 1 90239
<unknown> 196 kB 196 kB 1 90240
<unknown> 1080 kB 1080 kB 1 90250
<unknown> 19396 kB 19396 kB 1 90257
<unknown> 1016 kB 0 kB 1 90258
<unknown> 24 kB 24 kB 1 90259
<unknown> 36 kB 36 kB 1 90260
<unknown> 12 kB 12 kB 1 90261
<unknown> 8 kB 8 kB 1 90262
<unknown> 4 kB 4 kB 1 90263
<unknown> 384 kB 384 kB 1 90264
<unknown> 1016 kB 0 kB 1 90269
<unknown> 24 kB 24 kB 1 90270
<unknown> 36 kB 36 kB 1 90271
<unknown> 12 kB 12 kB 1 90272
<unknown> 8 kB 8 kB 1 90273
<unknown> 196 kB 196 kB 1 91304
<unknown> 12 kB 12 kB 1 91305
<unknown> 1080 kB 1080 kB 1 91314
<unknown> 19396 kB 19396 kB 1 91326
<unknown> 4 kB 4 kB 1 92161
<unknown> 4 kB 4 kB 1 92162
<unknown> 1080 kB 1080 kB 1 92171
<unknown> 452 kB 452 kB 1 92174
<unknown> 144 kB 144 kB 1 92175
<unknown> 24 kB 24 kB 1 92176
<unknown> 1080 kB 1080 kB 1 92177
PROCESS TOTAL 152728 kB 145776 kB
----------------------
dmabuf total: 152728 kB kernel_rss: 0 kB userspace_rss: 152728 kB userspace_pss: 145776 kB
以Table[buffer x process]方式呈现dmabuf info
- 注意,该方式只能看整个系统的
xxx:/ # dmabuf_dump -a
Dmabuf Inode | Size | Fd Ref Counts | Map Ref Counts | keymaster@4.0-s:294 | composer@2.1-se:414 | surfaceflinger:472 | mediaserver:681 | mediaswcodec:774 | system_server:926 | ndroid.systemui:1505 | droid.launcher3:1903 |
27412 | 72 kB | 0 | 1 | 0( 1) refs | -- | -- | -- | -- | -- | -- | -- |
27411 | 72 kB | 0 | 1 | 0( 1) refs | -- | -- | -- | -- | -- | -- | -- |
30960 | 5072 kB | 2 | 2 | -- | 1( 1) refs | 1( 1) refs | -- | -- | -- | -- | -- |
30962 | 5072 kB | 2 | 2 | -- | 1( 1) refs | 1( 1) refs | -- | -- | -- | -- | -- |
30958 | 5072 kB | 2 | 2 | -- | 1( 1) refs | 1( 1) refs | -- | -- | -- | -- | -- |
45482 | 392 kB | 3 | 3 | -- | 1( 1) refs | 1( 1) refs | -- | -- | -- | 1( 1) refs | -- |
73784 | 5072 kB | 3 | 3 | -- | 1( 1) refs | 1( 1) refs | -- | -- | 1( 1) refs | -- | -- |
66904 | 5072 kB | 1 | 1 | -- | 1( 1) refs | -- | -- | -- | -- | -- | -- |
51564 | 196 kB | 3 | 3 | -- | 1( 1) refs | 1( 1) refs | -- | -- | -- | 1( 1) refs | -- |
73786 | 5072 kB | 1 | 1 | -- | 1( 1) refs | -- | -- | -- | -- | -- | -- |
45489 | 196 kB | 3 | 3 | -- | 1( 1) refs | 1( 1) refs | -- | -- | -- | 1( 1) refs | -- |
46741 | 392 kB | 3 | 3 | -- | 1( 1) refs | 1( 1) refs | -- | -- | -- | 1( 1) refs | -- |
45484 | 392 kB | 3 | 3 | -- | 1( 1) refs | 1( 1) refs | -- | -- | -- | 1( 1) refs | -- |
51566 | 196 kB | 3 | 3 | -- | 1( 1) refs | 1( 1) refs | -- | -- | -- | 1( 1) refs | -- |
66909 | 5072 kB | 2 | 2 | -- | -- | 1( 1) refs | -- | -- | -- | 1( 1) refs | -- |
66907 | 5072 kB | 2 | 2 | -- | -- | 1( 1) refs | -- | -- | -- | 1( 1) refs | -- |
49696 | 4160 kB | 2 | 2 | -- | -- | 1( 1) refs | -- | -- | -- | 1( 1) refs | -- |
63993 | 32 kB | 2 | 1 | -- | -- | -- | 3( 1) refs | 1( 0) refs | -- | -- | -- |
54037 | 32 kB | 2 | 0 | -- | -- | -- | 1( 0) refs | 1( 0) refs | -- | -- | -- |
64924 | 32 kB | 2 | 1 | -- | -- | -- | 3( 1) refs | 1( 0) refs | -- | -- | -- |
64923 | 32 kB | 2 | 0 | -- | -- | -- | 1( 0) refs | 1( 0) refs | -- | -- | -- |
64925 | 32 kB | 2 | 1 | -- | -- | -- | 3( 1) refs | 1( 0) refs | -- | -- | -- |
66870 | 32 kB | 2 | 1 | -- | -- | -- | 3( 1) refs | 1( 0) refs | -- | -- | -- |
63994 | 16 kB | 2 | 0 | -- | -- | -- | 1( 0) refs | 1( 0) refs | -- | -- | -- |
63995 | 16 kB | 2 | 0 | -- | -- | -- | 1( 0) refs | 1( 0) refs | -- | -- | -- |
65906 | 32 kB | 2 | 0 | -- | -- | -- | 1( 0) refs | 1( 0) refs | -- | -- | -- |
64933 | 16 kB | 2 | 0 | -- | -- | -- | 1( 0) refs | 1( 0) refs | -- | -- | -- |
64932 | 32 kB | 2 | 0 | -- | -- | -- | 1( 0) refs | 1( 0) refs | -- | -- | -- |
69198 | 4644 kB | 1 | 1 | -- | -- | -- | -- | -- | 1( 1) refs | -- | -- |
73793 | 5072 kB | 1 | 1 | -- | -- | -- | -- | -- | -- | 1( 1) refs | -- |
53584 | 16 kB | 1 | 1 | -- | -- | -- | -- | -- | -- | 1( 1) refs | -- |
51802 | 16 kB | 1 | 1 | -- | -- | -- | -- | -- | -- | 1( 1) refs | -- |
66882 | 16 kB | 1 | 1 | -- | -- | -- | -- | -- | -- | 1( 1) refs | -- |
66879 | 16 kB | 1 | 1 | -- | -- | -- | -- | -- | -- | 1( 1) refs | -- |
64935 | 16 kB | 1 | 1 | -- | -- | -- | -- | -- | -- | 1( 1) refs | -- |
65914 | 16 kB | 1 | 1 | -- | -- | -- | -- | -- | -- | 1( 1) refs | -- |
65916 | 16 kB | 1 | 1 | -- | -- | -- | -- | -- | -- | 1( 1) refs | -- |
65918 | 16 kB | 1 | 1 | -- | -- | -- | -- | -- | -- | 1( 1) refs | -- |
44867 | 68 kB | 1 | 1 | -- | -- | -- | -- | -- | -- | -- | 1( 1) refs |
44870 | 68 kB | 1 | 1 | -- | -- | -- | -- | -- | -- | -- | 1( 1) refs |
44872 | 68 kB | 1 | 1 | -- | -- | -- | -- | -- | -- | -- | 1( 1) refs |
51809 | 52 kB | 1 | 1 | -- | -- | -- | -- | -- | -- | -- | 1( 1) refs |
53586 | 52 kB | 1 | 1 | -- | -- | -- | -- | -- | -- | -- | 1( 1) refs |
52583 | 52 kB | 1 | 1 | -- | -- | -- | -- | -- | -- | -- | 1( 1) refs |
51811 | 52 kB | 1 | 1 | -- | -- | -- | -- | -- | -- | -- | 1( 1) refs |
62391 | 52 kB | 1 | 1 | -- | -- | -- | -- | -- | -- | -- | 1( 1) refs |
53598 | 52 kB | 1 | 1 | -- | -- | -- | -- | -- | -- | -- | 1( 1) refs |
62396 | 52 kB | 1 | 1 | -- | -- | -- | -- | -- | -- | -- | 1( 1) refs |
50076 | 52 kB | 1 | 1 | -- | -- | -- | -- | -- | -- | -- | 1( 1) refs |
62398 | 52 kB | 1 | 1 | -- | -- | -- | -- | -- | -- | -- | 1( 1) refs |
62400 | 52 kB | 1 | 1 | -- | -- | -- | -- | -- | -- | -- | 1( 1) refs |
50078 | 52 kB | 1 | 1 | -- | -- | -- | -- | -- | -- | -- | 1( 1) refs |
62523 | 52 kB | 1 | 1 | -- | -- | -- | -- | -- | -- | -- | 1( 1) refs |
62525 | 52 kB | 1 | 1 | -- | -- | -- | -- | -- | -- | -- | 1( 1) refs |
62527 | 52 kB | 1 | 1 | -- | -- | -- | -- | -- | -- | -- | 1( 1) refs |
62529 | 52 kB | 1 | 1 | -- | -- | -- | -- | -- | -- | -- | 1( 1) refs |
62402 | 52 kB | 1 | 1 | -- | -- | -- | -- | -- | -- | -- | 1( 1) refs |
62531 | 52 kB | 1 | 1 | -- | -- | -- | -- | -- | -- | -- | 1( 1) refs |
62533 | 52 kB | 1 | 1 | -- | -- | -- | -- | -- | -- | -- | 1( 1) refs |
------------------------------------
TOTALS 57932 kB | n/a | n/a | 144 kB | 32196 kB | 36356 kB | 304 kB | 304 kB | 9716 kB | 21268 kB | 1140 kB |
说明:
- Fd Ref Counts :表示该FD有多少个进程在引用
- Map Ref Counts:表示该FD当前有多少个进程已经做过Map
- FD( Map) refs : 该进程持有该Buffer的参考计数的总数量以及Map的总次数
Dump整个系统DMA-BUF per-buffer, per-exporter and per-device statistics
在kernel版本>= 5.10上生效。
执行:
dmabuf_dump -b
会从sysfs(/sys/kernel/dmabuf/buffers)中dump dmabuf统计信息,显示如下内容:
----------------------- DMA-BUF per-buffer stats -----------------------
Dmabuf Inode | Size(bytes) | Exporter Name |
29038 | 17051648 | virtio_gpu
39778 | 4096 | system
51377 | 4096 | system
52436 | 487424 | virtio_gpu
52766 | 45056 | virtio_gpu
16692 | 17051648 | virtio_gpu
50891 | 17051648 | virtio_gpu
39786 | 4096 | system
39748 | 155648 | virtio_gpu
52774 | 45056 | virtio_gpu
52529 | 4096 | system
51337 | 12288 | virtio_gpu
52764 | 45056 | virtio_gpu
16690 | 17051648 | virtio_gpu
39784 | 4096 | system
39746 | 155648 | virtio_gpu
52772 | 45056 | virtio_gpu
52762 | 4096 | system
51486 | 4096 | system
39792 | 4096 | system
39754 | 155648 | virtio_gpu
39782 | 4096 | system
50727 | 5783552 | virtio_gpu
57870 | 4096 | system
52770 | 45056 | virtio_gpu
51371 | 4096 | system
57832 | 4096 | system
57597 | 487424 | virtio_gpu
51484 | 4096 | system
50735 | 4096 | system
29040 | 17051648 | virtio_gpu
39752 | 155648 | virtio_gpu
39780 | 4096 | system
57869 | 970752 | virtio_gpu
52769 | 4096 | system
57595 | 487424 | virtio_gpu
16695 | 4096 | system
50733 | 4096 | system
29039 | 4096 | system
39750 | 155648 | virtio_gpu
39779 | 155648 | virtio_gpu
52437 | 4096 | system
52767 | 4096 | system
51490 | 17051648 | virtio_gpu
57593 | 487424 | virtio_gpu
16693 | 4096 | system
50892 | 4096 | system
39787 | 155648 | virtio_gpu
39749 | 4096 | system
52775 | 4096 | system
39777 | 155648 | virtio_gpu
51376 | 12288 | virtio_gpu
51338 | 4096 | system
52765 | 4096 | system
16691 | 4096 | system
39785 | 155648 | virtio_gpu
39747 | 4096 | system
52773 | 4096 | system
52528 | 3776512 | virtio_gpu
39755 | 4096 | system
39783 | 155648 | virtio_gpu
50728 | 4096 | system
52771 | 4096 | system
57598 | 4096 | system
52761 | 970752 | virtio_gpu
39310 | 4096 | system
51485 | 17051648 | virtio_gpu
39791 | 155648 | virtio_gpu
29041 | 4096 | system
39753 | 4096 | system
39781 | 155648 | virtio_gpu
39620 | 4096 | system
51370 | 12288 | virtio_gpu
57831 | 970752 | virtio_gpu
57596 | 4096 | system
39309 | 5783552 | virtio_gpu
51483 | 17051648 | virtio_gpu
50734 | 5783552 | virtio_gpu
39751 | 4096 | system
39619 | 17051648 | virtio_gpu
52768 | 45056 | virtio_gpu
51491 | 4096 | system
57594 | 4096 | system
16694 | 17051648 | virtio_gpu
39788 | 4096 | system
50732 | 5783552 | virtio_gpu
----------------------- DMA-BUF exporter stats -----------------------
Exporter Name | Total Count | Total Size(bytes) |
virtio_gpu | 43| 204464128
system | 43| 176128
----------------------- DMA-BUF total stats --------------------------
Total DMA-BUF count: 86, Total DMA-BUF size(bytes): 204640256
DMA-BUF 驱动
代码位置:android/kernel/msm-5.4/drivers/dma-buf/