1
0
mirror of https://github.com/golang/go synced 2024-11-19 11:04:47 -07:00

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
This commit is contained in:
Dmitriy Vyukov 2011-07-12 10:56:21 -07:00 committed by Russ Cox
parent 88e0c0517a
commit 86e7323bdf

View File

@ -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);