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}
]