• Austin Clements's avatar
    runtime: close window that hides GC work from concurrent mark · c1f7a56f
    Austin Clements authored
    Currently we enter mark 2 by first flushing all existing gcWork caches
    and then setting gcBlackenPromptly, which disables further gcWork
    caching. However, if a worker or assist pulls a work buffer in to its
    gcWork cache after that cache has been flushed but before caching is
    disabled, that work may remain in that cache until mark termination.
    If that work represents a heap bottleneck (e.g., a single pointer that
    is the only way to reach a large amount of the heap), this can force
    mark termination to do a large amount of work, resulting in a long
    STW.
    
    Fix this by reversing the order of these steps: first disable caching,
    then flush all existing caches.
    
    Rick Hudson <rlh> did the hard work of tracking this down. This CL
    combined with CL 12672 and CL 12646 distills the critical parts of his
    fix from CL 12539.
    
    Fixes #11694.
    
    Change-Id: Ib10d0a21e3f6170a80727d0286f9990df049fed2
    Reviewed-on: https://go-review.googlesource.com/12688Reviewed-by: 's avatarRick Hudson <rlh@golang.org>
    c1f7a56f
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...
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...