在某些用户定义的事件期间,如何在 CPU、内存或线程使用方面衡量 OS X 中 kext 的性能影响?任何可以从用户空间使用的特定方法工具?或任何可以考虑的方法/方法?
最佳答案
您基本上有两个选择:
mach_absolute_time()
在您尝试测量的操作前后取邮票, 使用 absolutetime_to_nanoseconds()
转换为人类可读的单位并采取差异,然后在您的 kext 中的某个位置收集该信息,以便从用户空间中提取该信息。 iprofiler -kernelstacks -timeprofiler
,或使用 Instruments.app)就个人而言,我使用前一种方法取得了更大的成功,尽管它肯定需要更多的工作。大多数 kext 代码运行时间很短,以至于采样分析器几乎无法捕捉到它执行的任何实例,除非您将采样间隔减少到测量开始干扰系统的程度,或者您的 kext 非常慢。不过这很容易做到,所以它通常是一个有效的健全性检查。
您还可以让您的编译器使用计数器 (
-fprofile-arcs
) 来检测您的代码,理论上这将允许您将采样统计信息与分支计数器结合起来,以确定每个分支的运行时间。虽然提取这些数据很痛苦(my code 可能会有所帮助),而且统计噪声在实践中对我来说毫无用处。显式方法还允许您测量异步操作等,但当然也带有一些内在开销。安全地累积数据也有点棘手。 (我使用原子操作,但您也可以使用自旋锁。不要忘记不仅要测量均值,还要测量标准偏差和最小/最大次数。)提取数据可能很痛苦,因为您必须添加用户空间界面到你的kext。但这绝对是值得的!
关于macos - 性能分析 KEXT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38822802/