目录
分配的ION buffer 都会设置为DMA buffer,以fd的形式交给使用方, 如app, camera等。
查看ion 的使用情况,可以查看ion 的各个heap分配情况, 也可以从DMA buffer 入手查看具体使用者的信息,整合各个信息能看到是谁异常使用。
Android 12开始, ION分配已经被DMA-buf heaps替代。 但核心还是使用 DMA buffer分享到各个进程。
查看DMA buffer 信息
1. 通过工具查看
adb shell dmabuf_dump
解析下面的文件:
/sys/kernel/debug/dma_buf/bufinfo(可能不存在)
/sys/kernel/dmabuf/buffers(可能不存在)
/proc/pid/fdinfo //遍历/proc/pid/fdinfo目录下的fdid文件, 从/proc/pid/fd目录下下找到该fdid对应的实际文件的link。 读取该文件的大小。统计引用该文件的pid。dmsbuf文件在proc/pid/fdinfo/fdid中会有exp_name:开始的行。其中ion buffer名为"ion_dma_buf"
/proc/pid/maps: name 为/dmabuf 为dma buf。其中每行的倒数第二列为inode.
2.通过系统文件查看
注: 不同的系统,android 版本一下路径可能没有。
使用如下命令, 其中带ion 字样的为ion buffer。 其中有ino项, 为dms buffer inode.
cat /sys/kernel/debug/dma_buf/bufinfo
使用如下命令找使用该ino的pid号:
lsof |grep ino
使用lsof查看某个pid打开的文件情况, 包括fd, 类型, 大小等。
lsof -p pid
也可以查看某个pid 打开的 dmsbuf
ls -l /proc/pid/fd
查看ion buffer 的总体分配情况
列出ion 各heap类型: 信息
ls -l /sys/kernel/debug/ion
查看heap 类型为system 的使用情况:
cat /sys/kernel/debug/ion/system/system_stats