System.GC.HeapHardLimit and .HeapHardLimitPercent in runtimeconfig.json (#25574)
authorAndy Hanson <anhans@microsoft.com>
Thu, 11 Jul 2019 20:14:34 +0000 (13:14 -0700)
committerGitHub <noreply@github.com>
Thu, 11 Jul 2019 20:14:34 +0000 (13:14 -0700)
* System.GC.HeapHardLimit and .HeapHardLimitPercent in runtimeconfig.json

This adds two new configuration options, "System.GC.HeapHardLimit" and
"System.GC.HeapHardLimitPercent" to runtimeconfig.json. These behave the
same as COMPlus_GCHeapHardLimit and COMPlus_GCHeapHardLimitPercent.

* Add cast

* Dummy change to trigger tests rerun

src/vm/eeconfig.cpp
src/vm/eeconfig.h
src/vm/gcenv.ee.cpp

index e3b9d8a..cdf2411 100644 (file)
@@ -815,6 +815,12 @@ fTrackDynamicMethodDebugInfo = CLRConfig::GetConfigValue(CLRConfig::UNSUPPORTED_
     if (!iGCgen0size) iGCgen0size = GetConfigDWORD_DontUse_(CLRConfig::UNSUPPORTED_GCgen0size, iGCgen0size);
 #endif //_WIN64
 
+    const ULONGLONG ullHeapHardLimit = Configuration::GetKnobULONGLONGValue(W("System.GC.HeapHardLimit"));
+    iGCHeapHardLimit = FitsIn<size_t, ULONGLONG>(ullHeapHardLimit)
+        ? static_cast<size_t>(ullHeapHardLimit)
+        : ClrSafeInt<size_t>::MaxInt();
+    iGCHeapHardLimitPercent = Configuration::GetKnobDWORDValue(W("System.GC.HeapHardLimitPercent"), 0);
+
     if (g_IGCHoardVM)
         iGCHoardVM = g_IGCHoardVM;
     else
index 4d80650..928bac0 100644 (file)
@@ -613,6 +613,8 @@ public:
     int     GetGCHeapCount()                const {LIMITED_METHOD_CONTRACT; return iGCHeapCount;}
     int     GetGCNoAffinitize ()            const {LIMITED_METHOD_CONTRACT; return iGCNoAffinitize;}
     size_t  GetGCAffinityMask()             const {LIMITED_METHOD_CONTRACT; return iGCAffinityMask;}
+    size_t  GetGCHeapHardLimit()            const {LIMITED_METHOD_CONTRACT; return iGCHeapHardLimit;}
+    int     GetGCHeapHardLimitPercent()     const {LIMITED_METHOD_CONTRACT; return iGCHeapHardLimitPercent;}
 
 #ifdef GCTRIMCOMMIT
 
@@ -918,6 +920,8 @@ private: //----------------------------------------------------------------
     int  iGCHeapCount;
     int  iGCNoAffinitize;
     size_t  iGCAffinityMask;
+    size_t iGCHeapHardLimit;
+    int iGCHeapHardLimitPercent;
 
 #ifdef GCTRIMCOMMIT
 
index e4d3153..a0cd5a9 100644 (file)
@@ -1097,6 +1097,18 @@ bool GCToEEInterface::GetIntConfigValue(const char* key, int64_t* value)
         return true;
     }
 
+    if (strcmp(key, "GCHeapHardLimit") == 0)
+    {
+        *value = g_pConfig->GetGCHeapHardLimit();
+        return true;
+    }
+
+    if (strcmp(key, "GCHeapHardLimitPercent") == 0)
+    {
+        *value = g_pConfig->GetGCHeapHardLimitPercent();
+        return true;
+    }
+
     if (strcmp(key, "GCLOHThreshold") == 0)
     {
         *value = g_pConfig->GetGCLOHThreshold();