性能分析KEXT

时间:2016-08-08 06:47:30

标签: macos performance-testing kernel-module kernel-extension

如何在某些用户定义的活动中测量OS X中kext在CPU,内存或线程使用方面的性能影响?可以在用户土地上使用的任何特定方法工具?或者可以考虑的任何方法/方法?

1 个答案:

答案 0 :(得分:2)

你基本上有两个选择:

  1. 使用时间测量检测您的kext。在您尝试使用mach_absolute_time()进行测量的操作之前和之后取印章,使用absolutetime_to_nanoseconds()转换为人类可读的单位并获取差异,然后在您的文本中的某处收集该信息从用户空间中提取。

  2. 使用命令行中的dtrace(iprofiler -kernelstacks -timeprofiler或使用Instruments.app)对内核堆栈进行采样

  3. 就个人而言,我使用前一种方法取得了很大的成功,尽管它肯定更有效。大多数kext代码运行得如此短暂,以至于采样分析器几乎不会捕获它执行的任何实例,除非您减少采样间隔到目前为止测量开始干扰系统,或者您的kext非常慢。这很容易做到,所以它通常是一个有效的理智检查。

    您还可以让编译器使用计数器(-fprofile-arcs)来检测代码,理论上这将允许您将采样统计信息与分支计数器结合起来,以确定每个分支的运行时间。提取这些数据虽然很痛苦(my code可能有所帮助),但统计噪音再次使我在实践中无用。

    显式方法还允许您测量异步操作等,但当然也会带来一些内在的开销。安全地积累数据也有点棘手。 (我使用原子操作,但你也可以使用自旋锁。不要忘记不只是测量均值,还要考虑标准偏差和最小/最大时间。)提取数据可能会很麻烦,因为你必须添加一个用户空间界面为你的kext。但它绝对值得!