aboutsummaryrefslogtreecommitdiff
path: root/src/pkg/runtime/proc.c
diff options
context:
space:
mode:
authorDmitriy Vyukov <dvyukov@google.com>2011-07-12 10:56:21 -0700
committerRuss Cox <rsc@golang.org>2011-07-12 10:56:21 -0700
commit86e7323bdf8cb2c614ff6b63ca5909f484db8642 (patch)
tree1e69d90c47e21a5c28cffd979a7bdcbd268ed951 /src/pkg/runtime/proc.c
parent88e0c0517aa0dfdb45441bb361009cd4866afb22 (diff)
downloadgo-86e7323bdf8cb2c614ff6b63ca5909f484db8642.tar.xz
runtime: eliminate false sharing during stack growth
Remove static variable from runtime·oldstack(). Benchmark results on HP Z600 (2 x Xeon E5620, 8 HT cores, 2.40GHz) are as follows (with CL 4657091 applied): benchmark old ns/op new ns/op delta BenchmarkStackGrowth 1183.00 1180.00 -0.25% BenchmarkStackGrowth-2 1249.00 1211.00 -3.04% BenchmarkStackGrowth-4 954.00 805.00 -15.62% BenchmarkStackGrowth-8 701.00 683.00 -2.57% BenchmarkStackGrowth-16 465.00 415.00 -10.75% R=rsc CC=golang-dev https://golang.org/cl/4693042
Diffstat (limited to 'src/pkg/runtime/proc.c')
-rw-r--r--src/pkg/runtime/proc.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/pkg/runtime/proc.c b/src/pkg/runtime/proc.c
index 133203a3ac..17397ca821 100644
--- a/src/pkg/runtime/proc.c
+++ b/src/pkg/runtime/proc.c
@@ -709,7 +709,7 @@ runtime·oldstack(void)
uint32 argsize;
byte *sp;
G *g1;
- static int32 goid;
+ int32 goid;
//printf("oldstack m->cret=%p\n", m->cret);
@@ -723,6 +723,7 @@ runtime·oldstack(void)
runtime·mcpy(top->argp, sp, argsize);
}
goid = old.gobuf.g->goid; // fault if g is bad, before gogo
+ USED(goid);
if(old.free != 0)
runtime·stackfree(g1->stackguard - StackGuard, old.free);