gpt4 book ai didi

windows - XPerf中如何定位空闲时间(以及网络IO时间等)?

转载 作者:可可西里 更新时间:2023-11-01 09:26:24 26 4
gpt4 key购买 nike

假设我有一个人为设计的程序:

#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(),它没有明显的等待原因。在 XPerf 下,这不会出现在我的任何图表中,因为对 WaitForMultipleObjects() 的调用似乎被计入了 Idle.exe 而不是我自己的程序.

这是我当前运行的 xperf 命令行:

xperf -on Latency -stackwalk Profile

有什么想法吗?

(这不限于等待函数。上面的问题可能已经通过在 NtWaitForMultipleObjects 处放置断点来解决。理想情况下,可以有一种方法来查看占用大量的堆栈示例挂钟时间而不仅仅是 CPU 时间)

最佳答案

我认为您正在寻找的是 Xperf 中的使用就绪线程进行等待分析功能。它捕获每个上下文切换,并在线程从 sleep (或其他阻塞操作)唤醒后为您提供线程的调用堆栈。在您的情况下,您会在调用 sleep(5000) 之后看到堆栈以及 sleep 时间。

该功能使用起来有点晦涩。但幸运的是这里有很好的描述:

Use Xperf's Wait Analysis for Application-Performance Troubleshooting

关于windows - XPerf中如何定位空闲时间(以及网络IO时间等)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4174204/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com