From: Dmitriy Vyukov Date: Tue, 12 Jul 2011 17:56:21 +0000 (-0700) Subject: runtime: eliminate false sharing during stack growth X-Git-Tag: weekly.2011-07-19~104 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=86e7323bdf8cb2c614ff6b63ca5909f484db8642;p=gostls13.git 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 --- 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);