Add config value for jit host slab cache maximum size (#24254)
authorGleb Balykov <g.balykov@samsung.com>
Fri, 26 Apr 2019 14:04:38 +0000 (17:04 +0300)
committerJan Kotas <jkotas@microsoft.com>
Fri, 26 Apr 2019 14:04:38 +0000 (07:04 -0700)
src/inc/clrconfigvalues.h
src/vm/eeconfig.cpp
src/vm/eeconfig.h
src/vm/jithost.cpp

index 61258ae..3d8c269 100644 (file)
@@ -369,6 +369,8 @@ RETAIL_CONFIG_DWORD_INFO(UNSUPPORTED_StackSamplingNumMethods, W("StackSamplingNu
 RETAIL_CONFIG_STRING_INFO_EX(INTERNAL_AltJitNgen, W("AltJitNgen"), "Enables AltJit for NGEN and selectively limits it to the specified methods.", CLRConfig::REGUTIL_default)
 #endif // defined(ALLOW_SXS_JIT_NGEN)
 
+RETAIL_CONFIG_DWORD_INFO(EXTERNAL_JitHostMaxSlabCache, W("JitHostMaxSlabCache"), 0x1000000, "Sets jit host max slab cache size, 16MB default")
+
 RETAIL_CONFIG_DWORD_INFO_DIRECT_ACCESS(EXTERNAL_JitOptimizeType, W("JitOptimizeType"), "")
 RETAIL_CONFIG_DWORD_INFO_EX(EXTERNAL_JitPrintInlinedMethods, W("JitPrintInlinedMethods"), 0, "", CLRConfig::REGUTIL_default)
 RETAIL_CONFIG_DWORD_INFO(EXTERNAL_JitTelemetry, W("JitTelemetry"), 1, "If non-zero, gather JIT telemetry data")
index 9cb07fc..0d4021f 100644 (file)
@@ -211,6 +211,8 @@ HRESULT EEConfig::Init()
     dwSpinRetryCount = 0xA;
     dwMonitorSpinCount = 0;
 
+    dwJitHostMaxSlabCache = 0;
+
     iJitOptimizeType = OPT_DEFAULT;
     fJitFramed = false;
     fJitAlignLoops = false;
@@ -1003,6 +1005,8 @@ HRESULT EEConfig::sync()
     dwSpinRetryCount = CLRConfig::GetConfigValue(CLRConfig::EXTERNAL_SpinRetryCount);
     dwMonitorSpinCount = CLRConfig::GetConfigValue(CLRConfig::INTERNAL_Monitor_SpinCount);
 
+    dwJitHostMaxSlabCache = CLRConfig::GetConfigValue(CLRConfig::EXTERNAL_JitHostMaxSlabCache);
+
     fJitFramed = (GetConfigDWORD_DontUse_(CLRConfig::UNSUPPORTED_JitFramed, fJitFramed) != 0);
     fJitAlignLoops = (GetConfigDWORD_DontUse_(CLRConfig::UNSUPPORTED_JitAlignLoops, fJitAlignLoops) != 0);
     fJitMinOpts = (GetConfigDWORD_DontUse_(CLRConfig::UNSUPPORTED_JITMinOpts, fJitMinOpts) == 1);
index 3a22adc..aef34b3 100644 (file)
@@ -272,6 +272,8 @@ public:
     DWORD         MonitorSpinCount(void)          const {LIMITED_METHOD_CONTRACT;  return dwMonitorSpinCount; }
 
     // Jit-config
+
+    DWORD         JitHostMaxSlabCache(void)         const {LIMITED_METHOD_CONTRACT;  return dwJitHostMaxSlabCache; }
     
     unsigned int  GenOptimizeType(void)             const {LIMITED_METHOD_CONTRACT;  return iJitOptimizeType; }
     bool          JitFramed(void)                   const {LIMITED_METHOD_CONTRACT;  return fJitFramed; }
@@ -782,6 +784,8 @@ private: //----------------------------------------------------------------
 
     // Jit-config
 
+    DWORD dwJitHostMaxSlabCache; // max size for jit host slab cache
+
     bool fJitFramed;           // Enable/Disable EBP based frames
     bool fJitAlignLoops;       // Enable/Disable loop alignment
     bool fAddRejitNops;        // Enable/Disable nop padding for rejit.          default is true
index a037af4..a3190bb 100644 (file)
@@ -119,7 +119,7 @@ void JitHost::freeSlab(void* slab, size_t actualSize)
     {
         CrstHolder lock(&m_jitSlabAllocatorCrst);
 
-        if (m_totalCached < 0x1000000) // Do not cache more than 16MB
+        if (m_totalCached < g_pConfig->JitHostMaxSlabCache()) // Do not cache more than maximum allowed value
         {
             m_totalCached += actualSize;