]> Cypherpunks.ru repositories - gostls13.git/commit
runtime: refactor runtime->tracer API to appear more like a lock
authorMichael Anthony Knyszek <mknyszek@google.com>
Thu, 27 Jul 2023 19:04:04 +0000 (19:04 +0000)
committerGopher Robot <gobot@golang.org>
Thu, 9 Nov 2023 22:34:25 +0000 (22:34 +0000)
commitf119abb65dbe42f6cb40db698b54be3668357934
tree1cb07931c9e0f488724462616283a3d7ca3cc723
parente3585c67576bc1b0b161448b617eb2725e9c9d69
runtime: refactor runtime->tracer API to appear more like a lock

Currently the execution tracer synchronizes with itself using very
heavyweight operations. As a result, it's totally fine for most of the
tracer code to look like:

    if traceEnabled() {
traceXXX(...)
    }

However, if we want to make that synchronization more lightweight (as
issue #60773 proposes), then this is insufficient. In particular, we
need to make sure the tracer can't observe an inconsistency between g
atomicstatus and the event that would be emitted for a particular
g transition. This means making the g status change appear to happen
atomically with the corresponding trace event being written out from the
perspective of the tracer.

This requires a change in API to something more like a lock. While we're
here, we might as well make sure that trace events can *only* be emitted
while this lock is held. This change introduces such an API:
traceAcquire, which returns a value that can emit events, and
traceRelease, which requires the value that was returned by
traceAcquire. In practice, this won't be a real lock, it'll be more like
a seqlock.

For the current tracer, this API is completely overkill and the value
returned by traceAcquire basically just checks trace.enabled. But it's
necessary for the tracer described in #60773 and we can implement that
more cleanly if we do this refactoring now instead of later.

For #60773.

Change-Id: Ibb9ff5958376339fafc2b5180aef65cf2ba18646
Reviewed-on: https://go-review.googlesource.com/c/go/+/515635
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Auto-Submit: Michael Knyszek <mknyszek@google.com>
Reviewed-by: Michael Pratt <mpratt@google.com>
src/runtime/debugcall.go
src/runtime/mcentral.go
src/runtime/mgc.go
src/runtime/mgcmark.go
src/runtime/mgcpacer.go
src/runtime/mgcsweep.go
src/runtime/mheap.go
src/runtime/proc.go
src/runtime/trace.go