Android中如何测量应用在Page Cache层的执行时间?
测量Android应用在Page Cache层的执行时间
一、简化版fTrace操作(聚焦目标进程与事件)
fTrace日志复杂是因为默认会抓取所有进程的全量事件,通过过滤可以大幅简化:
- 先挂载tracefs(部分设备可能已自动挂载):
adb shell mount -t tracefs nodev /sys/kernel/tracing - 启用Page Cache核心相关事件:
adb shell echo 1 > /sys/kernel/tracing/events/mm_page_alloc/enable adb shell echo 1 > /sys/kernel/tracing/events/mm_page_free/enable adb shell echo 1 > /sys/kernel/tracing/events/filemap/enable - 锁定目标应用进程,先获取应用PID:
将获取到的PID写入过滤规则:adb shell pidof com.your.app.packageadb shell echo <你的应用PID> > /sys/kernel/tracing/set_ftrace_pid - 启动/停止追踪并导出日志:
导出的日志中每个事件都带时间戳,可直接计算同一操作的起止时间差。# 开始追踪 adb shell echo 1 > /sys/kernel/tracing/tracing_on # 操作你的应用,触发Page Cache相关逻辑 # 停止追踪 adb shell echo 0 > /sys/kernel/tracing/tracing_on # 导出仅目标进程的日志 adb shell cat /sys/kernel/tracing/trace | grep <你的应用PID>
二、Systrace可视化追踪(新手友好)
Systrace将内核trace数据转化为可视化时间线,无需直接分析原始日志:
- 确保设备开启USB调试,执行以下命令(需提前配置好Android SDK的systrace环境):
其中python3 systrace.py -t 10 -a com.your.app.package memory-t 10表示追踪10秒,-a指定目标应用包名,memory过滤内存相关事件(包含Page Cache操作)。 - 追踪结束后会生成HTML文件,用浏览器打开后,搜索
pagecache或filemap即可定位相关事件,鼠标悬停可查看时间戳,直接计算耗时。
三、Perfetto官方工具(更直观的现代方案)
Perfetto是Android推荐的新一代性能分析工具,对Page Cache的追踪做了优化:
- 打开设备「开发者选项」→「系统追踪」
- 勾选「内存」分类下的「文件页缓存」相关选项,指定目标应用包名
- 点击「开始追踪」,操作应用后点击「停止」,导出追踪文件
- 用Perfetto界面加载文件,筛选
page_cache相关事件,可直观查看时间线、事件耗时及关联流程
内容的提问来源于stack exchange,提问作者Shazer
相关产品推荐
相关产品推荐

