3

如何在某些用户定义的活动期间根据CPU,内存或线程使用情况来测量OS X中kext的性能影响?任何可以从用户土地使用的特定方法工具?或者可以考虑的任何方法/方法?KEXT的性能分析

+2

对那些试图解决这个问题的人来说:关心证明你的“偏离主题”和“过于宽泛”的观点?这不是一个突出的任何深度的主题,所以一个相当广泛的问题似乎是有效的。 – pmdj

回答

2

你已经基本上有2种选择:

  1. 与时间测量你的插入检测KEXT。在您尝试使用mach_absolute_time()进行测量的操作之前和之后进行戳记,使用absolutetime_to_nanoseconds()将其转换为人类可读的单元并采取差异,然后在kext中的某处收集该信息,以便从用户空间中提取该信息。

  2. 采样内核堆栈使用DTrace(iprofiler -kernelstacks -timeprofiler在命令行,或使用Instruments.app)

就个人而言,我已经与前一种方法多了很多成功,但它肯定是更多的工作。大多数kext代码运行得非常简短,以至于采样分析器几乎没有捕获任何正在执行的实例,除非您缩短采样间隔以至于测量开始干扰系统,或者您的kext速度很慢。尽管这样做很容易,所以它通常是一个有效的完整性检查。

您还可以让您的编译器使用计数器(-fprofile-arcs)来测试您的代码,理论上这将允许您将采样统计信息与分支计数器结合起来,以确定每个分支的运行时间。提取这些数据虽然是一种痛苦(0​​可能会有所帮助),并且统计噪声在实践中使我无用。

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

+0

感谢您的指导,我会尝试选项。 – Utkarsh