性能计数器是 ETW 的一部分吗?如果不是,两者有什么区别?
2 回答
性能计数器和 ETW 是不同的技术。性能计数器不通过 ETW 公开。
基本区别:性能计数器提供有关系统行为的高级指标(考虑计时器和读取的字节以及分配的对象),而 ETW 是一种诊断跟踪和日志记录工具(考虑Debug.WriteLine
消息,但更丰富和更有条理)。
目前,ETW 和性能计数器都得到了 Windows 的全面支持,作为开发人员,您可以编写代码来为这两种技术生成和使用数据。
性能计数器
性能计数器,也称为 PDH(性能数据助手)计数器,是简单的数字指标,可为您提供特定系统行为方式的高级摘要。例如,% Processor Time
是一个性能计数器,它告诉您有多少处理器时间用于执行用户模式代码。作为一个更复杂的示例,# of Methods Jitted
该.NET CLR Jit
类别告诉您自应用程序启动以来有多少个 .NET 方法被 JIT 编译。
性能计数器通常用于监控系统运行状况和诊断特定的性能问题。当出现严重错误时,它们是问题的一个很好的指标,但它们并没有为您提供有关特定问题发生原因的详细信息。
要查看 Windows 性能计数器,您只需运行perfmon
. 在 Vista+ 上,您可能需要单击“性能监视器”节点才能查看计数器图表。要以编程方式访问性能计数器,请查看System.Diagnostics.PerformanceCounter
.NET 中的类或本机代码的PDH 库。
Windows 事件跟踪 (ETW)
ETW 是内置于 Windows 中的跟踪系统。本质上,任何组件(例如用户应用程序,甚至 Windows 内核本身)都可以发送有关组件关心的特定事件的诊断跟踪信息。例如,当进程启动和停止、加载和卸载映像(例如 DLL)时、创建或销毁线程时,甚至当线程进行上下文切换时,内核都会发送 ETW 事件。记录的数据采用组件在其他地方描述的序列化格式,允许诊断工具读取和理解会话期间记录的 ETW 事件。请参阅此处以获取有关所有内容如何协同工作的框线图。
ETW 旨在快速,并且在未启用日志记录时不应对系统性能产生重大影响。从 Vista 开始,ETW 在整个 Windows 中无处不在,旨在供应用程序开发人员使用(具体来说,您的应用程序可以是记录事件的 ETW 提供程序)。ETW 是事件日志的基础,可供性能分析器、调试器或系统监视器使用。
有关与 ETW 接口的一些资源,请参阅我在此处的其他 SO 帖子。
根据这个文档,从 Vista+ 开始,性能计数器似乎有一个 ETW Façade,因此可以以与 ETW 完全相同的方式使用它们。
Windows Vista® 中包含的新性能计数器库(PERFLIB 2.0 版)为开发人员提供了许多优势,包括:
提供者和消费者之间的标准进程间通信 (IPC) 机制,它基于 Windows 事件跟踪 (ETW) 通知,可简化开发并提供更统一和可靠的代码。