【问题标题】:Does Android(on ARM) have the hardware performance counters?Android(在 ARM 上)是否有硬件性能计数器?
【发布时间】:2012-11-23 15:52:45
【问题描述】:

因此,就像在英特尔处理器上的 Linux 中一样,我们有大量的硬件性能计数器可供访问。像以前一样,使用名为perfmon2 的用户空间软件,我可以获得缓存未命中率、由于某种原因(例如,L1 缓存未命中)导致的 CPU 停顿周期等值。

我的问题是,我们在 Android 中有这些东西吗?由于它基于 ARM,我认为我们没有像 x86 那样强大的性能监视器计数器支持,对吧?

【问题讨论】:

    标签: android performance monitor


    【解决方案1】:

    我觉得你可以试试ARM® HWCPipe Exporter

    ARM® HWCPipe Exporter 是一个用 Java 和 C++ 编写的 Prometheus 导出器,它从运行在 ARM® 硬件组件上的 Android 设备检索指标并将其导出到 Prometheus 监控系统。

    免责声明:我是 ARM HWCPipe Exporter 的作者。

    【讨论】:

      【解决方案2】:

      除了本尼的回答,我再补充一下:

      1. linux-tools-perf 项目与 AOSP 集成(我使用的是 4.2)。它位于 $AOSP/external/linux-tools-perf 下。 ./linux-tools-perf/Documentation 包含大量关于如何运行所有内容的信息。 perf 工具作为 AOSP 的一部分内置在 $PRODUCT_OUT/system/bin/perf 中,但未打包;您需要将其显式推送到目标。

      2. 检查 Android (linux) 内核以确认它支持 PM:PERF_EVENTS。谷歌如何获取 .config 但最简单的是运行“extract-ikconfig zImage”。

      3. 需要对目标具有 root 访问权限,然后运行“./perf stat -- testprog1”之类的命令来查看结果。记录/检索不同 PM 计数器的命令有很多参数。

      4. 请记住,大多数 ARM 实现都有多个内核和大量流水线。 Cortex-A9 有乱序执行。所以这些数字可能有点奇怪——有时几乎毫无意义。

      5. 我偶尔使用 ARM PMCCNTR 寄存器,即 ARM PM 周期计数器来测试代码性能。 PMUSERENR.EN 和 PMINTENCLR.C 必须设置为 PL1+ 级别,然后 PMCCNTR 可以在 PL0 级别进行管理。请参阅 ARM ARM 了解这一切的含义以及 perf 子系统的用法示例!

      注意:所有的 shell 变量都在 $AOSP/build/envsetup.sh 中设置

      【讨论】:

      • 我同意。最好的方法是从 sysfs 为内核供电(如果测量 unicore 性能/单线程)并使用空闲系统设置测试 2-3 次,然后运行您的测试。这应该会提供更好、更真实的画面。
      • linux-tools-perf 现在重命名为 Simpleperf 并移至 platform/ system/extras 下(文档 herehere)。
      【解决方案3】:

      ARM11 和 Cortex-A/R 确实有硬件性能计数器。您可以在此页面上的 ARM 官方网站上查看:http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.faqs/ka4237.html

      由于 Android 也在 Linux 之上运行,因此您可以通过“Perf Events”子系统通过用户空间软件访问性能计数器。但是,您将需要编写包含“perf_event.h”的本机 C 代码并使用 Android NDK 构建它。在你开始写代码之前,我建议你看看这个项目:platform/external/linux-tools-perf (https://android.googlesource.com/platform/external/linux-tools-perf/),它可能正是你要找的。我不知道任何允许直接从 Java 代码执行此操作的替代方法。

      【讨论】:

      • 到 KA4237.html 的链接已经断开。
      猜你喜欢
      • 1970-01-01
      • 2011-05-07
      • 2011-10-29
      • 1970-01-01
      • 2014-02-06
      • 2012-11-08
      • 2020-05-19
      • 1970-01-01
      • 2015-03-24
      相关资源
      最近更新 更多