Skip to content

Commit

Permalink
runtime: eliminate false sharing on runtime.goidgen
Browse files Browse the repository at this point in the history
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
  • Loading branch information
dvyukov authored and rsc committed Jul 12, 2011
1 parent 909f318 commit 013ad89
Show file tree
Hide file tree
Showing 2 changed files with 3 additions and 3 deletions.
5 changes: 3 additions & 2 deletions src/pkg/runtime/proc.c
Expand Up @@ -56,6 +56,7 @@ struct Sched {
Lock;

G *gfree; // available gs (status == Gdead)
int32 goidgen;

G *ghead; // gs waiting to run
G *gtail;
Expand Down Expand Up @@ -907,8 +908,8 @@ runtime·newproc1(byte *fn, byte *argp, int32 narg, int32 nret, void *callerpc)
newg->gopc = (uintptr)callerpc;

runtime·sched.gcount++;
runtime·goidgen++;
newg->goid = runtime·goidgen;
runtime·sched.goidgen++;
newg->goid = runtime·sched.goidgen;

newprocreadylocked(newg);
schedunlock();
Expand Down
1 change: 0 additions & 1 deletion src/pkg/runtime/runtime.h
Expand Up @@ -369,7 +369,6 @@ extern Alg runtime·algarray[Amax];
extern String runtime·emptystring;
G* runtime·allg;
M* runtime·allm;
int32 runtime·goidgen;
extern int32 runtime·gomaxprocs;
extern uint32 runtime·panicking;
extern int32 runtime·gcwaiting; // gc is waiting to run
Expand Down

0 comments on commit 013ad89

Please sign in to comment.