spall은 코드를 탐색하고 잠재적인 성능 문제를 조사하기 위한 프로파일러 라이브러리이자 웹 프런트엔드입니다.
^ @pmttavara가 제공한 180MB(526MB JSON 상당), Happenlance의 5분 추적입니다!
Gravity Moth에서 시도해 보세요.
spall에는 작은 단일 헤더 C 라이브러리인 spall.h
가 포함되어 있습니다.
spall은 현재 2가지 파일 형식을 지원합니다.
perfetto
, chrome://tracing
및 speedscope
에서 사용되는 Google 추적 형식)(아래 설명) 헤더를 사용하여 코드를 계측하거나 기존 chrome://tracing
호환 JSON 덤프 코드를 사용할 수 있습니다.
처음부터 시작하는 경우 spall 헤더를 사용하여 이벤트를 생성할 수 있습니다. 바이너리 형식은 프로파일링 오버헤드가 훨씬 낮으며(따라서 추적이 더 정확해야 함) JSON 형식보다 약 10배 빠르게 수집됩니다.
JSON을 사용하려는 경우 spall은 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
- 이벤트 유형
유형 | 상징 |
---|---|
시작하다 | "비" |
끝 | "이자형" |
완벽한 | "엑스" |
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}
]