Commit 3c4be235 authored by Lynn Boger's avatar Lynn Boger Committed by Ian Lance Taylor

runtime: Add memprofrate value to GODEBUG

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

Change-Id: If129a247683263b11e2dd42473cf9b31280543d5
Reviewed-on: https://go-review.googlesource.com/3450Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
parent 3c0fee10
...@@ -45,6 +45,10 @@ a comma-separated list of name=val pairs. Supported names are: ...@@ -45,6 +45,10 @@ a comma-separated list of name=val pairs. Supported names are:
This should only be used as a temporary workaround to diagnose buggy code. This should only be used as a temporary workaround to diagnose buggy code.
The real fix is to not store integers in pointer-typed locations. The real fix is to not store integers in pointer-typed locations.
memprofrate: setting memprofrate=X will update the value of runtime.MemProfileRate.
When set to 0 memory profiling is disabled. Refer to the description of
MemProfileRate for the 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.
......
...@@ -308,7 +308,10 @@ type dbgVar struct { ...@@ -308,7 +308,10 @@ type dbgVar struct {
// TODO(rsc): Make GC respect debug.invalidptr. // TODO(rsc): Make GC respect debug.invalidptr.
// Holds variables parsed from GODEBUG env var. // Holds variables parsed from GODEBUG env var,
// except for "memprofrate" since there is an
// existing int var for that value, which may
// already have an initial value.
var debug struct { var debug struct {
allocfreetrace int32 allocfreetrace int32
efence int32 efence int32
...@@ -352,9 +355,17 @@ func parsedebugvars() { ...@@ -352,9 +355,17 @@ func parsedebugvars() {
continue continue
} }
key, value := field[:i], field[i+1:] key, value := field[:i], field[i+1:]
for _, v := range dbgvars {
if v.name == key { // Update MemProfileRate directly here since it
*v.value = int32(atoi(value)) // int, not int32, and should only be updated
// if specified in GODEBUG.
if key == "memprofrate" {
MemProfileRate = atoi(value)
} else {
for _, v := range dbgvars {
if v.name == key {
*v.value = int32(atoi(value))
}
} }
} }
} }
......
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