Commit 192bccbf authored by Dmitriy Vyukov's avatar Dmitriy Vyukov

runtime: shrink stacks in parallel

Shrinkstack does not touch normal heap anymore,
so we can shink stacks concurrently with marking.

LGTM=khr
R=golang-codereviews, khr
CC=golang-codereviews, khr, rlh, rsc
https://golang.org/cl/122130043
parent af403c08
...@@ -559,6 +559,8 @@ markroot(ParFor *desc, uint32 i) ...@@ -559,6 +559,8 @@ markroot(ParFor *desc, uint32 i)
// needed only to output in traceback // needed only to output in traceback
if((gp->status == Gwaiting || gp->status == Gsyscall) && gp->waitsince == 0) if((gp->status == Gwaiting || gp->status == Gsyscall) && gp->waitsince == 0)
gp->waitsince = work.tstart; gp->waitsince = work.tstart;
// Shrink a stack if not much of it is being used.
runtime·shrinkstack(gp);
scanstack(gp); scanstack(gp);
break; break;
...@@ -1391,7 +1393,6 @@ gc(struct gc_args *args) ...@@ -1391,7 +1393,6 @@ gc(struct gc_args *args)
int64 t0, t1, t2, t3, t4; int64 t0, t1, t2, t3, t4;
uint64 heap0, heap1, obj; uint64 heap0, heap1, obj;
GCStats stats; GCStats stats;
uint32 i;
if(runtime·debug.allocfreetrace) if(runtime·debug.allocfreetrace)
runtime·tracegc(); runtime·tracegc();
...@@ -1514,11 +1515,6 @@ gc(struct gc_args *args) ...@@ -1514,11 +1515,6 @@ gc(struct gc_args *args)
sweep.npausesweep++; sweep.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(); runtime·MProf_GC();
g->m->traceback = 0; g->m->traceback = 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment