• Austin Clements's avatar
    runtime: reset mark state before stopping the world · af190578
    Austin Clements authored
    Currently we reset the mark state during STW sweep termination. This
    involves looping over all of the goroutines. Each iteration of this
    loop takes ~25ns, so at around 400k goroutines, we'll exceed our 10ms
    pause goal.
    
    However, it's safe to do this before we stop the world for sweep
    termination because nothing is consuming this state yet. Hence, move
    the reset to just before STW.
    
    This isn't perfect: a long reset can still delay allocating goroutines
    that block on GC starting. But it's certainly better to block some
    things eventually than to block everything immediately.
    
    For 1.6.x.
    
    Fixes #14420.
    
    name \ 95%ile-time/sweepTerm           old          new  delta
    500kIdleGs-12                 11312µs ± 6%  18.9µs ± 6%  -99.83%  (p=0.000 n=16+20)
    
    Change-Id: I9815c4d8d9b0d3c3e94dfdab78049cefe0dcc93c
    Reviewed-on: https://go-review.googlesource.com/20147Reviewed-by: 's avatarRick Hudson <rlh@golang.org>
    Run-TryBot: Austin Clements <austin@google.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-on: https://go-review.googlesource.com/22043Reviewed-by: 's avatarAustin Clements <austin@google.com>
    af190578
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...
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 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...
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...