【问题标题】:Record values of Performance Monitor Counters (PM events) on OS X without Instruments在没有仪器的 OS X 上记录性能监视器计数器(PM 事件)的值
【发布时间】:2015-12-08 18:53:38
【问题描述】:

在 Xcode 的 Instruments 中有一个名为 Counters 的工具,它公开了 CPU 提供的低级计数器信息,例如执行的指令数或缓存未命中数:

这类似于 Linux 2.6.32 中引入的 Linux 系统调用 perf_event_open。在 Linux 上,我可以使用 perf_event_open 然后围绕我感兴趣的代码部分开始/停止分析。我想在 OS X 上记录相同类型的统计信息:计算指令(等)某些代码需要,并以自动方式获得结果。 (我不想使用 Instruments GUI 来分析数据。)

是否有任何 API 允许这样做(例如:使用 dtrace 或类似的)?从一些搜索来看,私有 AppleProfileFamily.framework 可能有必要的钩子,但不清楚如何链接或使用它。

【问题讨论】:

  • 这里一个可能的解决方案是使用英特尔 PMC kext 公开此信息 (campos.cc/blog/2014/03/15/…),但它似乎不提供每个进程的信息,只提供总计,这不太有用对我来说。
  • 苹果工程师 Kris Markel 在 Twitter 上说:“目前没有可用的东西。请通过 bugreport.apple.com 提交增强请求。” (twitter.com/existopher/status/644943616889126912)
  • PAPI can be compiled on OS X。不幸的是,此平台不支持硬件计数器,仅支持软件事件。这使得它的用处大大降低。

标签: macos profiling instruments


【解决方案1】:

在 GNU/Linux 中,我使用 Intel 的 PCM 来监控 CPU 利用率。我不确定这在 OSX 上是否可以正常工作,但据我所知,源代码包括 MacMSRDriver 目录。我没有任何 OSX 设备,无论如何都不要测试它。

如果此源代码在您的设备上编译,只需运行:

pcm.x -r -- your_program your_program_parameter

或者如果您想要高级分析,请改用pcm-core.x,或者您可以基于pcm-core.cpp构建自己的代码

【讨论】:

  • 我在 cmets 中对我最初的问题指出 PMC kext 似乎没有提供每个进程的信息。如果我遗漏了什么,请告诉我。
  • 我从不使用 PMC kext。顺便说一句,我在这里提到的不是 PMC,而是英特尔的 PCM。你可以在software.intel.com/en-us/articles/…查看文档
猜你喜欢
  • 1970-01-01
  • 2017-01-11
  • 1970-01-01
  • 2012-10-03
  • 1970-01-01
  • 1970-01-01
  • 2016-12-04
  • 1970-01-01
  • 2016-07-12
相关资源
最近更新 更多