mirror of
https://github.com/golang/go
synced 2024-11-20 10:24:40 -07:00
runtime: include bootstrap m in mcpu accounting
R=rsc, dvyukov CC=golang-dev https://golang.org/cl/5307052
This commit is contained in:
parent
d72267ae23
commit
2572ca2ff2
@ -128,6 +128,8 @@ Sched runtime·sched;
|
||||
int32 runtime·gomaxprocs;
|
||||
bool runtime·singleproc;
|
||||
|
||||
static bool canaddmcpu(void);
|
||||
|
||||
// An m that is waiting for notewakeup(&m->havenextg). This may
|
||||
// only be accessed while the scheduler lock is held. This is used to
|
||||
// minimize the number of times we call notewakeup while the scheduler
|
||||
@ -202,6 +204,10 @@ runtime·schedinit(void)
|
||||
setmcpumax(runtime·gomaxprocs);
|
||||
runtime·singleproc = runtime·gomaxprocs == 1;
|
||||
|
||||
canaddmcpu(); // mcpu++ to account for bootstrap m
|
||||
m->helpgc = 1; // flag to tell schedule() to mcpu--
|
||||
runtime·sched.grunning++;
|
||||
|
||||
mstats.enablegc = 1;
|
||||
m->nomemprof--;
|
||||
}
|
||||
@ -811,6 +817,7 @@ schedule(G *gp)
|
||||
readylocked(gp);
|
||||
}
|
||||
} else if(m->helpgc) {
|
||||
// Bootstrap m or new m started by starttheworld.
|
||||
// atomic { mcpu-- }
|
||||
v = runtime·xadd(&runtime·sched.atomic, -1<<mcpuShift);
|
||||
if(atomic_mcpu(v) > maxgomaxprocs)
|
||||
@ -818,6 +825,10 @@ schedule(G *gp)
|
||||
// Compensate for increment in starttheworld().
|
||||
runtime·sched.grunning--;
|
||||
m->helpgc = 0;
|
||||
} else if(m->nextg != nil) {
|
||||
// New m started by matchmg.
|
||||
} else {
|
||||
runtime·throw("invalid m state in scheduler");
|
||||
}
|
||||
|
||||
// Find (or wait for) g to run. Unlocks runtime·sched.
|
||||
|
Loading…
Reference in New Issue
Block a user