• Austin Clements's avatar
    runtime: drive proportional sweep directly off heap_live · a5eb3dce
    Austin Clements authored
    Currently, proportional sweep maintains its own count of how many
    bytes have been allocated since the beginning of the sweep cycle so it
    can compute how many pages need to be swept for a given allocation.
    
    However, this requires a somewhat complex reimbursement scheme since
    proportional sweep must be done before a span is allocated, but we
    don't know how many bytes to charge until we've allocated a span. This
    means that the allocated byte count used by proportional sweep can go
    up and down, which has led to underflow bugs in the past (#18043) and
    is going to interfere with adjusting sweep pacing on-the-fly (for #19076).
    
    This approach also means we're maintaining a statistic that is very
    closely related to heap_live, but has a different 0 value. This is
    particularly confusing because the sweep ratio is computed based on
    heap_live, so you have to understand that these two statistics are
    very closely related.
    
    Replace all of this and compute the sweep debt directly from the
    current value of heap_live. To make this work, we simply save the
    value of heap_live when the sweep ratio is computed to use as a
    "basis" for later computing the sweep debt.
    
    This eliminates the need for reimbursement as well as the code for
    maintaining the sweeper's version of the live heap size.
    
    For #19076.
    
    Coincidentally fixes #18043, since this eliminates sweep reimbursement
    entirely.
    
    Change-Id: I1f931ddd6e90c901a3972c7506874c899251dc2a
    Reviewed-on: https://go-review.googlesource.com/39832
    Run-TryBot: Austin Clements <austin@google.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-by: 's avatarRick Hudson <rlh@golang.org>
    a5eb3dce
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...
plugin 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 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...
cmp.bash 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...