• Russ Cox's avatar
    cmd/gc: emit write barriers · fcb4cabb
    Russ Cox authored
    A write *p = x that needs a write barrier (not all do)
    now turns into runtime.writebarrierptr(p, x)
    or one of the other variants.
    
    The write barrier implementations are trivial.
    The goal here is to emit the calls in the correct places
    and to incur the cost of those function calls in the Go 1.4 cycle.
    
    Performance on the Go 1 benchmark suite below.
    Remember, the goal is to slow things down (and be correct).
    
    We will look into optimizations in separate CLs, as part of
    the process of comparing Go 1.3 against tip in order to make
    sure Go 1.4 runs at least as fast as Go 1.3.
    
    benchmark                          old ns/op      new ns/op      delta
    BenchmarkBinaryTree17              3118336716     3452876110     +10.73%
    BenchmarkFannkuch11                3184497677     3211552284     +0.85%
    BenchmarkFmtFprintfEmpty           89.9           107            +19.02%
    BenchmarkFmtFprintfString          236            287            +21.61%
    BenchmarkFmtFprintfInt             246            278            +13.01%
    BenchmarkFmtFprintfIntInt          395            458            +15.95%
    BenchmarkFmtFprintfPrefixedInt     343            378            +10.20%
    BenchmarkFmtFprintfFloat           477            525            +10.06%
    BenchmarkFmtManyArgs               1446           1707           +18.05%
    BenchmarkGobDecode                 14398047       14685958       +2.00%
    BenchmarkGobEncode                 12557718       12947104       +3.10%
    BenchmarkGzip                      453462345      472413285      +4.18%
    BenchmarkGunzip                    114226016      115127398      +0.79%
    BenchmarkHTTPClientServer          114689         112122         -2.24%
    BenchmarkJSONEncode                24914536       26135942       +4.90%
    BenchmarkJSONDecode                86832877       103620289      +19.33%
    BenchmarkMandelbrot200             4833452        4898780        +1.35%
    BenchmarkGoParse                   4317976        4835474        +11.98%
    BenchmarkRegexpMatchEasy0_32       150            166            +10.67%
    BenchmarkRegexpMatchEasy0_1K       393            402            +2.29%
    BenchmarkRegexpMatchEasy1_32       125            142            +13.60%
    BenchmarkRegexpMatchEasy1_1K       1010           1236           +22.38%
    BenchmarkRegexpMatchMedium_32      232            301            +29.74%
    BenchmarkRegexpMatchMedium_1K      76963          102721         +33.47%
    BenchmarkRegexpMatchHard_32        3833           5463           +42.53%
    BenchmarkRegexpMatchHard_1K        119668         161614         +35.05%
    BenchmarkRevcomp                   763449047      706768534      -7.42%
    BenchmarkTemplate                  124954724      134834549      +7.91%
    BenchmarkTimeParse                 517            511            -1.16%
    BenchmarkTimeFormat                501            514            +2.59%
    
    benchmark                         old MB/s     new MB/s     speedup
    BenchmarkGobDecode                53.31        52.26        0.98x
    BenchmarkGobEncode                61.12        59.28        0.97x
    BenchmarkGzip                     42.79        41.08        0.96x
    BenchmarkGunzip                   169.88       168.55       0.99x
    BenchmarkJSONEncode               77.89        74.25        0.95x
    BenchmarkJSONDecode               22.35        18.73        0.84x
    BenchmarkGoParse                  13.41        11.98        0.89x
    BenchmarkRegexpMatchEasy0_32      213.30       191.72       0.90x
    BenchmarkRegexpMatchEasy0_1K      2603.92      2542.74      0.98x
    BenchmarkRegexpMatchEasy1_32      254.00       224.93       0.89x
    BenchmarkRegexpMatchEasy1_1K      1013.53      827.98       0.82x
    BenchmarkRegexpMatchMedium_32     4.30         3.31         0.77x
    BenchmarkRegexpMatchMedium_1K     13.30        9.97         0.75x
    BenchmarkRegexpMatchHard_32       8.35         5.86         0.70x
    BenchmarkRegexpMatchHard_1K       8.56         6.34         0.74x
    BenchmarkRevcomp                  332.92       359.62       1.08x
    BenchmarkTemplate                 15.53        14.39        0.93x
    
    LGTM=rlh
    R=rlh
    CC=dvyukov, golang-codereviews, iant, khr, r
    https://golang.org/cl/136380043
    fcb4cabb
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/syscall Loading commit data...
io Loading commit data...
lib9 Loading commit data...
libbio Loading commit data...
liblink 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...
clean.bash Loading commit data...
clean.bat Loading commit data...
clean.rc 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...
sudo.bash Loading commit data...