macos - 性能分析 KEXT

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

在某些用户定义的事件期间,如何在 CPU、内存或线程使用方面衡量 OS X 中 kext 的性能影响?任何可以从用户空间使用的特定方法工具?或任何可以考虑的方法/方法?

最佳答案

您基本上有两个选择:

  • 用时间测量来检测你的 kext。使用 mach_absolute_time() 在您尝试测量的操作前后取邮票, 使用 absolutetime_to_nanoseconds() 转换为人类可读的单位并采取差异,然后在您的 kext 中的某个位置收集该信息,以便从用户空间中提取该信息。
  • 使用 dtrace 采样内核堆栈(来自命令行的 iprofiler -kernelstacks -timeprofiler,或使用 Instruments.app)

  • 就个人而言,我使用前一种方法取得了更大的成功,尽管它肯定需要更多的工作。大多数 kext 代码运行时间很短,以至于采样分析器几乎无法捕捉到它执行的任何实例,除非您将采样间隔减少到测量开始干扰系统的程度,或者您的 kext 非常慢。不过这很容易做到,所以它通常是一个有效的健全性检查。

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

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

    关于macos - 性能分析 KEXT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38822802/

    相关文章:

    c - 在Linux AUART内核驱动中,如何使用I2C GPIO扩展器的管脚代替RTS来控制RS485方向?

    macos - <tab> v. Emacs 中的 TAB

    c++ - 加载、裁剪和保存 jpg C++

    python - Django 中的性能、负载和压力测试

    c++ - 如何分析 Lambda 函数性能?

    linux - 如何调用写入 proc 文件的内核模块?

    ios - dylib 或可执行导出列表

    windows - 您如何支持 Mac 和 PC 的 Gradle Exec 任务?

    wcf - 使用 JMeter 对 WCF Web 服务进行性能测试?