diff options
author | Dmitry Vyukov <dvyukov@google.com> | 2015-07-01 16:41:27 +0200 |
---|---|---|
committer | Brad Fitzpatrick <bradfitz@golang.org> | 2015-07-02 00:37:16 +0000 |
commit | 64e48bbaba5a35049befe695ce0ff54ce93e2955 (patch) | |
tree | 48adac69484ead3197b41e1404d1b19224c7408f | |
parent | cd2e2f60e77c05d68755ce5df4c401be1ea5b0d3 (diff) | |
download | go-64e48bbaba5a35049befe695ce0ff54ce93e2955.tar.gz go-64e48bbaba5a35049befe695ce0ff54ce93e2955.zip |
internal/trace: stable sort events
On some VMs two events can happen at the same time. For examples:
179827399 GoStart p=2 g=11 off=936359 g=11
179827399 GoUnblock p=2 g=0 off=936355 g=11
If we do non-stable sort, the events can be reordered making the trace inconsistent.
Do stable sort instead.
Batches are dumped in FIFO order, so if these same-time events are split into
separate batches, stable sort still works.
Events on different CPUs go into different batches and can be reordered.
But the intention is that causally-related events on different CPUs
will have larger (non-zero) time diff.
Update #11320
Change-Id: Id1df96af41dff68ea1782ab4b23d5afd63b890c9
Reviewed-on: https://go-review.googlesource.com/11834
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
-rw-r--r-- | src/internal/trace/parser.go | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/src/internal/trace/parser.go b/src/internal/trace/parser.go index 330671325d..1117b18e47 100644 --- a/src/internal/trace/parser.go +++ b/src/internal/trace/parser.go @@ -254,7 +254,7 @@ func parseEvents(rawEvents []rawEvent) (events []*Event, err error) { } // Sort by time and translate cpu ticks to real time. - sort.Sort(eventList(events)) + sort.Stable(eventList(events)) if ticksPerSec == 0 { err = fmt.Errorf("no EvFrequency event") return |