• Austin Clements's avatar
    runtime: remove stack barriers during concurrent mark · 269c969c
    Austin Clements authored
    Currently we remove stack barriers during STW mark termination, which
    has a non-trivial per-goroutine cost and means that we have to touch
    even clean stacks during mark termination. However, there's no problem
    with leaving them in during the sweep phase. They just have to be out
    by the time we install new stack barriers immediately prior to
    scanning the stack such as during the mark phase of the next GC cycle
    or during mark termination in a STW GC.
    
    Hence, move the gcRemoveStackBarriers from STW mark termination to
    just before we install new stack barriers during concurrent mark. This
    removes the cost from STW. Furthermore, this combined with concurrent
    stack shrinking means that the mark termination scan of a clean stack
    is a complete no-op, which will make it possible to skip clean stacks
    entirely during mark termination.
    
    This has the downside that it will mess up anything outside of Go that
    tries to walk Go stacks all the time instead of just some of the time.
    This includes tools like GDB, perf, and VTune. We'll improve the
    situation shortly.
    
    Change-Id: Ia40baad8f8c16aeefac05425e00b0cf478137097
    Reviewed-on: https://go-review.googlesource.com/20667Reviewed-by: 's avatarRick Hudson <rlh@golang.org>
    Run-TryBot: Austin Clements <austin@google.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    269c969c
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...