【问题标题】:Performance Counters API in OS XOS X 中的性能计数器 API
【发布时间】:2017-01-11 10:19:05
【问题描述】:

Instruments 和 iprofiler 都能够使用性能计数器 (PMC) 来监控应用程序性能。但是,我想知道是否有从应用程序访问 PMC 的 API。在 Linux 中,这可以通过调用sys_perf_event_open 来完成,然后从系统调用返回的文件描述符中读取。或者,也可以使用libpfm

对于 OS X,我找到了Intel Performance Counter Monitor。不幸的是,它需要安装内核模块。该模块未签名,因此为最终用户加载它可能并不简单。

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

【问题讨论】:

标签: macos performance instruments


【解决方案1】:

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

【讨论】:

  • RDTSC(读取时间戳)可以在我认为的一些新硬件上限制为 ring 0,但从历史上看,它可以在任何模式下工作。高精度计时不是安全关键(除了作为 Spectre 侧通道的一部分,因此浏览器经常为客户端 JS 禁用它)。如果 MacOS 默认停止用户空间使用 RDTSC,我会感到惊讶。 (RDMSR 始终是仅限内核的)。 RDPMC(读取性能计数器)通常具有特权,但内核可以将其设置为可从用户空间使用。
猜你喜欢
  • 2012-10-16
  • 2015-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-01
  • 1970-01-01
  • 2023-03-03
相关资源
最近更新 更多