Commit 3ec60c25 authored by Russ Cox's avatar Russ Cox

runtime: emit collection stacks in GODEBUG=allocfreetrace mode

R=khr, dvyukov
CC=golang-codereviews
https://golang.org/cl/51830043
parent e0dcf73d
......@@ -521,6 +521,7 @@ enum
void runtime·MProf_Malloc(void*, uintptr, uintptr);
void runtime·MProf_Free(Bucket*, void*, uintptr);
void runtime·MProf_GC(void);
void runtime·MProf_TraceGC(void);
int32 runtime·gcprocs(void);
void runtime·helpgc(int32 nproc);
void runtime·gchelper(void);
......
......@@ -2163,6 +2163,9 @@ runtime·gc(int32 force)
a.start_time = runtime·nanotime();
m->gcing = 1;
runtime·stoptheworld();
if(runtime·debug.allocfreetrace)
runtime·MProf_TraceGC();
clearpools();
......
......@@ -173,6 +173,18 @@ printstackframes(uintptr *stk, int32 nstk)
}
}
// Called by collector to report a gc in allocfreetrace mode.
void
runtime·MProf_TraceGC(void)
{
uintptr stk[32];
int32 nstk;
nstk = runtime·callers(1, stk, nelem(stk));
runtime·printf("MProf_TraceGC\n");
printstackframes(stk, nstk);
}
// Called by malloc to record a profiled block.
void
runtime·MProf_Malloc(void *p, uintptr size, uintptr typ)
......@@ -183,14 +195,14 @@ runtime·MProf_Malloc(void *p, uintptr size, uintptr typ)
int8 *name;
int32 nstk;
nstk = runtime·callers(1, stk, 32);
nstk = runtime·callers(1, stk, nelem(stk));
runtime·lock(&proflock);
if(runtime·debug.allocfreetrace) {
if(runtime·debug.allocfreetrace) {
type = (Type*)(typ & ~3);
name = typeinfoname(typ & 3);
runtime·printf("MProf_Malloc(p=%p, size=%p, type=%p <%s", p, size, type, name);
if(type != nil)
runtime·printf(" of %S", *type->string);
runtime·printf(" of %S", *type->string);
runtime·printf(">)\n");
printstackframes(stk, nstk);
}
......@@ -247,7 +259,7 @@ runtime·blockevent(int64 cycles, int32 skip)
if(rate <= 0 || (rate > cycles && runtime·fastrand1()%rate > cycles))
return;
nstk = runtime·callers(skip, stk, 32);
nstk = runtime·callers(skip, stk, nelem(stk));
runtime·lock(&proflock);
b = stkbucket(BProf, stk, nstk, true);
b->count++;
......
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