I want to do to two improvements to cmd/trace in this release cycle.
1. Currently there is a global variable used to assign sequence
numbers to all events. There sequence numbers allow to detect
inconsistent traces (when rdtsc is broken). Synchronization on this
variable causes up to 60x slowdown (measured on a 48-core machine). I
want to (1) emit sequence numbers only for events that participate in
causal relations (e.g. goroutine creation and goroutine start), then
make these sequence numbers per-goroutine or per-processor. This is
enough to assess trace validity.
2. Embed file:line info right into trace file. This will make trace
files self-contained and simplify analysis of traces collected from
live servers (when you don't know the exact binary, or trace collected
some time ago and now the binary is lost). On implementation level I
want to emit dictionary of file and function names, and then for each
involved PC refer to (file id, func id, line). The dictionary building
is done during trace finalization, in a separate goroutine, outside of
stop-the-world so should not be a performance issue. Cmd/trace will
then accept only trace file (if supplied with two args, the first one
is ignored for compatibility).
Is there any interest in these improvements in this release cycle?
Dmitry Vyukov, Software Engineer, Google Germany GmbH, Dienerstraße
12, 80331, München
Hamburg, HRB 86891 | Sitz der Gesellschaft: Hamburg | Geschäftsführer:
Graham Law, Christine Elizabeth Flores
You received this message because you are subscribed to the Google Groups "golang-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to firstname.lastname@example.org.
For more options, visit https://groups.google.com/d/optout.