summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGleb Balykov <g.balykov@samsung.com>2019-04-26 17:04:38 +0300
committerJan Kotas <jkotas@microsoft.com>2019-04-26 07:04:38 -0700
commitf3a932ad6ebcb1135562843a53476e373f7b5de3 (patch)
tree8a0fbeddbb05a835c6fc9191517f6913df1ee88f
parent03e79408df6b14d36467cfc7eb30bd699f8d3849 (diff)
downloadcoreclr-f3a932ad6ebcb1135562843a53476e373f7b5de3.tar.gz
coreclr-f3a932ad6ebcb1135562843a53476e373f7b5de3.tar.bz2
coreclr-f3a932ad6ebcb1135562843a53476e373f7b5de3.zip
Add config value for jit host slab cache maximum size (#24254)
-rw-r--r--src/inc/clrconfigvalues.h2
-rw-r--r--src/vm/eeconfig.cpp4
-rw-r--r--src/vm/eeconfig.h4
-rw-r--r--src/vm/jithost.cpp2
4 files changed, 11 insertions, 1 deletions
diff --git a/src/inc/clrconfigvalues.h b/src/inc/clrconfigvalues.h
index 61258ae09c..3d8c26929d 100644
--- a/src/inc/clrconfigvalues.h
+++ b/src/inc/clrconfigvalues.h
@@ -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")
diff --git a/src/vm/eeconfig.cpp b/src/vm/eeconfig.cpp
index 9cb07fc2e8..0d4021fc88 100644
--- a/src/vm/eeconfig.cpp
+++ b/src/vm/eeconfig.cpp
@@ -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);
diff --git a/src/vm/eeconfig.h b/src/vm/eeconfig.h
index 3a22adc74a..aef34b3236 100644
--- a/src/vm/eeconfig.h
+++ b/src/vm/eeconfig.h
@@ -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
diff --git a/src/vm/jithost.cpp b/src/vm/jithost.cpp
index a037af4857..a3190bb6b5 100644
--- a/src/vm/jithost.cpp
+++ b/src/vm/jithost.cpp
@@ -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;