• Dmitry Vyukov's avatar
    runtime: remove futile wakeups from trace · 4396ea96
    Dmitry Vyukov authored
    Channels and sync.Mutex'es allow another goroutine to acquire resource
    ahead of an unblocked goroutine. This is good for performance, but
    leads to futile wakeups (the unblocked goroutine needs to block again).
    Futile wakeups caused user confusion during the very first evaluation
    of tracing functionality on a real server (a goroutine as if acquires a mutex
    in a loop, while there is no loop in user code).
    
    This change detects futile wakeups on channels and emits a special event
    to denote the fact. Later parser finds entire wakeup sequences
    (unblock->start->block) and removes them.
    
    sync.Mutex will be supported in a separate change.
    
    Change-Id: Iaaaee9d5c0921afc62b449a97447445030ac19d3
    Reviewed-on: https://go-review.googlesource.com/7380Reviewed-by: 's avatarKeith Randall <khr@golang.org>
    4396ea96
chan.go 15.5 KB