【问题标题】:Read Performance counter in Mac from terminal从终端读取 Mac 中的性能计数器
【发布时间】:2020-07-27 13:28:59
【问题描述】:

我想知道如何获得 Mac 上的性能监控计数器测量值。使用 Linux,我们 可以使用“perf stat”命令获取测量值。使用 Mac 更难。具体来说,我想知道如何获得 分支错误预测和执行的分支数 从命令行运行的程序,最好不重新编译 该程序。我做了一些谷歌搜索,但我需要的是一个解决方案; 如果你能告诉我你是如何启动终端的,输入一些 命令(也许使用您下载的某些工具),并获得了 对 /bin/ls 的错误预测,那就太好了。

【问题讨论】:

  • 检查 stackoverflow.com/a/61131670/196561 发布 - Mac OS 有 en.wikipedia.org/wiki/Instruments_(software) 来配置应用程序,并且有工具 help.apple.com/instruments/mac/current/#/devb14ffaa5 的 CLI 变体。硬件性能计数器通常具有特权,需要操作系统内核中的特殊驱动程序或帮助程序。仪器 GUI 具有随时间变化的采样和速率视图,支持硬件 PMU 计数器。 robertpieta.com/counters-in-instruments
  • 我认为 Pin 只是用于检测程序,但您如何在 macOS 中使用 pin 读取性能监控计数器寄存器?这将非常有帮助。谢谢
  • 不是英特尔 Pin,而是来自 xcode 的 instruments 工具 - help.apple.com/instruments/mac/current/#/devb14ffaa5。有使用仪器收集性能计数器 (PMU) 的 CLI 变体,但要使用它,您应该首先使用 GUI 选择或创建正确的计数器模板。不确定如何使用 CLI 工具查看收集的数据。只需使用 GUI Instruments help.apple.com/instruments/mac/current
  • 该程序是我不想重新编译的二进制可执行文件。检测它会扰乱分支预测器,所以我需要运行未修改的原始程序
  • parisa,仪器工具,在 GUI 和 CLI 模式下都不需要任何重新编译。它只是命名为“Instruments.app”并且是 Xcode 的一部分(“Xcode,选择 Xcode > Open Developer Tool > Instruments。”),但它适用于大多数模板而无需重新编译。

标签: macos performancecounter perf


【解决方案1】:

用于基于软件事件和硬件事件(性能计数器)进行分析的官方 macOS 工具是 Instruments 工具 - https://help.apple.com/instruments/mac/current/。它似乎是 XCode 开发工具的一部分。

此工具有一些有限的变体可以从命令行模式收集配置文件,请查看https://help.apple.com/instruments/mac/current/#/devb14ffaa5

https://help.apple.com/instruments/mac/current/#/devba105ecc

从命令行启动仪器

您可以使用 open 命令通过终端在 OS X 中启动任何应用程序, 包括乐器。

启动终端(在 /Applications/Utilities/ 中)。

运行以下命令:

open /Applications/Xcode.app/Contents/Applications/Instruments.app

Instruments 应用程序启动。

注意:您还可以使用两个命令行实用程序中的任何一个来分析 一个没有实际显示 Instruments 用户界面的应用程序。

instruments — 此实用程序使用指定模板分析应用程序。结果可以保存到文件中,然后手动打开 在主要的 Instruments 应用程序中进行查看和分析。了解更多, 使用 Instruments 命令行工具转到 Profile。

要获取 IPC 或分支,请使用 GUI 使用计数器使用情况(12)和save it as template 创建配置文件,然后使用 CLI 工具 instruments 收集跟踪数据。跟踪文件可以通过 Instruments GUI 查看;有incomplete attempt to decode that files

https://medium.com/@pavelkucera/counting-branch-mispredictions-on-macos-7397ae8c5b51 页面还列出了在 macOS 上使用硬件计数器的另一个变体,https://github.com/opcm/pcm 项目:

您首先必须构建该工具,然后它很容易使用:

run pmu-query.py
enter “BR_INST_RETIRED.NOT_TAKEN”, the result should be similar to: cpu/umask=0x10,event=0xC4,name=BR_INST_RETIRED.NOT_TAKEN/
run ./pcm-core.x -e event where “event” stands for the result from the previous step

这将为您提供所有正在运行的进程的连续结果。寻找 有关如何在 ./pmc-core.x --help 中分析单个进程的信息

好消息是结果很容易阅读 输出为 csv 文件。坏消息是分析单个进程 仍然包括来自其他进程的活动。

【讨论】:

  • 谢谢,./pmc-core.x 似乎是我想要的。但是我怎样才能只监控一个程序并且在执行期间不中断它进行采样呢?
  • 类似的东西 ./pcm-core.x -- /bin/ls -e cpu/umask=0x10,event=0xC4,name=BR_INST_RETIRED.NOT_TAKEN/ 但我还是不想采样中断程序执行。
  • pcm-core.x of github.com/opcm/pcm/blob/master/pcm-core.cpp 默认情况下不会中断您的程序。使用./pcm-core.x 1,它将每秒中断一次以打印计数器的当前值。
猜你喜欢
  • 2019-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-29
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多