• 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: 's avatarRick Hudson <rlh@golang.org>
    Run-TryBot: Austin Clements <austin@google.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    e8337491
Name
Last commit
Last update
..
archive Loading commit data...
bufio Loading commit data...
builtin Loading commit data...
bytes Loading commit data...
cmd Loading commit data...
compress Loading commit data...
container Loading commit data...
context Loading commit data...
crypto Loading commit data...
database/sql Loading commit data...
debug Loading commit data...
encoding Loading commit data...
errors Loading commit data...
expvar Loading commit data...
flag Loading commit data...
fmt Loading commit data...
go Loading commit data...
hash Loading commit data...
html Loading commit data...
image Loading commit data...
index/suffixarray Loading commit data...
internal Loading commit data...
io Loading commit data...
log Loading commit data...
math Loading commit data...
mime Loading commit data...
net Loading commit data...
os Loading commit data...
path Loading commit data...
reflect Loading commit data...
regexp Loading commit data...
runtime Loading commit data...
sort Loading commit data...
strconv Loading commit data...
strings Loading commit data...
sync Loading commit data...
syscall Loading commit data...
testing Loading commit data...
text Loading commit data...
time Loading commit data...
unicode Loading commit data...
unsafe Loading commit data...
vendor/golang.org/x/net/http2/hpack Loading commit data...
Make.dist Loading commit data...
all.bash Loading commit data...
all.bat Loading commit data...
all.rc Loading commit data...
androidtest.bash Loading commit data...
bootstrap.bash Loading commit data...
buildall.bash Loading commit data...
clean.bash Loading commit data...
clean.bat Loading commit data...
clean.rc Loading commit data...
iostest.bash Loading commit data...
make.bash Loading commit data...
make.bat Loading commit data...
make.rc Loading commit data...
naclmake.bash Loading commit data...
nacltest.bash Loading commit data...
race.bash Loading commit data...
race.bat Loading commit data...
run.bash Loading commit data...
run.bat Loading commit data...
run.rc Loading commit data...