mirror of
https://github.com/golang/go
synced 2024-11-27 05:01:19 -07:00
runtime: move stack shrinking until after sweepgen is incremented.
Before GC, we flush all the per-P allocation caches. Doing stack shrinking mid-GC causes these caches to fill up. At the end of gc, the sweepgen is incremented which causes all of the data in these caches to be in a bad state (cached but not yet swept). Move the stack shrinking until after sweepgen is incremented, so any caching that happens as part of shrinking is done with already-swept data. Reenable stack copying. LGTM=bradfitz R=golang-codereviews, bradfitz CC=golang-codereviews https://golang.org/cl/69620043
This commit is contained in:
parent
0399b971d9
commit
e9445547b6
@ -1601,9 +1601,6 @@ addstackroots(G *gp, Workbuf **wbufp)
|
||||
if((mp = gp->m) != nil && mp->helpgc)
|
||||
runtime·throw("can't scan gchelper stack");
|
||||
|
||||
// Shrink stack if not much of it is being used.
|
||||
runtime·shrinkstack(gp);
|
||||
|
||||
if(gp->syscallstack != (uintptr)nil) {
|
||||
// Scanning another goroutine that is about to enter or might
|
||||
// have just exited a system call. It may be executing code such
|
||||
@ -2426,6 +2423,11 @@ gc(struct gc_args *args)
|
||||
gcstats.npausesweep++;
|
||||
}
|
||||
|
||||
// Shrink a stack if not much of it is being used.
|
||||
// TODO: do in a parfor
|
||||
for(i = 0; i < runtime·allglen; i++)
|
||||
runtime·shrinkstack(runtime·allg[i]);
|
||||
|
||||
runtime·MProf_GC();
|
||||
}
|
||||
|
||||
|
@ -174,7 +174,6 @@ runtime·schedinit(void)
|
||||
procresize(procs);
|
||||
|
||||
runtime·copystack = runtime·precisestack;
|
||||
runtime·copystack = false; // TODO: remove
|
||||
p = runtime·getenv("GOCOPYSTACK");
|
||||
if(p != nil && !runtime·strcmp(p, (byte*)"0"))
|
||||
runtime·copystack = false;
|
||||
|
Loading…
Reference in New Issue
Block a user