Commit 8c5c44aa by Ian Lance Taylor

runtime: Add memprofilerate to GODEBUG

Add memprofilerate as a value recognized
in the GODEBUG env var.  The value provided
is used as the new setting for
runtime.MemProfileRate, allowing the user
to adjust memory profiling.

From-SVN: r220470
parent c4feb478
...@@ -39,6 +39,10 @@ a comma-separated list of name=val pairs. Supported names are: ...@@ -39,6 +39,10 @@ a comma-separated list of name=val pairs. Supported names are:
gcdead: setting gcdead=1 causes the garbage collector to clobber all stack slots gcdead: setting gcdead=1 causes the garbage collector to clobber all stack slots
that it thinks are dead. that it thinks are dead.
memprofilerate: setting memprofilerate=X changes the setting for
runtime.MemProfileRate. Refer to the description of this variable for how
it is used and its default value.
scheddetail: setting schedtrace=X and scheddetail=1 causes the scheduler to emit scheddetail: setting schedtrace=X and scheddetail=1 causes the scheduler to emit
detailed multiline info every X milliseconds, describing state of the scheduler, detailed multiline info every X milliseconds, describing state of the scheduler,
processors, threads and goroutines. processors, threads and goroutines.
......
...@@ -22,6 +22,10 @@ enum { ...@@ -22,6 +22,10 @@ enum {
// gotraceback value. // gotraceback value.
static uint32 traceback_cache = ~(uint32)0; static uint32 traceback_cache = ~(uint32)0;
extern volatile intgo runtime_MemProfileRate
__asm__ (GOSYM_PREFIX "runtime.MemProfileRate");
// The GOTRACEBACK environment variable controls the // The GOTRACEBACK environment variable controls the
// behavior of a Go program that is crashing and exiting. // behavior of a Go program that is crashing and exiting.
// GOTRACEBACK=0 suppress all tracebacks // GOTRACEBACK=0 suppress all tracebacks
...@@ -315,6 +319,11 @@ runtime_signalstack(byte *p, int32 n) ...@@ -315,6 +319,11 @@ runtime_signalstack(byte *p, int32 n)
DebugVars runtime_debug; DebugVars runtime_debug;
// Holds variables parsed from GODEBUG env var,
// except for "memprofilerate" since there is an
// existing var for that value which is int
// instead of in32 and might have an
// initial value.
static struct { static struct {
const char* name; const char* name;
int32* value; int32* value;
...@@ -349,7 +358,12 @@ runtime_parsedebugvars(void) ...@@ -349,7 +358,12 @@ runtime_parsedebugvars(void)
for(;;) { for(;;) {
for(i=0; i<(intgo)nelem(dbgvar); i++) { for(i=0; i<(intgo)nelem(dbgvar); i++) {
n = runtime_findnull((const byte*)dbgvar[i].name); n = runtime_findnull((const byte*)dbgvar[i].name);
if(runtime_mcmp(p, dbgvar[i].name, n) == 0 && p[n] == '=') if(runtime_mcmp(p, "memprofilerate", n) == 0 && p[n] == '=')
// Set the MemProfileRate directly since it
// is an int, not int32, and should only lbe
// set here if specified by GODEBUG
runtime_MemProfileRate = runtime_atoi(p+n+1);
else if(runtime_mcmp(p, dbgvar[i].name, n) == 0 && p[n] == '=')
*dbgvar[i].value = runtime_atoi(p+n+1); *dbgvar[i].value = runtime_atoi(p+n+1);
} }
p = (const byte *)runtime_strstr((const char *)p, ","); p = (const byte *)runtime_strstr((const char *)p, ",");
......
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