]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: restore scavenger constants
authorDmitriy Vyukov <dvyukov@google.com>
Mon, 25 Aug 2014 19:30:39 +0000 (23:30 +0400)
committerDmitriy Vyukov <dvyukov@google.com>
Mon, 25 Aug 2014 19:30:39 +0000 (23:30 +0400)
Once and for all.
Broken in cl/108640043.
I've messed it before. To test scavenger-related changes
one needs to alter the constants during final testing.
And then it's very easy to submit with the altered constants.

LGTM=rsc
R=golang-codereviews
CC=golang-codereviews, rsc
https://golang.org/cl/136720044

src/pkg/runtime/extern.go
src/pkg/runtime/proc.c
src/pkg/runtime/runtime.c
src/pkg/runtime/runtime.h

index a5bea7e46d7a56ce2e145dede9949f58640af7a1..1a2d9c21a29a346203bf22adc6aeef41c5538893 100644 (file)
@@ -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
index ce0f74aa6c8d72f3ee30b37f06df7185b8acfcc3..483903d6d9b8a4634578ca961d07a5849028885e 100644 (file)
@@ -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.
index 275fffb347d81b01d8c00f58a4cf11b01a62db13..b1960088da7724ff1cd29dad5e4987d8263dd89d 100644 (file)
@@ -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
index 4f63fdf71849f2121609cdc263c790392ed42891..8d4773b9f7a503c66036955f28167630528e6e8a 100644 (file)
@@ -562,6 +562,7 @@ struct DebugVars
        int32   gcdead;
        int32   scheddetail;
        int32   schedtrace;
+       int32   scavenge;
 };
 
 extern bool runtime·precisestack;