Trace Processor 架构

本文档解释了 Perfetto 的 trace processor 的工作原理,从摄取原始 trace 文件到提供可查询的 SQL 数据。它涵盖了使 trace processor 能够处理各种格式(Proto、JSON、Systrace 等)的 traces 并将它们转换为统一的 profile 数据库的关键组件、数据流和架构模式。

概述

Trace processor 是一个摄取各种格式的 trace 文件、解析其内容、按时间戳对事件进行排序并将数据存储在列式 SQL 数据库中进行 profile 的系统。它以块为单位处理 traces,以高效处理大文件。

核心数据管道

原始 Trace → ForwardingTraceParser → 格式特定的 ChunkedTraceReader → TraceSorter → TraceStorage → SQL 查询引擎

格式检测和委托

ForwardingTraceParser (src/trace_processor/forwarding_trace_parser.cc:95-134)

格式注册 (src/trace_processor/trace_processor_impl.cc:475-519)

context()->reader_registry->RegisterTraceReader<JsonTraceTokenizer>(kJsonTraceType); context()->reader_registry->RegisterTraceReader<ProtoTraceReader>(kProtoTraceType); context()->reader_registry->RegisterTraceReader<SystraceTraceParser>(kSystraceTraceType);

格式特定的阅读器(不同的方法)

1. JSON Traces

JsonTraceTokenizer (src/trace_processor/importers/json/json_trace_tokenizer.h:73)

2. Proto Traces(复杂的模块化系统)

ProtoTraceReader (src/trace_processor/importers/proto/proto_trace_reader.h:58)

3. Systrace(基于行的处理)

SystraceTraceParser (src/trace_processor/importers/systrace/systrace_trace_parser.h:34)

4. 其他格式

事件排序和处理

TraceSorter (src/trace_processor/sorter/trace_sorter.h:43)

存储层

TraceStorage (src/trace_processor/storage/trace_storage.h)

上下文和协调

TraceProcessorContext (src/trace_processor/types/trace_processor_context.h)

关键架构模式

1. ChunkedTraceReader 接口

所有格式阅读器实现相同的接口,但内部架构完全不同:

2. TraceSorter::Stream 模式

每种格式定义自己的事件类型并创建类型化流:

3. 解析器与 Tokenizer 分割

文件路径参考

核心基础设施:

格式阅读器(示例):

注册: