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

Arm64 Cortex-A72平台perf top仅核心0可用问题排查求助

问题:Arm64设备Perf Top仅核心0可用的排查与修复

我使用搭载4核Cortex-A72的Arm64设备,运行4.19.139版本内核,发现perf top仅能在核心0正常工作,具体现象如下:

  1. perf top -C 0可正常运行
  2. perf top -C 1仅显示表头无数据输出(核心1上有程序运行且无报错),示例输出:
PerfTop:       0 irqs/sec  kernel: 0.0%  exact:  0.0% [1000Hz cycles:ppp],  (all, CPU: 1)
-------------------------------------------------------------------------------
  1. 直接执行perf top仅显示核心0的结果
  2. perf top -t [绑定核心1的线程tid]无结果输出
  3. perf top -t [绑定核心0的线程tid]可正常运行

已尝试的操作:

  • 查看kmesg确认armv8_cortex_a72 PMU驱动已加载,输出:hw perfevents: enabled with armv8_cortex_a72 PMU driver, 7 counters available
  • perf stat可正确识别设备4核CPU
  • perf --version显示版本与内核一致,为4.19.139

排查与修复建议

1. 检查核心1的PMU计数器状态

执行以下命令查看每个核心的PMU可用性:

for cpu in 0 1 2 3; do
  echo "CPU $cpu:"
  cat /sys/devices/platform/arm-pmu/cpu$cpu/online
  cat /sys/devices/platform/arm-pmu/cpu$cpu/pmu/available_counters
done

如果核心1的online值为0,说明核心被离线,执行以下命令启用:

echo 1 > /sys/devices/platform/arm-pmu/cpu1/online

2. 验证核心1的PMU中断配置

Perf依赖PMU中断完成采样,检查核心1的中断是否正常注册:

cat /proc/interrupts | grep arm-pmu

确认每个核心对应arm-pmu中断条目,且核心1的中断计数有增长(若核心有负载)。若中断计数为0,尝试重新绑定中断:

# 先获取arm-pmu的中断号,假设为32
echo 1 > /proc/irq/32/smp_affinity_list

3. 核对内核PMU相关编译配置

查看内核配置文件(/boot/config-4.19.139或/proc/config.gz),确认以下选项已开启:

CONFIG_PERF_EVENTS=y
CONFIG_HW_PERF_EVENTS=y
CONFIG_ARM_PMU=y
CONFIG_ARM64_PMU=y
CONFIG_CPU_PM_CPU_IDLE=y # 若核心支持休眠,需确保唤醒后PMU正常工作

若缺少配置,需重新编译内核并启用对应选项。

4. 测试内核补丁或工具版本

4.19.139内核可能存在Arm64多核心PMU的特定bug,可尝试:

  • 升级Perf工具到对应内核分支的最新稳定补丁版本
  • 查找内核社区是否有针对Cortex-A72多核心PMU采样的修复补丁,手动应用后重新编译内核

5. 确认核心1的真实负载

确保绑定到核心1的线程确实在产生负载,用taskset -c 1 dd if=/dev/zero of=/dev/null手动启动高负载程序,再执行perf top -C 1测试是否有数据输出。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 23:40:27