]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: change default stack segment size to 8 kB
authorRuss Cox <rsc@golang.org>
Thu, 3 Oct 2013 13:19:10 +0000 (09:19 -0400)
committerRuss Cox <rsc@golang.org>
Thu, 3 Oct 2013 13:19:10 +0000 (09:19 -0400)
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

src/pkg/runtime/stack.h

index 2784a8620f13faf1505a82674ba23c7c13b860e8..296eb688de5f9185b3132fdcaf7519660a1d9192 100644 (file)
@@ -71,12 +71,12 @@ enum {
 
        // The amount of extra stack to allocate beyond the size
        // needed for the single frame that triggered the split.
-       StackExtra = 1024,
+       StackExtra = 2048,
 
        // The minimum stack segment size to allocate.
        // If the amount needed for the splitting frame + StackExtra
        // is less than this number, the stack will have this size instead.
-       StackMin = 4096,
+       StackMin = 8192,
        FixedStack = StackMin + StackSystem,
 
        // Functions that need frames bigger than this use an extra