Linux Perf 可能是世界上使用最多的性能剖析器,因为它在大多数 Linux 发行版上都有提供,这使得广大用户都能使用它。包括 Ubuntu、Red Hat 和 Debian 在内的许多流行 Linux 发行版都支持 Perf。它包含在内核中,因此你可以在任何运行 Linux 的系统上获取操作系统级别的统计数据(页面故障、CPU 迁移等)。截至 2024 年年中,剖析器支持 x86、ARM、PowerPC64、UltraSPARC 和其他一些 CPU 类型。在这些平台上,perf 可以访问硬件性能监控功能,例如性能计数器。有关 Linux perf 的更多信息,请访问其维基页面。
如何配置 Linux perf 安装 Linux perf 非常简单,只需一条命令即可完成:
微软开发了一种全系统范围的跟踪工具,名为 Windows 事件跟踪(ETW Event Tracing for Windows)。它最初用于帮助设备驱动程序开发人员,但后来也用于分析通用应用程序。ETW 适用于所有受支持的 Windows 平台(x86 和 ARM),并提供相应的平台安装包。ETW 记录用户和内核代码中的结构化事件,支持完整的调用堆栈跟踪,可帮助您观察运行系统中的软件动态,解决许多具有挑战性的性能问题。
7.6.1 配置
从 Windows 10 开始,使用 WPR.exe 记录 ETW 数据无需额外下载。但要启用全系统剖析,您必须是管理员并启用 SeSystemProfilePrivilege。Windows 性能记录器工具支持一套适用于常见性能问题的内置记录配置文件。您可以通过创建扩展名为 .wprp 的自定义性能记录器配置文件 xml 文件来满足您的记录需求。
如果您不仅想记录,还想查看记录的 ETW 数据,则需要安装 Windows 性能工具包 (WPT)。您可以从 Windows SDK或 ADK下载页面下载。Windows SDK 非常庞大,您不一定需要它的所有部分。在本例中,我们只启用了 Windows 性能工具包的复选框。您可以将 WPT 作为自己应用程序的一部分进行再分发。
7.6.2 您可以用它做什么?
通过 125 微秒到 10 秒的可配置 CPU 采样率识别热点。默认值为 1 毫秒,运行时开销约为 5-10%。
下图展示了剖析器的 CPU 数据部分。该区域显示特定线程在哪个内核上执行,还显示上下文切换。该部分还将显示 CPU 上运行的其他程序。如图所示,将鼠标悬停在 CPU 数据视图的特定部分时,会显示特定线程的详细信息。详细信息包括线程运行的 CPU、父程序、单个线程和时序信息。我们可以看到,在整个程序运行过程中,TestCpu.exe 线程仅在 CPU 1 上运行了 4.4 毫秒。
接下来的面板提供了程序的运行时间(热点)信息。下图是 Tracy 统计窗口的截图。我们可以查看记录的数据,包括给定函数的总活动时间、174 次活动时间、174 次活动次数和 174 次活动时间。
您可以查看每个 CPU 内核在任何特定时刻的工作情况。还可以在主视图中选择一个时间范围,过滤与时间间隔相对应的信息。