aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2014-05-20 00:30:46 -0400
committerRuss Cox <rsc@golang.org>2014-05-20 00:30:46 -0400
commit6aee29648fce3af20507787035ae22d06d75d39b (patch)
treebfb6f25736a0013636aab174e299d425c62a3e2e
parent60be4a245049218e3d56ce8d49d22f2847ebec3f (diff)
downloadgo-6aee29648fce3af20507787035ae22d06d75d39b.tar.gz
go-6aee29648fce3af20507787035ae22d06d75d39b.zip
runtime: switch default stack size back to 8kB
The move from 4kB to 8kB in Go 1.2 was to eliminate many stack split hot spots. The move back to 4kB was predicated on copying stacks eliminating the potential for hot spots. Unfortunately, the fact that stacks do not copy 100% of the time means that hot spots can still happen under the right conditions, and the slowdown is worse now than it was in Go 1.2. There is a real program in issue 8030 that sees about a 30x slowdown: it has a reflect call near the top of the stack which inhibits any stack copying on that segment. Go back to 8kB until stack copying can be used 100% of the time. Fixes #8030. LGTM=khr, dave, iant R=iant, khr, r, bradfitz, dave CC=golang-codereviews https://golang.org/cl/92540043
-rw-r--r--doc/go1.3.html7
-rw-r--r--src/pkg/runtime/stack.h2
2 files changed, 1 insertions, 8 deletions
diff --git a/doc/go1.3.html b/doc/go1.3.html
index fa9e3f7784..5404f4ec66 100644
--- a/doc/go1.3.html
+++ b/doc/go1.3.html
@@ -118,13 +118,6 @@ Details including performance numbers are in this
<a href="http://golang.org/s/contigstacks">design document</a>.
</p>
-<h3 id="stack_size">Stack size</h3>
-
-<p>
-Go 1.2 increased the minimum stack size to 8 kilobytes; with the new stack model, it has been
-put back to 4 kilobytes.
-</p>
-
<h3 id="garbage_collector">Changes to the garbage collector</h3>
<p>
diff --git a/src/pkg/runtime/stack.h b/src/pkg/runtime/stack.h
index a3a5d83a64..18ab30b69b 100644
--- a/src/pkg/runtime/stack.h
+++ b/src/pkg/runtime/stack.h
@@ -76,7 +76,7 @@ enum {
// 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,
StackSystemRounded = StackSystem + (-StackSystem & (StackMin-1)),
FixedStack = StackMin + StackSystemRounded,