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

远程捕获perf record数据跨设备运行perf report报bad event header size错误求解

问题根因

perf默认写入常规文件时,会在采样结束后回写文件头中的总数据量、事件校验等元数据字段。而管道/FIFO是仅追加的顺序IO,无法支持随机回写,导致perf生成的文件头不完整,触发bad event header size报错。你之前将FIFO作为输出路径时,perf仍将其识别为常规随机写文件,没有适配流式输出逻辑,所以无论用什么透明传输通道都会报错。

解决方案
  • 使用perf原生管道输出模式
    不要在设备端创建FIFO,直接指定perf输出到标准输出,perf会自动适配流式场景,生成无需回写的合法格式。
    桌面端直接拉取数据流并保存的命令:
    ssh <设备地址> 'perf trace -e cpu-clock -g <app> -o -' > perf.data
    也可以直接管道传给perf report实时解析:
    ssh <设备地址> 'perf trace -e cpu-clock -g <app> -o -' | qemu-arm-static -L root root/usr/bin/perf report -i -
    其中-o -参数是让perf输出到stdout,-i -是让perf report从stdin读取数据。

  • 配置符号解析参数
    你已持有带调试信息的根文件系统和内核文件,解析时添加以下参数即可正常匹配符号:

    • --symfs <带调试信息的根文件系统目录路径>:指定用户态程序的符号查找根目录
    • --vmlinux <带调试信息的内核镜像路径>:指定内核符号文件
    • --kallsyms <设备导出的/proc/kallsyms文件路径>:如果没有带调试信息的vmlinux,可替换为该参数
      示例完整解析命令:
      qemu-arm-static -L root root/usr/bin/perf report -i perf.data --symfs ./debug-root --vmlinux ./vmlinux
  • 版本匹配校验
    确保设备端的perf版本和qemu中运行的perf版本完全一致,大版本差异也会导致事件头格式不兼容报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 00:48:02