]> Cypherpunks repositories - gostls13.git/commit
runtime: add ragged global barrier function
authorAustin Clements <austin@google.com>
Fri, 27 Mar 2015 20:49:12 +0000 (16:49 -0400)
committerAustin Clements <austin@google.com>
Mon, 27 Apr 2015 19:26:33 +0000 (19:26 +0000)
commit57afa76471ccb3fd9e92349825f90b6c354fc9b5
treebc53eee0f733e9d3aa72eaa36227de7b6dc18b5f
parent81c2233b4abff45e9c781f5e7c50396cfec5a0df
runtime: add ragged global barrier function

This adds forEachP, which performs a general-purpose ragged global
barrier. forEachP takes a callback and invokes it for every P at a GC
safe point.

Ps that are idle or in a syscall are considered to be at a continuous
safe point. forEachP ensures that these Ps do not change state by
forcing all syscall Ps into idle and holding the sched.lock.

To ensure that Ps do not enter syscall or idle without running the
safe-point function, this adds checks for a pending callback every
place there is currently a gcwaiting check.

We'll use forEachP to replace the STW around enabling the write
barrier and to replace the current asynchronous per-M wbuf cache with
a cooperatively managed per-P gcWork cache.

Change-Id: Ie944f8ce1fead7c79bf271d2f42fcd61a41bb3cc
Reviewed-on: https://go-review.googlesource.com/8206
Reviewed-by: Russ Cox <rsc@golang.org>
Reviewed-by: Rick Hudson <rlh@golang.org>
src/runtime/proc1.go
src/runtime/runtime2.go