问题标签 [xperf]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
825 浏览

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

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

目标:我希望分析器告诉我useful_function()是不必要的调用useless_function()等待没有明显的原因。在 XPerf 下,这不会出现在我拥有的任何图表中,因为WaitForMultipleObjects()似乎是调用 toIdle.exe而不是我自己的程序。

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

有任何想法吗?

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

0 投票
3 回答
3545 浏览

windows - 使用 wevtutil 安装 WPT 清单时出现问题

我正在尝试将性能计数器和自定义事件添加到一个软件中,以便我可以使用 Windows Performance Toolkit 程序(例如 XPerf 和 GPUView)查看这些。我将使用我所有的克制力量避免对软件文档的状态以及我现在浪费在试图从网络上挑逗线索的时间进行宣泄咆哮。我将描述我如何到达现在的位置,以防万一这对其他迷失的灵魂有用。

到目前为止,我已经收集到我必须为我的性能计数器和事件编写一个事件清单。您可以手动或使用名为“ ecmangen.exe ”的工具来完成此操作。该程序的文档为事件创建清单提供了一个很好的分步指南,但没有解释如何将这些与您的代码集成。

据我所知,下一步是使用两个神秘的命令行应用程序“ MC.exe ”和“ CTRPP.exe ”。这些似乎会生成 C 或 C# 头文件、源文件和资源文件,分别用于将事件和计数器检测添加到您的代码中。接下来,您必须构建您的代码(查看 'C:\Program Files\Microsoft SDKs\Windows\v7.1\Samples\winbase\Eventing' 中的示例),然后我们来到我目前遇到的问题:正确使用下一个神秘工具“ wevtutil.exe

该工具需要两件事:您使用其中的资源编译的二进制文件(exe 或 DLL)以及用于生成这些资源的清单文件。我遇到的麻烦是它对二进制文件的位置非常挑剔,我一直无法确定这种挑剔的形式。咒语和山羊牺牲没有产生任何结果。

如果我在清单文件中的 'provider' 标记的 'resourceFileName' 字段中定义了一个路径,例如 'c:\MYDIR\TEd.exe',那就没问题了。但是,如果我将相同的 exe 放在不同的文件夹中(失败的是 C:\tw\TEd.exe),它会报错。

给出的错误消息是“警告:无法访问发布者 TEd-Event-Provider 资源。” 但没有更多解释为什么或它试图寻找的地方。

那么,我是否打算以错误的方式添加检测,是否已经有一个指南解释了所有的陷阱以及'wevtutil.exe 对目录名称的奇怪选择性的本质是什么。

提前致谢,

蒂姆。

0 投票
2 回答
458 浏览

windows - 创建显示来自 Windows Performance Analyzer Xperf 的统计信息的可打印报告

这是一个非常简单的问题。

我运行 Xperf 并获取有关程序、应用程序等执行的所有统计信息……

好吧,我想找到一个工具,使我能够为 Xperf 收集的所有数据创建可打印的报告。

Xperf,实际上,让我显示有关磁盘使用情况、CPU 使用情况、时间、开销等的所有数据和信息……但不让我打印它们……如何做这样的事情????

谢谢。

0 投票
2 回答
750 浏览

.net - Windows Xperf 磁盘操作未向我显示程序在性能跟踪会话期间读取的文件

我运行 xperf 是为了在运行程序时获取程序的跟踪信息。程序读取一个文件。它是一个用 F# 编写的 .NET 程序,文件在此处读取:

好。我运行 xperf:

我停止 xperf 并合并到一个文件中:

好的。

现在我写:

我这样做是为了获得一个包含有关文件的所有信息的文件。显示的文件是一个格式化的文本文件,以便让我按文件查看磁盘统计信息。在跟踪会话期间已被操作的每个文件都显示了很多关于读取/写入文件的进程的数据等等......

MyReadFile.txt没有出现在那里。

为什么?????是不是因为cpu采样频率太低了?怎么改?...

但是,我的程序读取文件,我敢肯定,程序启动并打印出内容......

谢谢

0 投票
1 回答
1039 浏览

etw - XPerf 和经典 ETW 提供程序

是否可以从经典 ETW 提供商处收集跟踪信息?还是 XPerf 仅限于基于清单的?我有一个自定义经典提供程序,想知道是否可以使用 XPerf 收集它的事件。

0 投票
3 回答
2471 浏览

performance - 什么是 XPerf 中的硬故障

我正在尝试使用 XPerf 分析系统。并看到在 HardFaults 中有活动时会出现性能问题! 硬故障图

但是我无法弄清楚并在谷歌中找到 xperf 显示的这些硬故障是什么。它们与什么有关?它们表明了什么?有没有针对这种情况的通用补救措施? 硬故障表

0 投票
2 回答
1142 浏览

windows - 使用 xperf 列出每个进程访问的文件?

使用 xperf,我可以生成跟踪并获得所有文件的“平面”列表,如下所示:

xperf -on FileIO+FILE_IO+FILE_IO_INIT+FILENAME -stackwalk FileRead+FileWrite+FileDelete

xperf -start FileIOSession -heap -PidNewProcess "C:\Python27\x86\python.exe scratchy.py" -WaitForNewProcess -BufferSize 1024 -MinBuffers 128 -MaxBuffers 512 -stackwalk HeapAlloc+HeapRealloc -f ./tempheap.etl

xperf -stop FileIOSession -stop -d fileio.etl

xperf -i fileio.etl -o fio_output.txt -a 文件名

不幸的是,fio_output.txt 文件包含一个可以想象到的(从我的网络浏览器、IDE 等)访问的每个文件的列表。更令人沮丧的是,如果我手动打开 xperfview 并打开文件 I/O 汇总表,我可以看到我的进程(在本例中为 python.exe)和它读取的一个文件(用于测试目的)但似乎找不到在 CLI 上输出相同数据的方法,这是我需要的——一种无人值守的自动生成文件访问信息的方法。

0 投票
1 回答
656 浏览

windows - Xperf (ETW) 如何测量驱动程序加载时间?

我正在使用 Xperf 来测量我的 WDF 驱动程序的加载时间。由于某种原因,加载时间相当长 - 长达 1 秒。奇怪的是,即使我从驱动程序中删除所有代码,它仍然如此。

我的问题是 - XPerf(或更正确的 Windows 事件跟踪)如何测量驱动器加载时间?我可以看到这不是 DriveEntry 所花费的时间,而不是二进制加载所花费的时间。有什么提示吗?谢谢你。

0 投票
1 回答
1157 浏览

c++ - 使用 xperf 分析网络事件

我写了一个小的 tcp-client/server-thing 来测试 xperf-networkttrace功能。但似乎我确实对 xperf 做错了。当我使用 Xperf 内核组NETWORKDIAG+NETWORKTRACE它只是向我展示了“随意”的东西,而没有关于 tcp/udp-reads 和 writes...

任何人都知道如何从 xperf 获取这些信息?(通过谷歌没有发现任何真正有用的东西)

0 投票
4 回答
2793 浏览

windows - 无法让 xperfview 加载 DLL 的符号

我一直在使用 xperf 来获取我正在分析的工具的符号。我在该工具中运行的代码在 .exe 和 .dll 之间进行了拆分——要分析的重要内容位于 .dll 中。我跑了 xperf:

然后我运行了我的工具一会儿,然后

然后我尝试了 xperfview。我加载了配置文件,打开了“加载符号”,然后打开了汇总表。根本没有符号——从字面上看,模块在函数列中出现了“未知”。我已经搜索了其他线程,这就是我尝试过的:

  1. 我设置了我的环境变量 _NT_SYMBOL_PATH 和 _NT_SYMCACHE
  2. 我清除了我的符号缓存并运行 xperf -symbols -i profile_results.etl。
  3. 我从最新版本的 Windows 调试工具中复制了 dbghelp.dll 并重复了上述操作。

完成所有这些操作后,我现在可以为大多数不是我自己的代码的模块正确显示函数名称,但我无法显示我的 dll。dll 正在发布模式下编译(经过优化),但我将 Visual Studio 项目专门设置为创建 pdb,我已验证 pdb 存在并且它位于我的 _NT_SYMBOL_PATH 上的目录中。有谁知道我该如何解决这个问题,或者至少进一步调试它?