• Austin Clements's avatar
    runtime: free dead G stacks concurrently · e8337491
    Austin Clements authored
    Currently we free cached stacks of dead Gs during STW stack root
    marking. We do this during STW because there's no way to take
    ownership of a particular dead G, so attempting to free a dead G's
    stack during concurrent stack root marking could race with reusing
    that G.
    
    However, we can do this concurrently if we take a completely different
    approach. One way to prevent reuse of a dead G is to remove it from
    the free G list. Hence, this adds a new fixed root marking task that
    simply removes all Gs from the list of dead Gs with cached stacks,
    frees their stacks, and then adds them to the list of dead Gs without
    cached stacks.
    
    This is also a necessary step toward rescanning only dirty stacks,
    since it eliminates another task from STW stack marking.
    
    Change-Id: Iefbad03078b284a2e7bf30fba397da4ca87fe095
    Reviewed-on: https://go-review.googlesource.com/20665Reviewed-by: default avatarRick Hudson <rlh@golang.org>
    Run-TryBot: Austin Clements <austin@google.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    e8337491
mgcmark.go 36.1 KB