代码之家  ›  专栏  ›  技术社区  ›  kizzx2

如何在XPerf中定位空闲时间(和网络IO时间等)?

  •  3
  • kizzx2  · 技术社区  · 15 年前

    假设我有一个精心设计的程序:

    #include <Windows.h>
    
    void useless_function()
    {
        Sleep(5000);
    }
    
    void useful_function()
    {
        // ... do some work
        useless_function();
        // ... do some more work
    }
    
    int main()
    {
        useful_function();
        return 0;
    }
    

    客观的 :我想让档案员告诉我 useful_function() useless_function() WaitForMultipleObjects() 似乎是 Idle.exe 而不是我自己的程序。

    下面是我当前运行的xperf命令行:

    xperf -on Latency -stackwalk Profile
    

    有什么想法吗?

    (这不限于等待函数。通过在 NtWaitForMultipleObjects

    3 回复  |  直到 15 年前
        1
  •  2
  •   Thomas Kejser    14 年前

    我想你要找的是 使用就绪线程进行等待分析

    该功能使用起来有点模糊。但幸运的是,这里描述得很好:

    Use Xperf's Wait Analysis for Application-Performance Troubleshooting

        2
  •  1
  •   Bruce Dawson    11 年前

    • 记录CSWITCH提供程序,以获取所有上下文开关
    • 通过将+CSWITCH添加到-stackwalk参数,记录上下文开关上的调用堆栈
    • 通过在-stackwalk中添加+READYTHREAD,可能会在ready线程上记录调用堆栈,以获得关于谁准备好了您(即,谁释放了互斥、CS或信号量以及在哪里)的更多信息

    然后使用WPA(或XPerView,但这是古老的)中的CPU使用率(精确值)查看上下文切换,并找到不应该空闲的线程上的TimesInclast高的位置。您通常希望CPU使用率(精确)中的列按以下顺序排列:

    • 新建流程(正在切换您的流程)
    • 新线程堆栈
    • ReadyingProcess(是谁让您的线程准备好运行的)
    • ReadingThreadId(可选)
    • ReadyThreadStack(可选,需要+ReadyThread on-stackwalk)
    • 橙色条
    • 计数
    • 你想要什么其他专栏

    有关详细信息,请参阅我的博客中的以下特定文章: - https://randomascii.wordpress.com/2014/08/19/etw-training-videos-available-now/ https://randomascii.wordpress.com/2012/06/19/wpaxperf-trace-analysis-reimagined/

        3
  •  0
  •   Mike Dunlavey    15 年前

    这个“分析器”会告诉你-只是随机暂停几次,然后查看堆栈。如果 do some work do some more work 需要5秒,那么堆栈有33%的时间是这样的

    main: calling useful_function
    useful_function: calling useless_function
    useless_function: calling Sleep
    

    因此,大约33%的堆栈样本将准确显示这一点。任何花费挂钟时间一小部分的代码行都将大致出现在该部分样本上。

    在剩下的样本中,您将看到它在做其他事情。

    Zoom LTProf ,尽管他们实际上没有给你看样品。

    我看了看报纸 博士,试图弄清楚你们是否可以在墙上时钟时间获得堆栈样本,并在行级分辨率下获得百分比。看来你一定是在Windows7或Vista上。他们只关心函数,而不是线,如果你有实际的大函数,这是很重要的。我想不出如何获取这些样本,我认为这对于查看这些样本很重要 该计划正在花费时间。