• Russ Cox's avatar
    runtime: do not scan stack by frames during garbage collection · c3dadca9
    Russ Cox authored
    Walking the stack by frames is ~3x more expensive
    than not, and since it didn't end up being precise,
    there is not enough benefit to outweigh the cost.
    
    This is the conservative choice: this CL makes the
    stack scanning behavior the same as it was in Go 1.1.
    
    Add benchmarks to package runtime so that we have
    them when we re-enable this feature during the
    Go 1.3 development.
    
    benchmark                     old ns/op    new ns/op    delta
    BenchmarkGoroutineSelect        3194909      1272092  -60.18%
    BenchmarkGoroutineBlocking      3120282       866366  -72.23%
    BenchmarkGoroutineForRange      3256179       939902  -71.13%
    BenchmarkGoroutineIdle          2005571       482982  -75.92%
    
    The Go 1 benchmarks, just to add more data.
    As far as I can tell the changes are mainly noise.
    
    benchmark                         old ns/op    new ns/op    delta
    BenchmarkBinaryTree17            4409403046   4414734932   +0.12%
    BenchmarkFannkuch11              3407708965   3378306120   -0.86%
    BenchmarkFmtFprintfEmpty                100           99   -0.60%
    BenchmarkFmtFprintfString               242          239   -1.24%
    BenchmarkFmtFprintfInt                  204          206   +0.98%
    BenchmarkFmtFprintfIntInt               320          316   -1.25%
    BenchmarkFmtFprintfPrefixedInt          295          299   +1.36%
    BenchmarkFmtFprintfFloat                442          435   -1.58%
    BenchmarkFmtManyArgs                   1246         1216   -2.41%
    BenchmarkGobDecode                 10186951     10051210   -1.33%
    BenchmarkGobEncode                 16504381     16445650   -0.36%
    BenchmarkGzip                     447030885    447056865   +0.01%
    BenchmarkGunzip                   111056154    111696305   +0.58%
    BenchmarkHTTPClientServer             89973        93040   +3.41%
    BenchmarkJSONEncode                28174182     27933893   -0.85%
    BenchmarkJSONDecode               106353777    110443817   +3.85%
    BenchmarkMandelbrot200              4822289      4806083   -0.34%
    BenchmarkGoParse                    6102436      6142734   +0.66%
    BenchmarkRegexpMatchEasy0_32            133          132   -0.75%
    BenchmarkRegexpMatchEasy0_1K            372          373   +0.27%
    BenchmarkRegexpMatchEasy1_32            113          111   -1.77%
    BenchmarkRegexpMatchEasy1_1K            964          940   -2.49%
    BenchmarkRegexpMatchMedium_32           202          205   +1.49%
    BenchmarkRegexpMatchMedium_1K         68862        68858   -0.01%
    BenchmarkRegexpMatchHard_32            3480         3407   -2.10%
    BenchmarkRegexpMatchHard_1K          108255       112614   +4.03%
    BenchmarkRevcomp                  751393035    743929976   -0.99%
    BenchmarkTemplate                 139637041    135402220   -3.03%
    BenchmarkTimeParse                      479          475   -0.84%
    BenchmarkTimeFormat                     460          466   +1.30%
    
    benchmark                          old MB/s     new MB/s  speedup
    BenchmarkGobDecode                    75.34        76.36    1.01x
    BenchmarkGobEncode                    46.50        46.67    1.00x
    BenchmarkGzip                         43.41        43.41    1.00x
    BenchmarkGunzip                      174.73       173.73    0.99x
    BenchmarkJSONEncode                   68.87        69.47    1.01x
    BenchmarkJSONDecode                   18.25        17.57    0.96x
    BenchmarkGoParse                       9.49         9.43    0.99x
    BenchmarkRegexpMatchEasy0_32         239.58       241.74    1.01x
    BenchmarkRegexpMatchEasy0_1K        2749.74      2738.00    1.00x
    BenchmarkRegexpMatchEasy1_32         282.49       286.32    1.01x
    BenchmarkRegexpMatchEasy1_1K        1062.00      1088.96    1.03x
    BenchmarkRegexpMatchMedium_32          4.93         4.86    0.99x
    BenchmarkRegexpMatchMedium_1K         14.87        14.87    1.00x
    BenchmarkRegexpMatchHard_32            9.19         9.39    1.02x
    BenchmarkRegexpMatchHard_1K            9.46         9.09    0.96x
    BenchmarkRevcomp                     338.26       341.65    1.01x
    BenchmarkTemplate                     13.90        14.33    1.03x
    
    Fixes #6482.
    
    R=golang-dev, dave, r
    CC=golang-dev
    https://golang.org/cl/14257043
    c3dadca9
malloc_test.go 2.73 KB