当 ETW 图相互矛盾时,如何解释它们的简单和精确 CPU 用法
How to interprete ETW graphs for sampled and precise CPU usage when they contradict
我很难确定我们的应用程序将时间花在哪里。
查看采样的 ETW 跟踪的火焰图和精确的 CPU 用法,它们相互矛盾。以下是持续时间为 1 秒的图表
根据"CPU Usage (Sampled)"图表
vbscript.dll!COleScript::ParseScriptText
是总绩效的 大 贡献者。
ws2_32.dll!recv
是小贡献者。
根据"CPU Usage (Precise)"图表
从本质上讲,这表明它是相反的?
vbscript.dll!COleScript::ParseScriptText
是一个 小 贡献者,仅占用 3.95 毫秒的 CPU.
ws2_32.dll!recv
是一个很大的贡献者,占用了 CPU. 的 915,09 毫秒
我遗漏了什么或误解了什么?
CPU 用法(采样)
CPU 用法(精确)
有一个简单的解释:
CPU Usage (Precise) 基于上下文切换数据,因此它可以非常准确地衡量线程在 -CPU 上花费了多少时间 - 运行。然而,因为它基于上下文切换数据,所以它只知道线程进入 on/off CPU 时调用堆栈是什么。它不知道自己在做什么。因此,CPU 使用(精确)数据知道一个线程使用了多少多少 时间,但它不知道哪里 花费了时间.
CPU Usage (Sampled) 在线程消耗多少 CPU 时间方面不太准确,但它很好(从统计学上讲,没有系统偏差)告诉你时间在哪里花完了。
使用 CPU Usage (Sampled) 你仍然需要注意包含时间和独占时间(花在一个函数上的时间和花在它的后代上的时间)以便正确解释数据,但它听起来像那个数据是你想要的
有关详细信息,请参阅 https://randomascii.wordpress.com/2015/09/24/etw-central/,其中包含这两个表的所有列的文档,以及使用它们的案例研究(一个用于调查 CPU 使用场景,另一个调查 CPU 个闲置场景)
我很难确定我们的应用程序将时间花在哪里。
查看采样的 ETW 跟踪的火焰图和精确的 CPU 用法,它们相互矛盾。以下是持续时间为 1 秒的图表
根据"CPU Usage (Sampled)"图表
vbscript.dll!COleScript::ParseScriptText
是总绩效的 大 贡献者。ws2_32.dll!recv
是小贡献者。
根据"CPU Usage (Precise)"图表
从本质上讲,这表明它是相反的?
vbscript.dll!COleScript::ParseScriptText
是一个 小 贡献者,仅占用 3.95 毫秒的 CPU.ws2_32.dll!recv
是一个很大的贡献者,占用了 CPU. 的 915,09 毫秒
我遗漏了什么或误解了什么?
CPU 用法(采样)
CPU 用法(精确)
有一个简单的解释:
CPU Usage (Precise) 基于上下文切换数据,因此它可以非常准确地衡量线程在 -CPU 上花费了多少时间 - 运行。然而,因为它基于上下文切换数据,所以它只知道线程进入 on/off CPU 时调用堆栈是什么。它不知道自己在做什么。因此,CPU 使用(精确)数据知道一个线程使用了多少多少 时间,但它不知道哪里 花费了时间.
CPU Usage (Sampled) 在线程消耗多少 CPU 时间方面不太准确,但它很好(从统计学上讲,没有系统偏差)告诉你时间在哪里花完了。
使用 CPU Usage (Sampled) 你仍然需要注意包含时间和独占时间(花在一个函数上的时间和花在它的后代上的时间)以便正确解释数据,但它听起来像那个数据是你想要的
有关详细信息,请参阅 https://randomascii.wordpress.com/2015/09/24/etw-central/,其中包含这两个表的所有列的文档,以及使用它们的案例研究(一个用于调查 CPU 使用场景,另一个调查 CPU 个闲置场景)