1
0
mirror of https://github.com/golang/go synced 2024-11-22 09:14:40 -07:00

runtime: eliminate false sharing on runtime.goidgen

runtime.goidgen can be quite frequently modified and
shares cache line with the following variables,
it leads to false sharing.
50c6b0 b nfname
50c6b4 b nfunc
50c6b8 b nfunc$17
50c6bc b nhist$17
50c6c0 B runtime.checking
50c6c4 B runtime.gcwaiting
50c6c8 B runtime.goidgen
50c6cc B runtime.gomaxprocs
50c6d0 B runtime.panicking
50c6d4 B strconv.IntSize
50c6d8 B src/pkg/runtime/_xtest_.ss
50c6e0 B src/pkg/runtime/_xtest_.stop
50c6e8 b addrfree
50c6f0 b addrmem
50c6f8 b argv

R=golang-dev, rsc
CC=golang-dev
https://golang.org/cl/4673054
This commit is contained in:
Dmitriy Vyukov 2011-07-12 01:25:14 -04:00 committed by Russ Cox
parent 909f31872a
commit 013ad89c9b
2 changed files with 3 additions and 3 deletions

View File

@ -56,6 +56,7 @@ struct Sched {
Lock; Lock;
G *gfree; // available gs (status == Gdead) G *gfree; // available gs (status == Gdead)
int32 goidgen;
G *ghead; // gs waiting to run G *ghead; // gs waiting to run
G *gtail; G *gtail;
@ -907,8 +908,8 @@ runtime·newproc1(byte *fn, byte *argp, int32 narg, int32 nret, void *callerpc)
newg->gopc = (uintptr)callerpc; newg->gopc = (uintptr)callerpc;
runtime·sched.gcount++; runtime·sched.gcount++;
runtime·goidgen++; runtime·sched.goidgen++;
newg->goid = runtime·goidgen; newg->goid = runtime·sched.goidgen;
newprocreadylocked(newg); newprocreadylocked(newg);
schedunlock(); schedunlock();

View File

@ -369,7 +369,6 @@ extern Alg runtime·algarray[Amax];
extern String runtime·emptystring; extern String runtime·emptystring;
G* runtime·allg; G* runtime·allg;
M* runtime·allm; M* runtime·allm;
int32 runtime·goidgen;
extern int32 runtime·gomaxprocs; extern int32 runtime·gomaxprocs;
extern uint32 runtime·panicking; extern uint32 runtime·panicking;
extern int32 runtime·gcwaiting; // gc is waiting to run extern int32 runtime·gcwaiting; // gc is waiting to run