【问题标题】:How does the TraceProcessing library compare to the TraceEvent lIbrary used by PerfView?TraceProcessing 库与 PerfView 使用的 TraceEvent 库相比如何?
【发布时间】:2020-04-22 19:32:01
【问题描述】:

似乎有很多不同的方法来处理解析 ETW 事件(TraceProcessing、TraceEvent、ETW2JSON 等)。我对 TraceProcessing 库和 TraceEvent 库之间的权衡特别感兴趣。

  • 它们是否适用于不同的用例?
  • TraceProcessing 是作为 TraceEvent 的后续还是演变而来的?
  • 为什么要选择 TraceProcessing 库而不是 TraceEvent 库?

【问题讨论】:

    标签: .net-traceprocessing


    【解决方案1】:

    (我是 Microsoft 的一名开发人员,从事 TraceProcessor 项目。)

    我对 TraceEvent 比对 ETW2JSON 更熟悉一些,但相同的答案适用于这两种情况。

    每个都是由 Microsoft 内部的不同组织开发的,以最好地支持我们自己的性能和诊断调查。在某些情况下,我们从其他库中获取 TraceProcessor 的设计灵感或线索,但主要是针对我们的特定用例并根据我们自己的设计理念开发的。

    这些差异意味着每个库在性能、API 设计/一致性和广泛的 ETW 支持方面都有自己的原则,而对某些特定事物的良好开发的一流支持。

    TraceEvent 确实支持 .NET/CLR,但主要侧重于作为 C++ ETW API 的管理包装器。它确实支持其他事件,但非常有限。

    总而言之,TraceEvent 非常适合一流的 .NET/CLR 数据和其他地方的“基础”。

    TraceProcessor 为您可以在 XPerf 和 WPA 等其他工具中看到的系统和诊断数据类型提供强大的一流支持。我们在整个库中推动了一个干净、一致、高性能的 API,并强调强类型以最自然的形式呈现每种类型的数据。

    【讨论】:

    • 是否有任何 TraceProcessor 不会处理 TraceEvent 会处理的事件?
    • TraceProcessor 将允许您访问跟踪中的所有事件,但根据事件类型提供不同的支持。对于 manifested/tracelogging 事件,我们提供一个 IGenericEvent,它提供了对字段的良好的按索引或按名称访问。对于上下文切换等特殊事件,我们将更进一步,为您提供一流的 IContextSwitch。如果我们的支持还不够,您可以访问原始的、未解析的事件并根据您的需要处理解析。不过,我们对 .NET 事件没有任何特殊的一流支持,因此您只需为这些事件获取 IGenericEvent。
    • 对于 IClassicEvents (Classic/MOF),是否可以访问该事件的数据(即事件类型 MOF 类属性)?还是无法通过 TraceProcessor 访问该数据?
    • 目前无法使用 IClassicEvent。相反,您需要将事件作为未解析的事件获取。您可以使用extensibility page 中列出的 IFilteredEventConsumer 方法来执行此操作。点到 EventContext.Event.Data,您可以访问事件负载中的字节,您可以将其转换为结构或使用 EventDataReader 中的帮助器。
    • 请注意,可扩展性的方法将来可能会发生变化。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-12
    相关资源
    最近更新 更多