page owner用于跟踪每个页面的分配者。
可以用来调试内存泄漏或查找内存黑洞(uncount memory)。
当分配发生时,有关分配的信息(如调用堆栈和页面顺序)存储在每个页面的特定存储中。
当我们需要了解所有页面的状态时,我们可以获取并分析这些信息。
- 使用方法
- 通过config配置打开
MTK:
CONFIG_PAGE_OWNER=y
CONFIG_PAGE_OWNER_SLIM=y
QCOM:
R之后的版本,还需要打开config中的debugfs
CONFIG_PAGE_OWNER=y
CONFIG_PAGE_OWNER_ENABLE_DEFAULT=y
- 使用Cmdline:
adb reboot-bootloader
fastboot oem append-cmdline page_owner=on
fastboot continue
怎么判断是否已经成功的开启page owner:
$adb shell "cat /sys/kernel/debug/page_owner"
如果存在就代表开启成功了。
- 抓取page owner 数据
(推荐此法)
adb pull /sys/kernel/debug/page_owner_slim 并检查内核社区提供了page_owner的python解析脚本,简书没法粘贴附件,大家可自行下载
先编译生成page_owner_sort (page owner raw数据需过滤和排序增加可读性)
cd tools/vm
make page_owner_sort
抓取数据并过滤排序
adb root
adb push page_owner_sort /data
adb shell chmod 777 /data/page_owner_sort
adb shell "cat /sys/kernel/debug/page_owner > /data/page_owner_full.txt" //此为raw 数据
adb shell "grep -v ^PFN /data/page_owner_full.txt > /data/page_owner.txt" //过滤不必要数据, 空格等
adb shell "/data/page_owner_sort /data/page_owner.txt /data/sorted_page_owner.txt" //计数并排序
adb pull /data/sorted_page_owner.txt
检视分析 sorted_page_owner.txt