• Austin Clements's avatar
    runtime: fix background marking at 25% utilization · e0c3d85f
    Austin Clements authored
    Currently, in accordance with the GC pacing proposal, we schedule
    background marking with a goal of achieving 25% utilization *total*
    between mutator assists and background marking. This is stricter than
    was set out in the Go 1.5 proposal, which suggests that the garbage
    collector can use 25% just for itself and anything the mutator does to
    help out is on top of that. It also has several technical
    drawbacks. Because mutator assist time is constantly changing and we
    can't have instantaneous information on background marking time, it
    effectively requires hitting a moving target based on out-of-date
    information. This works out in the long run, but works poorly for
    short GC cycles and on short time scales. Also, this requires
    time-multiplexing all Ps between the mutator and background GC since
    the goal utilization of background GC constantly fluctuates. This
    results in a complicated scheduling algorithm, poor affinity, and
    extra overheads from context switching.
    
    This change modifies the way we schedule and run background marking so
    that background marking always consumes 25% of GOMAXPROCS and mutator
    assist is in addition to this. This enables a much more robust
    scheduling algorithm where we pre-determine the number of Ps we should
    dedicate to background marking as well as the utilization goal for a
    single floating "remainder" mark worker.
    
    Change-Id: I187fa4c03ab6fe78012a84d95975167299eb9168
    Reviewed-on: https://go-review.googlesource.com/9013Reviewed-by: 's avatarRick Hudson <rlh@golang.org>
    e0c3d85f
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...
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...