dtrace

dtrace 是一个功能强大的 Mac OS X 内核检测系统,可用于分析唤醒事件。本文对其进行了简单的介绍。

::: 注意:如果您还没有阅读功耗分析概述,建议您先阅读。它可能会使本文档的某些部分更容易理解。::

调用

dtrace 必须以超级用户身份调用。用于分析唤醒事件的良好起始命令如下所示。

sudo dtrace -n 'mach_kernel::wakeup { @[ustack()] = count(); }' -p $FIREFOX_PID > $OUTPUT_FILE

让我们进一步分解它。

  • -n 选项与 mach_kernel::wakeup 结合使用,选择了一个探测点mach_kernel模块名称wakeup探测名称。您可以通过运行 sudo dtrace -l 查看探测点的完整列表。

  • 花括号之间的代码在探测点命中时运行。以上代码在唤醒发生时计算唯一堆栈跟踪;ustack 是“用户堆栈”的缩写,即正在执行的用户空间程序的堆栈。

运行该命令几秒钟,然后按 [Ctrl]{.kbd} + [C]{.kbd} 中断它。dtrace 然后会将多个堆栈跟踪打印到输出文件,以及每个堆栈跟踪的唤醒次数。堆栈跟踪的顺序可能不明显,因此请仔细查看它们。

有时堆栈跟踪的信息比预期少。目前尚不清楚如何改进这一点。

另请参阅

dtrace 非常强大,您可以通过查阅以下资源了解更多信息。