• Russ Cox's avatar
    runtime: change default stack segment size to 8 kB · 408238e2
    Russ Cox authored
    Changing from 4 kB to 8 kB brings significant improvement
    on a variety of the Go 1 benchmarks, on both amd64
    and 386 systems.
    
    Significant runtime reductions:
    
              amd64  386
    GoParse    -14%  -1%
    GobDecode  -12% -20%
    GobEncode  -64%  -1%
    JSONDecode  -9%  -4%
    JSONEncode -15%  -5%
    Template   -17% -14%
    
    In the longer term, khr's new stacks will avoid needing to
    make this decision at all, but for Go 1.2 this is a reasonable
    stopgap that makes performance significantly better.
    
    Demand paging should mean that if the second 4 kB is not
    used, it will not be brought into memory, so the change
    should not adversely affect resident set size.
    The same argument could justify bumping as high as 64 kB
    on 64-bit machines, but there are diminishing returns
    after 8 kB, and using 8 kB limits the possible unintended
    memory overheads we are not aware of.
    
    Benchmark graphs at
    http://swtch.com/~rsc/gostackamd64.html
    http://swtch.com/~rsc/gostack386.html
    
    Full data at
    http://swtch.com/~rsc/gostack.zip
    
    R=golang-dev, khr, dave, bradfitz, dvyukov
    CC=golang-dev
    https://golang.org/cl/14317043
    408238e2
stack.h 3.93 KB