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

ARM Streamline访问PMU寄存器返回零值问题咨询

根因说明

问题由两类原因共同导致:

  1. PMU硬件资源冲突:从lsof输出可见PID 7545的system_server所属Binder线程已持有perf_event句柄。ARM v8架构单CPU核心的通用PMU硬件计数器仅6-7个,被其他进程占用后gator无法申请到足够的硬件事件组,直接导致部分计数器返回值为0。
  2. 内核配置/设备树适配异常:Streamline返回的No Perf PMUs detected警告,说明当前内核可能未开启perf硬件事件支持,或设备树未正确注册Kryo 680的PMU节点。
排查解决步骤
  • 内核配置校验
    拉取当前设备内核配置,检查关键配置项状态:

    adb shell zcat /proc/config.gz | grep -E "CONFIG_HW_PERF_EVENTS|CONFIG_ARM_PMU|CONFIG_PERF_EVENTS"
    

    正常状态下三个配置项值均为y。若未开启,需重新编译内核打开对应选项后刷入设备,同时确认设备树中包含对应核心的PMU注册节点(Kryo 680基于Arm Cortex-X1/A78/A55公版架构,兼容公版PMU驱动)。

  • 释放被占用的PMU资源

    1. 停止系统默认采集服务:
      adb shell setprop persist.traced.enable 0
      adb shell stop perfetto
      adb shell pkill -f perf
      
    2. 终止占用perf_event的进程:
      adb shell kill -9 7545
      
      注意:PID 7545为system_server进程,终止后系统会自动重启该进程,重启后默认不会自动拉起perf采集逻辑。操作后重新执行lsof|grep perf_event,确认无其他进程持有perf_event句柄。
    3. 关闭干扰内核机制:
      adb shell echo performance > /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
      
      固定CPU频率调度策略为性能模式,避免核心动态调频、热插拔导致计数器读取异常。
  • 替换适配Android 11的gator版本
    Streamline 8.0自带的预编译gator未完全适配Android 11的perf_event接口权限,需从源码编译适配版本:

    1. 编译时开启Android 11适配编译选项
    2. 将编译生成的gator-daemon推送到设备/data/local/tmp目录,授予可执行权限
    3. 启动gator前执行setenforce 0临时关闭SELinux,避免权限拦截导致PMU读取失败。
  • Atrace告警修复
    Unable to locate notify.dex告警不影响PMU计数器采集。若需同时采集atrace数据,将对应版本的notify.dex推送至设备/system/framework/目录,重启设备即可识别。

效果验证

完成上述操作后,先执行以下命令确认硬件PMU事件可正常枚举:

adb shell simpleperf list hw

若命令输出完整的硬件PMU事件列表,且gator运行日志中无perf资源冲突提示,重新启动Streamline采集即可获取正常的非零PMU计数数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 06:39:28