在不使用Instruments的情况下记录OS X上的性能监视器计数器(PM事件)的值

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

screenshot of Counters tool in Instruments

这类似于Linux 2.6.32中引入的Linux系统调用perf_event_open。在Linux上,我可以使用perf_event_open在我感兴趣的代码部分周围启动/停止分析。我想以自动化的方式记录OS X上相同类型的统计信息:计算某个代码段所需的指令(等等),并得到结果。(我不想使用Instruments GUI来分析数据。)
是否有任何API允许此操作(例如使用dtrace或类似工具)?从一些搜索结果来看,私有的AppleProfileFamily.framework可能具有必要的钩子,但如何链接或使用它尚不清楚。

1
这里的一个潜在解决方案是使用Intel PMC kext公开此信息(http://www.campos.cc/blog/2014/03/15/using-intel-performance-monitor-on-mac-os-x),但它似乎不提供每个进程的信息,只提供总计,这对我来说不太有用。 - Sophie Alpert
4
苹果工程师Kris Markel在Twitter上说:“目前没有任何可用的东西。 请通过bugreport.apple.com提交增强请求。”(https://twitter.com/existopher/status/644943616889126912) - Sophie Alpert
PAPI可以在OS X上编译。不幸的是,该平台不支持硬件计数器,只支持软件事件。这使得它的实用性大大降低。 - Sjlver
1个回答

1
在GNU/Linux中,我使用Intel的PCM来监控CPU利用率。我不确定这在OSX上是否有效,但据我所知,源代码包括MacMSRDriver目录。我没有任何OSX设备,无论如何都没有测试过。
如果此源代码在您的设备上编译,只需运行: pcm.x -r -- your_program your_program_parameter 或者,如果您想要高级分析,请使用pcm-core.x代替,或者您可以基于pcm-core.cpp构建自己的代码。

我在原问题的评论中指出,PMC kext似乎没有提供每个进程的信息。如果我漏掉了什么,请告诉我。 - Sophie Alpert
我从来没有使用过PMC kext。顺便说一句,我在这里提到的不是PMC,而是英特尔的PCM。您可以在https://software.intel.com/en-us/articles/intel-performance-counter-monitor找到文档。 - Max Rafiandy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接