会话

Windows Performance Recorder (WPR) 扩展了 Windows 事件跟踪 (ETW)。 ETW 日志记录会话是内存中缓冲区的集合,该集合通过 ETW 提供程序应用程序编程接口 (API) 接受事件。 这些缓冲区通常是非分页的,由内核进行管理。 ETW 为每个处理器分配一个缓冲区。 ETW 事件生成和缓冲是无锁的,可使用 ETW 来记录所有类型的事件。

每次 ETW 调用 EventWrite 方法时,ETW 都将在当前缓冲区中保留 ETW 分配给运行调用线程的处理器的空间。 然后,ETW 会将事件标头和用户数据复制到该空间。 当缓冲区已满时,ETW 会将缓冲区刷新到日志记录会话的日志文件或实时流式处理使用者。 然后,ETW 将可用缓冲区分配给该处理器。

如果日志记录吞吐量超出了刷新器释放缓冲区的能力,则日志记录会话中的所有可用缓冲区空间都可能变为不可用。 例如,这可能是因为磁盘写入吞吐量低于传入事件吞吐量。 这会导致 EventWrite 引发 ERROR_NOT_ENOUGH_MEMORY 错误并丢失事件数据。 在这种情况下,ETW 会递增日志记录会话的 EventsLost 属性,以便使用者可以看到数据丢失。

有关如何避免在录制中丢失事件的详细信息,请参阅避免丢失事件

记录到内存或文件中

可以配置配置文件,将事件数据记录到内存中的缓冲区或记录到文件。 缓冲模式是一种内存中循环会话。 你可以在请求时将此会话的内容作为快照保存到事件跟踪日志 (ETL) 文件中。 保存内容时,WPR 不会刷新内存中缓冲区空间的内容。

可以持续保持缓冲模式会话。 如果不知道相关行为何时发生,这将特别有用。 当所需的循环缓冲区空间小到足以保存在内存中时,选择缓冲模式。 顺序日志文件最适用于受控方案。 例如,可以使用顺序日志文件进行回归测试,或者在相关行为的出现更容易预测时使用。

有关日志记录选项的详细信息,请参阅日志记录模式

记录配置文件

记录配置文件控制每个会话。 此配置文件可以是内置配置文件,也可以是用户定义的配置文件。 有关详细信息,请参阅记录配置文件

缓冲区大小

缓冲区大小对于控制 I/O 效率和确保 WPR 不会跳过大型事件很重要。 非常小的缓冲区会降低 I/O 写入效率。 建议最小缓冲区大小为 64 KB 或 128 KB,以提高写入性能并减少磁盘开销和丢失事件。 缓冲区大小确定录制的最长持续时间。 ETW 将最大事件大小限制为大约 64 KB。

Collectors

必须为记录配置文件中的会话定义一个系统收集器以及一个或多个事件收集器。 收集器名称对于系统必须是唯一的,并且系统必须具有对日志文件的独占写入权限。 日志文件的名称在所有收集器的文件名中也必须是唯一的。 WPR 不扩展环境变量,因此必须在不带环境变量的情况下指定日志文件的路径。 有关详细信息,请参阅 1. 收集器定义

提供程序

日志记录会话从一组定义的系统和事件提供程序收集。 这是在每个会话的基础上配置的重要项。 大多数提供程序可能与会话具有多对多的关系。 某些事件(例如内核或堆事件)需要特殊的提供程序。 有关详细信息,请参阅提供程序

WPR 功能

WPR 常见方案

记录配置文件

Buffers

BufferSize