spall web
1.0.0
spall 是一个探查器库和一个 Web 前端,用于探索代码并挖掘潜在的性能问题。
^ 这是来自 Happenlance 的 180 MB(相当于 526 MB JSON)、5 分钟的跟踪,由 @pmttavara 提供!
在 Gravity Moth 尝试一下
spall 包含一个小型单头 C 库spall.h
。
spall 目前支持 2 种不同的文件格式:
perfetto
、 chrome://tracing
和speedscope
使用的 Google 跟踪格式,如下所述您可以使用我们的标头来检测代码,也可以使用现有的chrome://tracing
兼容 JSON 转储代码。
如果您从头开始,您可能希望使用 spall 标头来生成事件。二进制格式的分析开销要低得多(因此您的跟踪应该更准确),并且摄取速度比 JSON 格式快大约 10 倍。
如果你想使用 JSON,sll 期望事件遵循 Google 的 JSON 跟踪格式,它们看起来像这样:
[
{"cat":"function", "name":"main", "ph": "X", "pid": 0, "tid": 0, "ts": 0, "dur": 1},
{"cat":"function", "name":"myfunction", "ph": "B", "pid": 0, "tid": 0, "ts": 0},
{"cat":"function", "ph": "E", "pid": 0, "tid": 0, "ts": 0}
]
(spall 不关心尾随逗号,并且不需要右括号,以简化文件创建/事件流)
cat
- 事件类别。目前未使用
name
- 事件的名称,一个字符串
ph
- 事件类型
类型 | 象征 |
---|---|
开始 | “乙” |
结尾 | “E” |
完全的 | “X” |
tid
- 线程 ID,u32 pid
- 进程 ID,u32
所有 tid 和 pid 必须介于 0 和 u32_MAX 之间,作为整数值
ts
- 时间戳,双精度型,以微秒为单位dur
- 时间戳,双精度型,以微秒为单位
(时间戳 1 从 1 μs 开始)
Spall 目前仅支持 Begin、End 和 Complete 事件
{"cat":"function", "name":"foo", "ph": "X", "pid": 0, "tid": 0, "ts": 0, "dur": 1},
完整事件需要持续时间字段,因为它们一次性跟踪函数的开始/结束
{"cat":"function", "name":"myfunction", "ph": "B", "pid": 0, "tid": 0, "ts": 0},
{"cat":"function", "ph": "E", "pid": 0, "tid": 0, "ts": 0},
结束事件会自动关闭具有相同 pid 和 tid 的最近开始事件,因此它们不需要名称
无论摄取格式如何,进程/线程 (pid/tid) 中的所有开始和结束事件都应首先采用最早的时间戳,排序顺序例如:
[
{"cat":"function", "name":"main", "ph": "B", "pid": 0, "tid": 0, "ts": 0},
{"cat":"function", "name":"foo", "ph": "B", "pid": 0, "tid": 0, "ts": 1},
{"cat":"function", "ph": "E", "pid": 0, "tid": 0, "ts": 2},
{"cat":"function", "ph": "E", "pid": 0, "tid": 0, "ts": 3}
]