Skip to content

Commit f6174b9

Browse files
authored
Enable Tiered Compilation by default (dotnet#19525)
Enable Tiered Compilation by default 1) Changes the default state of the tiered compilation feature check to be ON BY DEFAULT 2) Removed comments about the source about this being a work in progress. Although it will surely continue to evolve and improve, remaining issues would be better tracked in our issue tracking system with the same default presumption as other runtime features - assume it works unless noted otherwise. 3) Adjusts a number of tests and automated scripts that made assumptions that the default setting of this feature is off. 4) Stop accepting the deprecated env var COMPLUS_EXPERIMENTAL_TieredCompilation. I'm not aware it has any remaining usage but if so we're going to find out. 5) Adjust config names for JitBench
1 parent a81d910 commit f6174b9

File tree

12 files changed

+54
-64
lines changed

12 files changed

+54
-64
lines changed

Documentation/project-docs/clr-configuration-knobs.md

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ Name | Description | Type
1717

1818
## Environment/Registry Configuration Knobs
1919

20-
This table was machine-generated using `clr-configuration-knobs.csx` script from repository commit [8611986](https://github.com/dotnet/coreclr/commit/861198647dc232ecaf05b4a8e2f10605e7a22537) on 4/30/2018. It might be out of date. To generate latest documentation run `{dotnet} csi clr-configuration-knobs.csx` from this file directory.
20+
This table was machine-generated using `clr-configuration-knobs.csx` script from repository commit [79aadb8](https://github.com/dotnet/coreclr/commit/79aadb8c6455e30065cbd817e3ec5b52d17f3dce) on 6/12/2018. It might be out of date. To generate latest documentation run `{dotnet} csi clr-configuration-knobs.csx` from this file directory.
2121

2222
When using these configurations from environment variables, the variables need to have the `COMPlus_` prefix in their names. e.g. To set DumpJittedMethods to 1, add the environment variable `COMPlus_DumpJittedMethods=1`.
2323

@@ -769,8 +769,7 @@ Name | Description | Type | Class | Default Value | Flags
769769

770770
Name | Description | Type | Class | Default Value | Flags
771771
-----|-------------|------|-------|---------------|-------
772-
`EXPERIMENTAL_TieredCompilation` | Deprecated - Use COMPLUS_TieredCompilation | `DWORD` | `UNSUPPORTED` | `0` |
773-
`TieredCompilation` | Enables tiered compilation | `DWORD` | `EXTERNAL` | `0` |
772+
`TieredCompilation` | Enables tiered compilation | `DWORD` | `EXTERNAL` | `1` |
774773
`TieredCompilation_Test_CallCounting` | Enabled by default (only activates when TieredCompilation is also enabled). If disabled immediately backpatches prestub, and likely prevents any tier1 promotion | `DWORD` | `UNSUPPORTED` | `1` |
775774
`TieredCompilation_Test_OptimizeTier0` | Use optimized codegen (normally used by tier1) in tier0 | `DWORD` | `UNSUPPORTED` | `0` |
776775
`TieredCompilation_Tier1CallCountingDelayMs` | Delay in milliseconds since process startup or the last tier 0 JIT before call counting begins for tier 1 promotion. | `DWORD` | `UNSUPPORTED` | `100` |

src/inc/clrconfigvalues.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -651,8 +651,7 @@ RETAIL_CONFIG_DWORD_INFO(INTERNAL_HillClimbing_GainExponent,
651651
/// Tiered Compilation
652652
///
653653
#ifdef FEATURE_TIERED_COMPILATION
654-
RETAIL_CONFIG_DWORD_INFO(EXTERNAL_TieredCompilation, W("TieredCompilation"), 0, "Enables tiered compilation")
655-
RETAIL_CONFIG_DWORD_INFO(UNSUPPORTED_LEGACY_TieredCompilation, W("EXPERIMENTAL_TieredCompilation"), 0, "Deprecated - Use COMPLUS_TieredCompilation")
654+
RETAIL_CONFIG_DWORD_INFO(EXTERNAL_TieredCompilation, W("TieredCompilation"), 1, "Enables tiered compilation")
656655
RETAIL_CONFIG_DWORD_INFO(UNSUPPORTED_TieredCompilation_Tier1CallCountThreshold, W("TieredCompilation_Tier1CallCountThreshold"), 30, "Number of times a method must be called after which it is promoted to tier 1.")
657656
RETAIL_CONFIG_DWORD_INFO(UNSUPPORTED_TieredCompilation_Tier1CallCountingDelayMs, W("TieredCompilation_Tier1CallCountingDelayMs"), 100, "A perpetual delay in milliseconds that is applied to tier 1 call counting and jitting, while there is tier 0 activity.")
658657
RETAIL_CONFIG_DWORD_INFO(UNSUPPORTED_TieredCompilation_Tier1DelaySingleProcMultiplier, W("TieredCompilation_Tier1DelaySingleProcMultiplier"), 10, "Multiplier for TieredCompilation_Tier1CallCountingDelayMs that is applied on a single-processor machine or when the process is affinitized to a single processor.")

src/vm/eeconfig.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1237,9 +1237,7 @@ HRESULT EEConfig::sync()
12371237
dwSleepOnExit = CLRConfig::GetConfigValue(CLRConfig::UNSUPPORTED_SleepOnExit);
12381238

12391239
#if defined(FEATURE_TIERED_COMPILATION)
1240-
fTieredCompilation = Configuration::GetKnobBooleanValue(W("System.Runtime.TieredCompilation"), CLRConfig::EXTERNAL_TieredCompilation) ||
1241-
//this older name is deprecated, but still accepted for a time. Preserving it is a very small overhead not to needlessly break things.
1242-
CLRConfig::GetConfigValue(CLRConfig::UNSUPPORTED_LEGACY_TieredCompilation) != 0;
1240+
fTieredCompilation = Configuration::GetKnobBooleanValue(W("System.Runtime.TieredCompilation"), CLRConfig::EXTERNAL_TieredCompilation) != 0;
12431241

12441242
fTieredCompilation_CallCounting = CLRConfig::GetConfigValue(CLRConfig::UNSUPPORTED_TieredCompilation_Test_CallCounting) != 0;
12451243
fTieredCompilation_OptimizeTier0 = CLRConfig::GetConfigValue(CLRConfig::UNSUPPORTED_TieredCompilation_Test_OptimizeTier0) != 0;

src/vm/tieredcompilation.cpp

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,6 @@
2020
// handles logistics of getting new code created and installed.
2121
//
2222
//
23-
// # Current feature state
24-
//
25-
// This feature is a work in progress. It should be functionally correct for a
26-
// good range of scenarios, but performance varies by scenario. To enable it
27-
// you need to set COMPLUS_TieredCompilation = 1. This feature has been
28-
// tested with all of our runtime and CoreFX functional tests, as well as
29-
// diagnostics tests and various partner testing in Visual Studio.
30-
//
31-
//
3223
// # Important entrypoints in this code:
3324
//
3425
//

tests/runtest.cmd

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ if /i "%1" == "CoreFXTestsAll" (set __CoreFXTests=true&set __CoreFXTestsR
8484
if /i "%1" == "CoreFXTestList" (set __CoreFXTests=true&set __CoreFXTestList=%2&shift&shift&goto Arg_Loop)
8585
if /i "%1" == "runcrossgentests" (set RunCrossGen=true&shift&goto Arg_Loop)
8686
if /i "%1" == "link" (set DoLink=true&set ILLINK=%2&shift&shift&goto Arg_Loop)
87+
REM tieredcompilation is on by default now, but setting this environment variable is harmless and I didn't want to break any automation that might be using it just yet
8788
if /i "%1" == "tieredcompilation" (set COMPLUS_TieredCompilation=1&shift&goto Arg_Loop)
8889
if /i "%1" == "gcname" (set COMPlus_GCName=%2&shift&shift&goto Arg_Loop)
8990
if /i "%1" == "timeout" (set __TestTimeout=%2&shift&shift&goto Arg_Loop)

tests/scripts/run-xunit-perf.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -457,8 +457,9 @@ def main(args):
457457
# Set up environment for running tests
458458
if optLevel == 'min_opts':
459459
myEnv['COMPlus_JITMinOpts'] = '1'
460-
elif optLevel == 'tiered':
461-
myEnv['COMPLUS_TieredCompilation'] = '1'
460+
myEnv['COMPLUS_TieredCompilation'] = '0'
461+
elif optLevel == 'full_opt':
462+
myEnv['COMPLUS_TieredCompilation'] = '0'
462463

463464
if not 'XUNIT_PERFORMANCE_MAX_ITERATION' in myEnv:
464465
myEnv['XUNIT_PERFORMANCE_MAX_ITERATION'] = '21'

tests/src/CLRTest.Execute.Bash.targets

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -81,11 +81,17 @@ then
8181
exit $(GCBashScriptExitCode)
8282
fi
8383
]]></BashCLRTestEnvironmentCompatibilityCheck>
84-
<BashCLRTestEnvironmentCompatibilityCheck Condition="'$(JitOptimizationSensitive)' == 'true'"><![CDATA[
84+
<BashCLRTestEnvironmentCompatibilityCheck Condition="'$(JitOptimizationSensitive)' == 'true'">
85+
<![CDATA[
8586
$(BashCLRTestEnvironmentCompatibilityCheck)
86-
if [[ ( ! -z "$COMPlus_JitStress" ) || ( ! -z "$COMPlus_JitStressRegs" ) || ( ! -z "$COMPlus_JITMinOpts" ) || ( ! -z "$COMPlus_TailcallStress" ) || ( ! -z "$COMPlus_EXPERIMENTAL_TieredCompilation" ) || ( ! -z "$COMPlus_TieredCompilation" ) ]]
87+
if [[ ( ! -z "$COMPlus_JitStress" ) || ( ! -z "$COMPlus_JitStressRegs" ) || ( ! -z "$COMPlus_JITMinOpts" ) || ( ! -z "$COMPlus_TailcallStress" ) ]]
88+
then
89+
echo "SKIPPING EXECUTION BECAUSE ONE OR MORE OF (COMPlus_JitStress, COMPlus_JitStressRegs, COMPlus_JITMinOpts, COMPlus_TailcallStress) IS SET"
90+
exit $(GCBashScriptExitCode)
91+
fi
92+
if [[ "$COMPlus_TieredCompilation" != "0" ]]
8793
then
88-
echo "SKIPPING EXECUTION BECAUSE ONE OR MORE OF (COMPlus_JitStress, COMPlus_JitStressRegs, COMPlus_JITMinOpts, COMPlus_TailcallStress, COMPlus_EXPERIMENTAL_TieredCompilation, COMPlus_TieredCompilation) IS SET"
94+
echo "SKIPPING EXECUTION BECAUSE COMPlus_TieredCompilation has not been disabled and this test is marked JitOptimizationSensitive"
8995
exit $(GCBashScriptExitCode)
9096
fi
9197
]]></BashCLRTestEnvironmentCompatibilityCheck>

tests/src/CLRTest.Execute.Batch.targets

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,13 +76,19 @@ IF NOT "%COMPlus_GCStress%"=="" (
7676
Exit /b 0
7777
)
7878
]]></BatchCLRTestEnvironmentCompatibilityCheck>
79-
<BatchCLRTestEnvironmentCompatibilityCheck Condition="'$(JitOptimizationSensitive)' == 'true'"><![CDATA[
79+
<BatchCLRTestEnvironmentCompatibilityCheck Condition="'$(JitOptimizationSensitive)' == 'true'">
80+
<![CDATA[
8081
$(BatchCLRTestEnvironmentCompatibilityCheck)
81-
IF "%COMPlus_JitStress%"=="" IF "%COMPlus_JitStressRegs%"=="" IF "%COMPlus_JITMinOpts%"=="" IF "%COMPlus_TailcallStress%"=="" IF "%COMPlus_EXPERIMENTAL_TieredCompilation%"=="" IF "%COMPlus_TieredCompilation%"=="" goto :Compatible1
82-
ECHO SKIPPING EXECUTION BECAUSE ONE OR MORE OF (COMPlus_JitStress, COMPlus_JitStressRegs, COMPlus_JITMinOpts, COMPlus_TailcallStress, COMPlus_EXPERIMENTAL_TieredCompilation, COMPlus_TieredCompilation) IS SET
82+
IF "%COMPlus_JitStress%"=="" IF "%COMPlus_JitStressRegs%"=="" IF "%COMPlus_JITMinOpts%"=="" IF "%COMPlus_TailcallStress%"=="" IF "%COMPlus_TieredCompilation%"=="" goto :Compatible1
83+
ECHO SKIPPING EXECUTION BECAUSE ONE OR MORE OF (COMPlus_JitStress, COMPlus_JitStressRegs, COMPlus_JITMinOpts, COMPlus_TailcallStress, COMPlus_TieredCompilation) IS SET
8384
popd
8485
Exit /b 0
8586
:Compatible1
87+
IF "%COMPlus_TieredCompilation%"=="0" goto :Compatible2
88+
ECHO SKIPPING EXECUTION BECAUSE COMPlus_TieredCompilation has not been disabled and this test is marked JitOptimizationSensitive
89+
popd
90+
Exit /b 0
91+
:Compatible2
8692
]]></BatchCLRTestEnvironmentCompatibilityCheck>
8793
<BatchCLRTestEnvironmentCompatibilityCheck Condition="'$(HeapVerifyIncompatible)' == 'true'"><![CDATA[
8894
$(BatchCLRTestEnvironmentCompatibilityCheck)

tests/src/baseservices/exceptions/stacktrace/Tier1StackTrace.csproj

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,5 @@
1919
<ItemGroup>
2020
<Compile Include="Tier1StackTrace.cs" />
2121
</ItemGroup>
22-
<PropertyGroup>
23-
<CLRTestBatchPreCommands><![CDATA[
24-
$(CLRTestBatchPreCommands)
25-
set COMPlus_TieredCompilation=1
26-
]]></CLRTestBatchPreCommands>
27-
<BashCLRTestPreCommands><![CDATA[
28-
$(BashCLRTestPreCommands)
29-
export COMPlus_TieredCompilation=1
30-
]]></BashCLRTestPreCommands>
31-
</PropertyGroup>
3222
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
3323
</Project>

tests/src/performance/Scenario/JitBench/Runner/BenchmarkConfiguration.cs

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,22 +11,19 @@ public BenchmarkConfiguration()
1111
Name = "Default";
1212
EnvironmentVariables = new Dictionary<string, string>();
1313
}
14+
1415
public bool IsDefault { get { return Name == "Default"; } }
1516
public string Name { get; set; }
1617
public Dictionary<string, string> EnvironmentVariables { get; private set; }
1718

18-
public BenchmarkConfiguration WithTiering()
19+
public BenchmarkConfiguration WithoutTiering()
1920
{
20-
return WithModifier("Tiering", "COMPLUS_TieredCompilation", "1");
21+
return WithModifier("NoTiering", "COMPlus_TieredCompilation", "0");
2122
}
2223

2324
public BenchmarkConfiguration WithMinOpts()
2425
{
25-
BenchmarkConfiguration configuration =
26-
WithModifier("Minopts", "COMPLUS_JitMinOpts", "1").
27-
WithModifier("Tiering", "COMPLUS_TieredCompilation", "0");
28-
configuration.Name = "Minopts";
29-
return configuration;
26+
return WithModifier("Minopts", "COMPlus_JitMinOpts", "1");
3027
}
3128

3229
public BenchmarkConfiguration WithNoR2R()
@@ -36,7 +33,7 @@ public BenchmarkConfiguration WithNoR2R()
3633

3734
public BenchmarkConfiguration WithNoNgen()
3835
{
39-
return WithModifier("NoNgen", "COMPLUS_ZapDisable", "1");
36+
return WithModifier("NoNgen", "COMPlus_ZapDisable", "1");
4037
}
4138

4239
private BenchmarkConfiguration WithModifier(string modifier, string variableName, string variableValue)

0 commit comments

Comments
 (0)