• David Chase's avatar
    cmd/compile: insert scheduling checks on loop backedges · 7f1ff65c
    David Chase authored
    Loop breaking with a counter.  Benchmarked (see comments),
    eyeball checked for sanity on popular loops.  This code
    ought to handle loops in general, and properly inserts phi
    functions in cases where the earlier version might not have.
    
    Includes test, plus modifications to test/run.go to deal with
    timeout and killing looping test.  Tests broken by the addition
    of extra code (branch frequency and live vars) for added
    checks turn the check insertion off.
    
    If GOEXPERIMENT=preemptibleloops, the compiler inserts reschedule
    checks on every backedge of every reducible loop.  Alternately,
    specifying GO_GCFLAGS=-d=ssa/insert_resched_checks/on will
    enable it for a single compilation, but because the core Go
    libraries contain some loops that may run long, this is less
    likely to have the desired effect.
    
    This is intended as a tool to help in the study and diagnosis
    of GC and other latency problems, now that goal STW GC latency
    is on the order of 100 microseconds or less.
    
    Updates #17831.
    Updates #10958.
    
    Change-Id: I6206c163a5b0248e3f21eb4fc65f73a179e1f639
    Reviewed-on: https://go-review.googlesource.com/33910
    Run-TryBot: David Chase <drchase@google.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-by: 's avatarKeith Randall <khr@golang.org>
    7f1ff65c
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...