-
-
Notifications
You must be signed in to change notification settings - Fork 14
Open
Description
Go outputs a custom trace format. go tool trace transforms this into JSON understood by the (deprecated though I can't find an official reference) Catapult viewer.
The trace format is not hard to translate to Spall. But, doing so loses a couple of interesting features:
- Blocking relationships: goroutines can unblock one another (channel sends, mutex unlock, time fire, ...). See the attached screenshot below. Generated using
go run traceexample.go ; go tool pprof --http=0.0.0.0:1113 ./trace.out, see traceexample.go. - Extra metric displayed as graphs: live heap, allocated. See https://go.dev/blog/execution-traces-2024 for what this looks like.
- Stacks (see e.g. https://lrita.github.io/images/posts/go/Rhys-Hiltner-go-tool-trace-GopherCon-2017.pdf page 33). I'm not sure how to translate this properly. A goroutine can run for 1s, but a stack isn't taken whenever a function call is made. Rather, it happens on certain important events. So while we could translate a stack to the entire range, it's not super accurate.
Side note, https://github.com/dominikh/gotraceui is another alternative trace frontend for Go traces, which is faster and more modern. But, it's not a web frontend, which is a big strength of spall-web.
Metadata
Metadata
Assignees
Labels
No labels

