mirror of
https://github.com/golang/go
synced 2024-11-24 01:30:10 -07:00
runtime: emit collection stacks in GODEBUG=allocfreetrace mode
R=khr, dvyukov CC=golang-codereviews https://golang.org/cl/51830043
This commit is contained in:
parent
e0dcf73d61
commit
3ec60c253d
@ -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++;
|
||||
|
Loading…
Reference in New Issue
Block a user