diff --git a/src/pkg/runtime/extern.go b/src/pkg/runtime/extern.go index a5bea7e46d7..1a2d9c21a29 100644 --- a/src/pkg/runtime/extern.go +++ b/src/pkg/runtime/extern.go @@ -46,6 +46,8 @@ a comma-separated list of name=val pairs. Supported names are: schedtrace: setting schedtrace=X causes the scheduler to emit a single line to standard error every X milliseconds, summarizing the scheduler state. + scavenge: scavenge=1 enables debugging mode of heap scavenger. + The GOMAXPROCS variable limits the number of operating system threads that can execute user-level Go code simultaneously. There is no limit to the number of threads that can be blocked in system calls on behalf of Go code; those do not count against diff --git a/src/pkg/runtime/proc.c b/src/pkg/runtime/proc.c index ce0f74aa6c8..483903d6d9b 100644 --- a/src/pkg/runtime/proc.c +++ b/src/pkg/runtime/proc.c @@ -2632,10 +2632,15 @@ sysmon(void) G *gp; // If we go two minutes without a garbage collection, force one to run. - forcegcperiod = 2*60*1e6; + forcegcperiod = 2*60*1e9; // If a heap span goes unused for 5 minutes after a garbage collection, // we hand it back to the operating system. - scavengelimit = 5*60*1e6; + scavengelimit = 5*60*1e9; + if(runtime·debug.scavenge > 0) { + // Scavenge-a-lot for testing. + forcegcperiod = 10*1e6; + scavengelimit = 20*1e6; + } lastscavenge = runtime·nanotime(); nscavenge = 0; // Make wake-up period small enough for the sampling to be correct. diff --git a/src/pkg/runtime/runtime.c b/src/pkg/runtime/runtime.c index 275fffb347d..b1960088da7 100644 --- a/src/pkg/runtime/runtime.c +++ b/src/pkg/runtime/runtime.c @@ -302,6 +302,7 @@ runtime·tickspersecond(void) return res; } +#pragma dataflag NOPTR DebugVars runtime·debug; static struct { @@ -314,6 +315,7 @@ static struct { {"gcdead", &runtime·debug.gcdead}, {"scheddetail", &runtime·debug.scheddetail}, {"schedtrace", &runtime·debug.schedtrace}, + {"scavenge", &runtime·debug.scavenge}, }; void diff --git a/src/pkg/runtime/runtime.h b/src/pkg/runtime/runtime.h index 4f63fdf7184..8d4773b9f7a 100644 --- a/src/pkg/runtime/runtime.h +++ b/src/pkg/runtime/runtime.h @@ -562,6 +562,7 @@ struct DebugVars int32 gcdead; int32 scheddetail; int32 schedtrace; + int32 scavenge; }; extern bool runtime·precisestack;