• Austin Clements's avatar
    runtime: add ragged global barrier function · 57afa764
    Austin Clements authored
    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/8206Reviewed-by: default avatarRuss Cox <rsc@golang.org>
    Reviewed-by: default avatarRick Hudson <rlh@golang.org>
    57afa764
proc1.go 95.9 KB