Macos OSX中的性能计数器API

Macos OSX中的性能计数器API,macos,performance,instruments,Macos,Performance,Instruments,Instruments和iprofiler都能够使用性能计数器(PMC)来监视应用程序性能。但是,我想知道是否存在从应用程序访问PMC的API。在Linux中,这可以通过调用sys\u perf\u event\u open,然后读取syscall返回的文件描述符来完成。或者,也可以使用 对于OSX,我已经找到了。不幸的是,它需要安装内核模块。该模块没有签名,因此为最终用户加载它可能并不简单 考虑到Instruments和iprofiler实际上都可以访问PMCs(无需安装任何内核模块),我想知

Instruments和iprofiler都能够使用性能计数器(PMC)来监视应用程序性能。但是,我想知道是否存在从应用程序访问PMC的API。在Linux中,这可以通过调用
sys\u perf\u event\u open
,然后读取syscall返回的文件描述符来完成。或者,也可以使用

对于OSX,我已经找到了。不幸的是,它需要安装内核模块。该模块没有签名,因此为最终用户加载它可能并不简单


考虑到Instruments和iprofiler实际上都可以访问PMCs(无需安装任何内核模块),我想知道是否有一些(未列出的)API可以访问PMCs。

我不知道有任何官方API或预制库,但RDMSR和RDTSC是一种安全关键操作码,因此仅限于环0,因此,您需要编写一个OSX内核模块来公开它。只需注意,将此类模块包含在最终用户应用程序中会导致安全隐患。因此,苹果和英特尔避免提供一个简单的“此处输入管理员密码”访问,我并不感到惊讶。

我认为,在某些新硬件上,RDTSC(读取时间戳)的可能副本可以限制为0,但从历史上看,它可以在任何模式下工作。高精度计时不是安全关键(除了作为Spectre端通道的一部分,因此浏览器通常会对客户端JS禁用它)。如果MacOS默认阻止用户空间使用RDTSC,我会感到惊讶。(RDMSR始终仅限于内核)。RDPMC(读取性能计数器)通常具有特权,但内核可以将其设置为可从用户空间使用。