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