本篇文章将介绍通用的Perfetto数据内容与格式,以及相关的数据处理工具,并通过具体示例帮助读者更直观地理解整个处理流程。

示例仓库:https://github.com/bobozi-cmd/perfetto_tool

<aside> ⚠️

本文章不涉及复杂的Linux和Android的 system perf 内容,主要基于vllm收集的perf数据,讨论通用的Perfetto的使用和处理。

此外,Perfetto工具一直在发展,本文章讨论的内容可能会过时,欢迎在留言板进行提问:Contact me

</aside>

初识Perfetto.UI

示例仓库中有一个 example.json 文件,可以使用 https://ui.perfetto.dev/ 打开这个性能文件(图中标号1),该文件是通过裁剪vllm推理过程中收集到的数据生成的。导入文件后的界面如下(v52.0-86f2a34b2 版本),这个界面称为Timeline 视图(图中标号2)。

在Timeline视图的最上方有一个搜索框(图中标号6), 称为omnibox,可以用名称来搜索相关的事件,输入 > 后,这个框会变成 commands mode,允许你输入并执行一些预定义的命令;输入 : 后,这个框会变成 SQL mode,我们可以在其中直接执行 SQL 语句。

Timeline的主要区域展示了我们收集到的性能数据,默认情况下,这些数据会放置在 Default Workspace 中(图中标号7),我们可以选择特定的数据或轨道,创建新的工作区进行展示。

下方的展示区域(图中标号8)可以容纳多个标签页(tabs),每个标签页可以显示 SQL 查询结果、选定时间范围内的统计数据等。此外,该区域还提供了其他实用的展示功能,我们将在后续内容中详细介绍。

Perfetto.UI 侧边栏提供了一些附加功能,点击Query按键(图中标号3),进入 SQL 界面,里面可以执行 SQL 进行数据分析,执行的结果可以在 Timeline 视图的展示区域中展示。点击Settings按键(图中标号4)可以进行一些配置(如Startup Commands)。点击Plugins按键(图中标号5)可以选择打开/关闭一些插件(通过修改Perfetto UI的源码可以自定义Plugins)

Perfetto.UI 界面主要控件介绍

Perfetto.UI 界面主要控件介绍

核心组件

<aside> 💡

Perfetto的核心在于其数据处理能力:它将原始数据解析后,统一存入一个结构化的数据库,后续所有分析都基于此数据库展开。

</aside>

Perfetto数据库

在开始深入认识Perfetto的数据格式之前,我们先直观的了解Perfetto的数据库和其中的字段类型。

参考文档:https://perfetto.dev/docs/analysis/perfetto-sql-getting-started;https://perfetto.dev/docs/analysis/sql-tables

Perfetto的SQL可以看作是SQLite的增强版,当用户第一次打开Perfetto UI的页面,网页会在本地安装一个wasm版本的TraceProcessor,用来处理perfetto的源文件,并执行SQL查询(一个TraceProcessor进程同时间只能处理一个request)。

核心概念