You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android设备perf record生成的.data转txt文件为空的原因排查

问题:Android下perf转换.data为.txt时结果不稳定,时常生成空文件

在Android设备上通过串口运行perf工具,追踪power:cpu_capacity和power:cpu_frequency指标,搭配stressapptest做1小时压力测试。但将perf生成的.data文件转为.txt时结果不稳定:有时能得到含有效数据的大文件,有时生成0字节空文件,且该问题并非仅在stressapptest运行时出现。

操作流程

  1. 清理旧文件并后台启动perf和stressapptest:
rm -f STRESS.txt ; rm -f perf_record.data ; rm -f perf_record.txt ; /vendor/sbin/perf record -e power:cpu_capacity,power:cpu_frequency -a -o perf_record.data -v & stressapptest -s 3600 -M 1024 -v 20 -l STRESS.txt  &
  1. stressapptest结束后,终止perf并转换数据:
killall perf ; /vendor/sbin/perf script -i perf_record.data > perf_record.txt

异常现象

  • kill perf时出现特征报错:
[ perf record: Woken up 409 times to write data ]
failed to write feature 2
failed to write feature 8
failed to write feature 9
failed to write feature 14
[ perf record: Captured and wrote 105.746 MB perf_record.data ]
  • .data文件体积正常,但直接执行/vendor/sbin/perf script -i perf_record.data无输出,生成的perf_record.txt为0字节。
  • 执行perf script -D能看到大量原始追踪数据,但无法解读。

可能的原因分析

  • perf进程未被优雅终止,数据写入不完整:
    直接用killall perf会强制终止进程,可能导致perf未完成缓存事件刷写、文件元数据收尾。即使终端显示写入完成,.data文件也可能损坏,导致perf script无法解析。建议改用kill -SIGINT <perf_pid>发送中断信号,让perf正常退出并完成数据写入。

  • perf与内核版本不兼容:
    failed to write feature X报错说明perf尝试写入的部分数据特性未被内核支持,或版本不匹配。特性写入失败会导致.data文件结构异常,perf script无法识别有效事件,最终输出空内容。可检查perf与内核的版本匹配度,或通过参数禁用有问题的特性。

  • 文件系统缓存未同步:
    串口操作下,设备文件系统缓存可能未及时同步到磁盘。即便perf提示写入完成,实际数据仍在内存中,此时perf script读取的是不完整的.data文件。建议kill perf后执行sync命令强制同步缓存,再进行数据转换。

  • 环形缓冲区溢出或采样配置不合理:
    1小时长测试可能导致perf环形缓冲区溢出,或采样配置不当引发数据丢失。虽然.data文件有体积,但内部可能无有效事件记录,或事件格式损坏。可尝试用-m参数调大环形缓冲区,或用-F参数调整采样频率(若适用)。

  • SELinux或权限限制:
    Android的SELinux可能限制perf的事件记录或文件操作,导致.data文件权限异常、事件未被正确记录。可临时执行setenforce 0关闭SELinux测试,或检查perf进程的SELinux上下文是否正常。

内容的提问来源于stack exchange,提问作者SugarCereal191126

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 11:55:31