Windows 当ETW图与CPU使用率不一致时,如何解释ETW图以获得采样和精确的CPU使用率

Windows 当ETW图与CPU使用率不一致时,如何解释ETW图以获得采样和精确的CPU使用率,windows,performance,etw,xperf,Windows,Performance,Etw,Xperf,我很难确定我们的应用程序在哪里花费时间 从采样的ETW轨迹火焰图和精确的CPU使用情况来看,它们相互矛盾。以下是持续1秒的图表 根据“CPU使用率(采样)”图 vbscript.dll!COleScript::ParseScriptText是总体性能中的一大贡献者 ws2_32.dll!recv是一个小贡献者 根据“CPU使用率(精确)”图表 本质上,这表明它是另一种方式 vbscript.dll!COleScript::ParseScriptText是一个小型贡献者,只占用3.95毫秒的CPU

我很难确定我们的应用程序在哪里花费时间

从采样的ETW轨迹火焰图和精确的CPU使用情况来看,它们相互矛盾。以下是持续1秒的图表

根据“CPU使用率(采样)”图
  • vbscript.dll!COleScript::ParseScriptText
    是总体性能中的一大贡献者
  • ws2_32.dll!recv是一个小贡献者
  • 根据“CPU使用率(精确)”图表 本质上,这表明它是另一种方式

  • vbscript.dll!COleScript::ParseScriptText
    是一个小型贡献者,只占用3.95毫秒的CPU
  • ws2_32.dll!recv是一个很大的贡献者,占用了915,09毫秒的CPU
  • 我遗漏了什么或误解了什么?


    CPU使用率(采样)


    CPU使用率(精确)


    有一个简单的解释:

    CPU使用率(精确)是基于上下文切换数据的,因此它可以非常精确地度量线程在CPU上花费的时间-它正在运行的时间。然而,因为它是基于上下文开关数据的,所以它只知道当线程打开/关闭CPU时调用堆栈是什么。它不知道在这两者之间它在做什么。因此,CPU使用率(精确)数据知道线程使用了多少时间,但不知道这些时间花在哪里

    CPU使用率(采样)在线程消耗多少CPU时间方面不太准确,但它在告诉您时间花在哪里方面非常好(从统计上讲,没有系统偏差)

    对于CPU使用率(采样),为了正确解释数据,您仍然需要注意包含时间与独占时间(在函数中花费的时间与在其子体中花费的时间),但听起来数据就是您想要的


    有关更多详细信息,请参阅其中包含这两个表的所有列的文档,以及使用这两个表的案例研究(一个用于调查CPU使用情况,另一个用于调查CPU空闲情况)

    有一个简单的解释:

    CPU使用率(精确)是基于上下文切换数据的,因此它可以非常精确地度量线程在CPU上花费的时间-它正在运行的时间。然而,因为它是基于上下文开关数据的,所以它只知道当线程打开/关闭CPU时调用堆栈是什么。它不知道在这两者之间它在做什么。因此,CPU使用率(精确)数据知道线程使用了多少时间,但不知道这些时间花在哪里

    CPU使用率(采样)在线程消耗多少CPU时间方面不太准确,但它在告诉您时间花在哪里方面非常好(从统计上讲,没有系统偏差)

    对于CPU使用率(采样),为了正确解释数据,您仍然需要注意包含时间与独占时间(在函数中花费的时间与在其子体中花费的时间),但听起来数据就是您想要的


    有关更多详细信息,请参阅其中包含这两个表的所有列的文档,以及使用这两个表的案例研究(一个用于调查CPU使用情况,另一个用于调查CPU空闲情况)

    etw central是我与任何etw相关的目标,但我仍然存在forrest/trees问题。非常感谢您的澄清,非常感谢。etw-central是我处理任何与etw相关的问题的转到,但我仍然有forrest/trees问题。谢谢你把事情弄清楚,非常感谢。