问题标签 [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.
etw - Windows 性能分析器中“焦点窗口”图形的 ETW 提供程序
Windows 性能分析器有一个名为“焦点窗口”的图表。我应该在 xperf 命令行中指定什么提供程序/跟踪标志来获得这样的图表?
winapi - Windows 性能分析器或 xperf 中的包含函数计时
是否可以显示包含函数计时,即函数及其所有子项在 Windows 性能分析器和/或 xperf 中运行的总时间。我想知道独立于呼叫者的时间。
我知道我可以从堆栈列中获取依赖于调用者的包含时间,以及从函数列中获取独占时间,但是对所有调用者进行总结的第一个确实是我所追求的。
xperf - xperfview 在另一台计算机上
我见过的大多数 xperf 用例都涉及在同一台计算机上使用 xperfview。对我来说,远程录制和回放似乎效果不佳。符号未正确解析。使用 xperf/xperfview 进行远程录制和本地播放是否存在已知问题?
xperf - 是否需要 DisablePagingExecutive 才能允许 xPerf 对在 64 位 Windows 上运行的 32 位应用程序进行堆栈遍历
我有两个问题:
我发现一个博客条目说
DisablePagingExecutive
应该在使用时设置xperf
:http://blogs.msdn.com/b/pigscanfly/archive/2009/08/06/stack-walking-in-xperf.aspx
禁用分页执行
程序 为了在 64 位 Windows 上进行跟踪,您需要设置DisablePagingExecutive
注册表项。这告诉操作系统不要将内核模式驱动程序和系统代码分页到磁盘,这是使用 xperf 获取 64 位调用堆栈的先决条件,因为 64 位堆栈遍历依赖于可执行映像中的元数据,并且在某些情况下xperf 堆栈遍历代码不允许触摸分页页面。这是否需要为
xperf
在 64 位 Windows 上运行的 32 位应用程序收集数据?在 64 位操作系统上为 32 位进程收集数据时
xperf
,我应该使用 x86 还是 x64 版本?
windows - 较新版本的 xperfview 没有摘要选项?
编辑 - 事实证明我使用的是 Windows 性能分析器。使用 Windows 8 ADK,当您安装性能工具时,它会为性能分析器制作一个图标,但不再为 xperfview 制作一个图标。xperfview 6.2.2900 仍然包含在内,并且仍然具有响应式界面,现在它可以正确读取 Windows 8 etl 文件。它可以在这里找到:
C:\Program Files (x86)\Windows Kits\8.0\Windows Performance Toolkit\xperfview.exe
很抱歉造成混淆。我的原始问题如下,我检查正确的答案告诉您如何在 Windows 性能分析器中显示模块。
我使用 xperf 4.6.7231 在 Windows 8 x64 系统上捕获一些延迟信息。然后我尝试使用相同版本的 xperfview 来查看结果,但我不能。只有“未知”。我的所有符号都配置正确,这只是尝试在 Windows 8 上使用该版本的 xperfview 的问题。
长话短说,我必须下载 Windows 评估和部署工具包 (ADK) 才能获得最新版本的 Windows 性能工具。Win8 和 Win8.1pre ADK 中的 xperfview 可以正确查看在 Windows 8 上创建的 etl 文件。
xperfview 的界面在 Windows 8 ADK 中发生了巨大变化。它现在基于 .NET,响应速度比旧版本低得多。它看起来还有更多选择。我无法弄清楚的一件事(我已经检查了帮助并在谷歌上搜索)是如何在旧版本中做我可以做的事情,我突出显示一个部分,右键单击它,然后选择“摘要”以查看驱动程序以及他们在该选定时间的百分比。
举个例子,这里是 xperfview 的新 .NET 接口的链接:
当您可以选择摘要时,这就是它过去的样子。请注意,它说未知,这是因为旧版本不能正确处理 Win8 etls。这只是我在新版本中寻找的一个例子,但当然是驱动程序名称。
asp.net - 我可以使用 xperf 来分析托管代码吗?
我正在尝试使用 xperf 分析 ASP.NET 应用程序(本地运行)中的 CPU 时间。
到目前为止,我遵循了标准程序:
cmd
以管理员身份运行xperf -on base
- 在网络应用程序中做一些事情。
xperf -d mylog.etl
xperfview mylog.etl
- 跟踪 -> 加载符号
- 汇总表
那时,我可以看到非托管代码的调用报告。
我必须做什么才能看到我的 .NET 程序集相同?这甚至可能吗?
我有我的 PDB 的路径_NT_SYMBOL_PATH
,至少我知道 MS 符号已加载。
您需要来自 Windows 8 SDK 的 xperf 版本。此版本支持 .net。使用新的 Performance Recorder UI 开始跟踪,此工具会为生成的 .net 组件生成 PDB,以便 xperfview 和 WPA 可以解码调用堆栈。
谁能证实这一点?我正在使用 Windows 7 和 Windows 7 SDK。我对安装另一个平台 SDK 持怀疑态度。
更新:是的,Windows 8 SDK 在 Windows 7 上运行,为此,您唯一需要的是性能工具包。事实上,您甚至不必使用新的“Windows 性能分析器”,因为etl
新的“Windows 性能记录器”生成的文件仍然可以使用xperfview
,包括增强的堆栈跟踪。有关进一步说明,请参阅对已接受答案的评论。
c++ - xperf 分析混合模式代码不会显示本机功能
我正在使用 Visual Studio 2012 分析我的应用程序的一部分,它是一个包含本机 C++ 和 .net C++/CLI 托管代码的 dll。性能报告很好地显示了我所有托管代码的信息,但是托管代码调用本机代码的任何地方,我都无法深入挖掘,只能将 [Unknown] 显示为位置。我真的需要分析本机代码,这就是大部分功能所在。
windows - ETW:通过现有提供者发出事件
我有一个使用本机插件的应用程序。这些插件我有自己的二进制格式。每个插件在运行时使用类似于将 DLL 映射到进程空间的方法加载。这意味着,每个插件都有自己的ImageBase
部分,类似于.text
或.data
以与传统 DLL 相同的方式处理。唯一不同的是插件的二进制格式(它不是PE
文件)和将插件映射到进程空间的加载程序代码。
现在我知道 ETW 在通过此命令行进行跟踪时:
将发出可用于在跟踪捕获期间重建进程环境的事件。即会发出“添加进程”、“将线程添加到进程”、“将DLL模块添加到进程”之类的事件,以便像这样的工具xperfview
可以构建系统中进程状态的虚拟环境并构建信息像当前的进程树。例如,这些事件是ImageLoad事件,它们提供有关在跟踪之前或期间加载的每个 DLL 的信息。
当然,对于我的插件,这些ImageLoad
事件不会生成,因为它们在技术上不是 DLL(也就是说,不是由与 DLL 相同的函数加载,尽管它们的功能是相同的)。这就是为什么像xperfview
这样的工具不知道它们在进程空间中的存在的原因。
我想做的是在我的插件加载器代码中编写我自己的 EventWrites,并ImageLoad
用必要的信息发出这些事件,以便xperfview
和类似的工具可以将我的插件解释为普通的 DLL。我会填写必要的信息,如ImageBase
, ProcessId
,ImageSize
等。
为此,我知道我需要注册事件MSNT_SystemTrace
提供者,即事件的所有者,ImageLoad
使用这种结构构建事件:
并发出事件。
问题是我ERROR_ACCESS_DENIED
在尝试注册另一个时遇到了问题MSNT_SystemTrace
,这是合乎逻辑的,因为该提供程序已经存在。
但这迫使我问这个问题,我正在尝试做的事情是否得到 ETW 的支持?
.net - 如何查看 CLR ETW 事件
我想知道是否有一个工具可以用来特别查看 CLR ETW事件,即显示“漂亮”的图表,而不是使用通用图表出现在WPA的通用事件部分中。
在 WPA 中打开一个 .etl 跟踪文件(例如,使用perfmonitor.exe或 WPR 制作)跟踪只给了我 GUID 和事件 ID(用于 CLR 事件)来挖掘,所以我想知道是否有办法解决这些问题以使其更有用WPA 中的名称,或者是否有其他工具可以显示此类事件跟踪。perfmonitor.exe 仅部分有用,因为它只关注 JIT、GC 和 CPU,并且(afaik)忽略其他事件。
performance - 在另一台机器上查看 xperf ETL 文件时出错
我有一台安装了 Windows 8.1 和 ADK (xperf 6.3.9600) 的机器。
我有另一台安装了 Windows 7 SP1 和 8.1 ADK (xperf 6.3.9600) 的机器。
如果我在 8.1 机器上使用 xperf 生成跟踪,我无法在 Win7 机器上加载该跟踪;它给了我错误The file or directory is corrupted and unreadable. (0x80070570).
ETL 文件可以成功加载到生成它的机器上以及另一台同样运行 Windows 8.1 的机器上。
是否只能在与生成它们的操作系统相同或更高的操作系统上加载跟踪文件?为什么它不需要相同的 xperf/WPA 版本?还是这对其他人有用,而我忽略了一些东西?