-
Notifications
You must be signed in to change notification settings - Fork 18.4k
Description
As part of #60773 (tracking issue #57175) I've been working on a new parser for the execution tracer, and to save work down the line I've also been trying to come up with a nice API that would work well.
The goals of such an API would be to:
- Enable custom analyses of traces.
- Allow for streaming traces and performing on-line analyses.
- Be both backward- and forward- compatible with new Go versions and trace wire formats.
Here are the requirements I have for such an API:
- The API should be stream-based, regardless of whether the underlying trace format supports it.
- Parsing a single trace in parallel is unsupported (part of the point of parsing is to serialize the stream anyway).
- The API should expose some model of the Go scheduler explicitly. (This comes from an insight from @rhysh about the
internal/traceAPI that doesn't actually expose e.g. the state machine goroutines go through (even though it already has to know about it), leaving users to figure it out again.) - The API should at least allow for an extension for efficient random access from local storage (e.g. loading from an
mmap'd trace file).
Any such API is likely to have a fairly large surface. Rather than try to list the full API and debate its merits, we should experiment.
https://go.dev/cl/527875 is my first attempt at such an experiment to support the work done for #60773. The implementation is not quite fully baked (there may be bugs, and there's still some validation missing) but it already seems to work for non-trivial traces produced by https://go.dev/cl/494187 (with GOEXPERIMENT=exectracer2). (I'll update this section when it's ready, including with instructions on how to try it out.)
I plan to take this API and vendor it and/or copy it into the standard library to work as the implementation for supporting new traces in internal/trace. That'll help move #60773 along but it'll also give us some experience with using the API.
Once I get this API landed in x/exp, and the first cut of the new tracer for #60773, I'd like to invite people to experiment to both shake out bugs but also to identify deficiencies in the API.
For the proposal committee: there's nothing actionable here yet, but I figured I'd create an issue to track work and start a discussion.
Related to #62461.
CC @prattmic @aclements @dominikh @felixge @nsrip-dd @bboreham @rhysh
Metadata
Metadata
Assignees
Labels
Type
Projects
Status