Skip to content

Commit

Permalink
internal/trace: stable sort events
Browse files Browse the repository at this point in the history
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 golang#11320

Change-Id: Id1df96af41dff68ea1782ab4b23d5afd63b890c9
Reviewed-on: https://go-review.googlesource.com/11834
Reviewed-by: Brad Fitzpatrick <[email protected]>
  • Loading branch information
dvyukov authored and bradfitz committed Jul 2, 2015
1 parent cd2e2f6 commit 64e48bb
Showing 1 changed file with 1 addition and 1 deletion.
2 changes: 1 addition & 1 deletion src/internal/trace/parser.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 64e48bb

Please sign in to comment.