page owner用于跟蹤每個頁面的分配者。
可以用來調試內存泄漏或查找內存黑洞(uncount memory)。
當分配發(fā)生時,有關分配的信息(如調用堆棧和頁面順序)存儲在每個頁面的特定存儲中。
當我們需要了解所有頁面的狀態(tài)時,我們可以獲取并分析這些信息。
- 使用方法
- 通過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 并檢查內核社區(qū)提供了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