Separate large perf benchmarks into their own legs (#15231)
authorMichelle McDaniel <adiaaida@gmail.com>
Mon, 4 Dec 2017 22:01:07 +0000 (14:01 -0800)
committerGitHub <noreply@github.com>
Mon, 4 Dec 2017 22:01:07 +0000 (14:01 -0800)
Separate large perf benchmarks into their own legs

This change splits the windows perf test stages into 6 pipelined legs per flavor to reduce the amount of time we spend running the perf tests and reduce the total time of the job. This change also decreases the size of the stashed bin directory by deleting the obj directory. Finally, we move the benchstones suite into one directory (moving BenchF and BenchI into a shared dir called Benchstones)

90 files changed:
buildpipeline/perf-pipeline.groovy
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchF/Adams/Adams.cs [moved from tests/src/JIT/Performance/CodeQuality/BenchF/Adams/Adams.cs with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchF/Adams/Adams.csproj [moved from tests/src/JIT/Performance/CodeQuality/BenchF/Adams/Adams.csproj with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchF/BenchMk2/BenchMk2.cs [moved from tests/src/JIT/Performance/CodeQuality/BenchF/BenchMk2/BenchMk2.cs with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchF/BenchMk2/BenchMk2.csproj [moved from tests/src/JIT/Performance/CodeQuality/BenchF/BenchMk2/BenchMk2.csproj with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchF/BenchMrk/BenchMrk.cs [moved from tests/src/JIT/Performance/CodeQuality/BenchF/BenchMrk/BenchMrk.cs with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchF/BenchMrk/BenchMrk.csproj [moved from tests/src/JIT/Performance/CodeQuality/BenchF/BenchMrk/BenchMrk.csproj with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchF/Bisect/Bisect.cs [moved from tests/src/JIT/Performance/CodeQuality/BenchF/Bisect/Bisect.cs with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchF/Bisect/Bisect.csproj [moved from tests/src/JIT/Performance/CodeQuality/BenchF/Bisect/Bisect.csproj with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchF/DMath/DMath.cs [moved from tests/src/JIT/Performance/CodeQuality/BenchF/DMath/DMath.cs with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchF/DMath/DMath.csproj [moved from tests/src/JIT/Performance/CodeQuality/BenchF/DMath/DMath.csproj with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchF/FFT/FFT.cs [moved from tests/src/JIT/Performance/CodeQuality/BenchF/FFT/FFT.cs with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchF/FFT/FFT.csproj [moved from tests/src/JIT/Performance/CodeQuality/BenchF/FFT/FFT.csproj with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchF/InProd/InProd.cs [moved from tests/src/JIT/Performance/CodeQuality/BenchF/InProd/InProd.cs with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchF/InProd/InProd.csproj [moved from tests/src/JIT/Performance/CodeQuality/BenchF/InProd/InProd.csproj with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchF/InvMt/InvMt.cs [moved from tests/src/JIT/Performance/CodeQuality/BenchF/InvMt/InvMt.cs with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchF/InvMt/InvMt.csproj [moved from tests/src/JIT/Performance/CodeQuality/BenchF/InvMt/InvMt.csproj with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchF/LLoops/LLoops.cs [moved from tests/src/JIT/Performance/CodeQuality/BenchF/LLoops/LLoops.cs with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchF/LLoops/LLoops.csproj [moved from tests/src/JIT/Performance/CodeQuality/BenchF/LLoops/LLoops.csproj with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchF/LLoops/THIRD-PARTY-NOTICES [moved from tests/src/JIT/Performance/CodeQuality/BenchF/LLoops/THIRD-PARTY-NOTICES with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchF/Lorenz/Lorenz.cs [moved from tests/src/JIT/Performance/CodeQuality/BenchF/Lorenz/Lorenz.cs with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchF/Lorenz/Lorenz.csproj [moved from tests/src/JIT/Performance/CodeQuality/BenchF/Lorenz/Lorenz.csproj with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchF/MatInv4/MatInv4.cs [moved from tests/src/JIT/Performance/CodeQuality/BenchF/MatInv4/MatInv4.cs with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchF/MatInv4/MatInv4.csproj [moved from tests/src/JIT/Performance/CodeQuality/BenchF/MatInv4/MatInv4.csproj with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchF/NewtE/NewtE.cs [moved from tests/src/JIT/Performance/CodeQuality/BenchF/NewtE/NewtE.cs with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchF/NewtE/NewtE.csproj [moved from tests/src/JIT/Performance/CodeQuality/BenchF/NewtE/NewtE.csproj with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchF/NewtR/NewtR.cs [moved from tests/src/JIT/Performance/CodeQuality/BenchF/NewtR/NewtR.cs with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchF/NewtR/NewtR.csproj [moved from tests/src/JIT/Performance/CodeQuality/BenchF/NewtR/NewtR.csproj with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchF/Regula/Regula.cs [moved from tests/src/JIT/Performance/CodeQuality/BenchF/Regula/Regula.cs with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchF/Regula/Regula.csproj [moved from tests/src/JIT/Performance/CodeQuality/BenchF/Regula/Regula.csproj with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchF/Romber/Romber.cs [moved from tests/src/JIT/Performance/CodeQuality/BenchF/Romber/Romber.cs with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchF/Romber/Romber.csproj [moved from tests/src/JIT/Performance/CodeQuality/BenchF/Romber/Romber.csproj with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchF/Secant/Secant.cs [moved from tests/src/JIT/Performance/CodeQuality/BenchF/Secant/Secant.cs with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchF/Secant/Secant.csproj [moved from tests/src/JIT/Performance/CodeQuality/BenchF/Secant/Secant.csproj with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchF/Simpsn/Simpsn.cs [moved from tests/src/JIT/Performance/CodeQuality/BenchF/Simpsn/Simpsn.cs with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchF/Simpsn/Simpsn.csproj [moved from tests/src/JIT/Performance/CodeQuality/BenchF/Simpsn/Simpsn.csproj with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchF/SqMtx/SqMtx.cs [moved from tests/src/JIT/Performance/CodeQuality/BenchF/SqMtx/SqMtx.cs with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchF/SqMtx/SqMtx.csproj [moved from tests/src/JIT/Performance/CodeQuality/BenchF/SqMtx/SqMtx.csproj with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchF/Trap/Trap.cs [moved from tests/src/JIT/Performance/CodeQuality/BenchF/Trap/Trap.cs with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchF/Trap/Trap.csproj [moved from tests/src/JIT/Performance/CodeQuality/BenchF/Trap/Trap.csproj with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchF/Whetsto/Whetsto.cs [moved from tests/src/JIT/Performance/CodeQuality/BenchF/Whetsto/Whetsto.cs with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchF/Whetsto/Whetsto.csproj [moved from tests/src/JIT/Performance/CodeQuality/BenchF/Whetsto/Whetsto.csproj with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchI/8Queens/8Queens.cs [moved from tests/src/JIT/Performance/CodeQuality/BenchI/8Queens/8Queens.cs with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchI/8Queens/8Queens.csproj [moved from tests/src/JIT/Performance/CodeQuality/BenchI/8Queens/8Queens.csproj with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchI/Ackermann/Ackermann.cs [moved from tests/src/JIT/Performance/CodeQuality/BenchI/Ackermann/Ackermann.cs with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchI/Ackermann/Ackermann.csproj [moved from tests/src/JIT/Performance/CodeQuality/BenchI/Ackermann/Ackermann.csproj with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchI/AddArray/AddArray.cs [moved from tests/src/JIT/Performance/CodeQuality/BenchI/AddArray/AddArray.cs with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchI/AddArray/AddArray.csproj [moved from tests/src/JIT/Performance/CodeQuality/BenchI/AddArray/AddArray.csproj with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchI/AddArray2/AddArray2.cs [moved from tests/src/JIT/Performance/CodeQuality/BenchI/AddArray2/AddArray2.cs with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchI/AddArray2/AddArray2.csproj [moved from tests/src/JIT/Performance/CodeQuality/BenchI/AddArray2/AddArray2.csproj with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchI/Array1/Array1.cs [moved from tests/src/JIT/Performance/CodeQuality/BenchI/Array1/Array1.cs with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchI/Array1/Array1.csproj [moved from tests/src/JIT/Performance/CodeQuality/BenchI/Array1/Array1.csproj with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchI/Array2/Array2.cs [moved from tests/src/JIT/Performance/CodeQuality/BenchI/Array2/Array2.cs with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchI/Array2/Array2.csproj [moved from tests/src/JIT/Performance/CodeQuality/BenchI/Array2/Array2.csproj with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchI/BenchE/BenchE.cs [moved from tests/src/JIT/Performance/CodeQuality/BenchI/BenchE/BenchE.cs with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchI/BenchE/BenchE.csproj [moved from tests/src/JIT/Performance/CodeQuality/BenchI/BenchE/BenchE.csproj with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchI/BubbleSort/BubbleSort.cs [moved from tests/src/JIT/Performance/CodeQuality/BenchI/BubbleSort/BubbleSort.cs with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchI/BubbleSort/BubbleSort.csproj [moved from tests/src/JIT/Performance/CodeQuality/BenchI/BubbleSort/BubbleSort.csproj with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchI/BubbleSort2/BubbleSort2.cs [moved from tests/src/JIT/Performance/CodeQuality/BenchI/BubbleSort2/BubbleSort2.cs with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchI/BubbleSort2/BubbleSort2.csproj [moved from tests/src/JIT/Performance/CodeQuality/BenchI/BubbleSort2/BubbleSort2.csproj with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchI/CSieve/CSieve.cs [moved from tests/src/JIT/Performance/CodeQuality/BenchI/CSieve/CSieve.cs with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchI/CSieve/CSieve.csproj [moved from tests/src/JIT/Performance/CodeQuality/BenchI/CSieve/CSieve.csproj with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchI/Fib/Fib.cs [moved from tests/src/JIT/Performance/CodeQuality/BenchI/Fib/Fib.cs with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchI/Fib/Fib.csproj [moved from tests/src/JIT/Performance/CodeQuality/BenchI/Fib/Fib.csproj with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchI/HeapSort/HeapSort.cs [moved from tests/src/JIT/Performance/CodeQuality/BenchI/HeapSort/HeapSort.cs with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchI/HeapSort/HeapSort.csproj [moved from tests/src/JIT/Performance/CodeQuality/BenchI/HeapSort/HeapSort.csproj with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchI/IniArray/IniArray.cs [moved from tests/src/JIT/Performance/CodeQuality/BenchI/IniArray/IniArray.cs with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchI/IniArray/IniArray.csproj [moved from tests/src/JIT/Performance/CodeQuality/BenchI/IniArray/IniArray.csproj with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchI/LogicArray/LogicArray.cs [moved from tests/src/JIT/Performance/CodeQuality/BenchI/LogicArray/LogicArray.cs with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchI/LogicArray/LogicArray.csproj [moved from tests/src/JIT/Performance/CodeQuality/BenchI/LogicArray/LogicArray.csproj with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchI/Midpoint/Midpoint.cs [moved from tests/src/JIT/Performance/CodeQuality/BenchI/Midpoint/Midpoint.cs with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchI/Midpoint/Midpoint.csproj [moved from tests/src/JIT/Performance/CodeQuality/BenchI/Midpoint/Midpoint.csproj with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchI/MulMatrix/MulMatrix.cs [moved from tests/src/JIT/Performance/CodeQuality/BenchI/MulMatrix/MulMatrix.cs with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchI/MulMatrix/MulMatrix.csproj [moved from tests/src/JIT/Performance/CodeQuality/BenchI/MulMatrix/MulMatrix.csproj with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchI/NDhrystone/NDhrystone.cs [moved from tests/src/JIT/Performance/CodeQuality/BenchI/NDhrystone/NDhrystone.cs with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchI/NDhrystone/NDhrystone.csproj [moved from tests/src/JIT/Performance/CodeQuality/BenchI/NDhrystone/NDhrystone.csproj with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchI/Permutate/Permutate.cs [moved from tests/src/JIT/Performance/CodeQuality/BenchI/Permutate/Permutate.cs with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchI/Permutate/Permutate.csproj [moved from tests/src/JIT/Performance/CodeQuality/BenchI/Permutate/Permutate.csproj with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchI/Pi/Pi.cs [moved from tests/src/JIT/Performance/CodeQuality/BenchI/Pi/Pi.cs with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchI/Pi/Pi.csproj [moved from tests/src/JIT/Performance/CodeQuality/BenchI/Pi/Pi.csproj with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchI/Puzzle/Puzzle.cs [moved from tests/src/JIT/Performance/CodeQuality/BenchI/Puzzle/Puzzle.cs with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchI/Puzzle/Puzzle.csproj [moved from tests/src/JIT/Performance/CodeQuality/BenchI/Puzzle/Puzzle.csproj with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchI/QuickSort/QuickSort.cs [moved from tests/src/JIT/Performance/CodeQuality/BenchI/QuickSort/QuickSort.cs with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchI/QuickSort/QuickSort.csproj [moved from tests/src/JIT/Performance/CodeQuality/BenchI/QuickSort/QuickSort.csproj with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchI/TreeInsert/TreeInsert.cs [moved from tests/src/JIT/Performance/CodeQuality/BenchI/TreeInsert/TreeInsert.cs with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchI/TreeInsert/TreeInsert.csproj [moved from tests/src/JIT/Performance/CodeQuality/BenchI/TreeInsert/TreeInsert.csproj with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchI/TreeSort/TreeSort.cs [moved from tests/src/JIT/Performance/CodeQuality/BenchI/TreeSort/TreeSort.cs with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchI/TreeSort/TreeSort.csproj [moved from tests/src/JIT/Performance/CodeQuality/BenchI/TreeSort/TreeSort.csproj with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchI/XposMatrix/XposMatrix.cs [moved from tests/src/JIT/Performance/CodeQuality/BenchI/XposMatrix/XposMatrix.cs with 100% similarity]
tests/src/JIT/Performance/CodeQuality/Benchstones/BenchI/XposMatrix/XposMatrix.csproj [moved from tests/src/JIT/Performance/CodeQuality/BenchI/XposMatrix/XposMatrix.csproj with 100% similarity]

index 5921cf6..918b4ef 100644 (file)
@@ -4,6 +4,18 @@
 // Note that the parameters will be set as env variables so we cannot use names that conflict
 // with the engineering system parameter names.
 
+//-------------------------- Globals ---------------------------------//
+
+def validTestFolders = [
+    'Benchstones',
+    'BenchmarksGame',
+    'Bytemark',
+    'Math',
+    'Span',
+    'first half',
+    'last half'
+    ]
+
 //--------------------- Windows Functions ----------------------------//
 
 def windowsBuild(String arch, String config, String pgo, boolean isBaseline) {
@@ -19,13 +31,15 @@ def windowsBuild(String arch, String config, String pgo, boolean isBaseline) {
     }
 
     bat "set __TestIntermediateDir=int&&.\\build.cmd -${config} -${arch} -skipbuildpackages ${pgoBuildFlag}"
+    bat "tests\\runtest.cmd ${config} ${arch} GenerateLayoutOnly"
+    bat "rd /s /q bin\\obj"
 
     // Stash build artifacts. Stash tests in an additional stash to be used by Linux test runs
     stash name: "nt-${arch}-${pgo}${baselineString}-build-artifacts", includes: 'bin/**'
     stash name: "nt-${arch}-${pgo}${baselineString}-test-artifacts", includes: 'bin/tests/**'
 }
 
-def windowsPerf(String arch, String config, String uploadString, String runType, String opt_level, String jit, String pgo, String scenario, boolean isBaseline, boolean isProfileOn) {
+def windowsPerf(String arch, String config, String uploadString, String runType, String opt_level, String jit, String pgo, String scenario, boolean isBaseline, boolean isProfileOn, String testFolder) {
     withCredentials([string(credentialsId: 'CoreCLR Perf BenchView Sas', variable: 'BV_UPLOAD_SAS_TOKEN')]) {
         checkout scm
         String baselineString = ""
@@ -33,11 +47,16 @@ def windowsPerf(String arch, String config, String uploadString, String runType,
             baselineString = "-baseline"
         }
         dir ('.') {
-            unstash "nt-${arch}-${pgo}${baselineString}-build-artifacts"
+            unstash "nt-${arch}-${pgo}${baselineString}-test-artifacts"
             unstash "benchview-tools"
             unstash "metadata"
         }
 
+        String test = ''
+        if (testFolder != 'all') {
+            test = testFolder
+        }
+
         String pgoTestFlag = ((pgo == 'nopgo') ? '-nopgo' : '')
 
         // We want to use the baseline metadata for baseline runs. We expect to find the submission metadata in
@@ -52,8 +71,6 @@ def windowsPerf(String arch, String config, String uploadString, String runType,
 
         bat "py \".\\Microsoft.BenchView.JSONFormat\\tools\\machinedata.py\""
         bat ".\\init-tools.cmd"
-        bat "run.cmd build -Project=\"tests\\build.proj\" -BuildOS=Windows_NT -BuildType=${config} -BuildArch=${arch} -BatchRestorePackages"
-        bat "tests\\runtest.cmd ${config} ${arch} GenerateLayoutOnly"
 
         // We run run-xunit-perf differently for each of the different job types
 
@@ -62,13 +79,43 @@ def windowsPerf(String arch, String config, String uploadString, String runType,
         String runXUnitCommonArgs = "-arch ${arch} -configuration ${config} -generateBenchviewData \"%WORKSPACE%\\Microsoft.Benchview.JSONFormat\\tools\" ${uploadString} ${pgoTestFlag} -runtype ${runType} ${testEnv} -optLevel ${opt_level} -jitName ${jit} -outputdir \"%WORKSPACE%\\bin\\sandbox_logs\""
         if (scenario == 'perf') {
             String runXUnitPerfCommonArgs = "${runXUnitCommonArgs} -stabilityPrefix \"START \"CORECLR_PERF_RUN\" /B /WAIT /HIGH /AFFINITY 0x2\""
-            String runXUnitPerflabArgs = "${runXUnitPerfCommonArgs} -testBinLoc bin\\tests\\${os}.${arch}.${config}\\performance\\perflab\\Perflab -library"
+            if (test == 'first half' || testFolder == 'all')
+            {
+                String runXUnitPerflabArgs = "${runXUnitPerfCommonArgs} -testBinLoc bin\\tests\\${os}.${arch}.${config}\\performance\\perflab\\Perflab -library"
 
-            profileArg = isProfileOn ? "default+${profileArg}+gcapi" : profileArg
-            bat "tests\\scripts\\run-xunit-perf.cmd ${runXUnitPerflabArgs} -collectionFlags ${profileArg}"
+                profileArg = isProfileOn ? "default+${profileArg}+gcapi" : profileArg
+                bat "tests\\scripts\\run-xunit-perf.cmd ${runXUnitPerflabArgs} -collectionFlags ${profileArg}"
+            }
 
-            String runXUnitCodeQualityArgs = "${runXUnitPerfCommonArgs} -testBinLoc bin\\tests\\${os}.${arch}.${config}\\Jit\\Performance\\CodeQuality"
-            bat "tests\\scripts\\run-xunit-perf.cmd ${runXUnitCodeQualityArgs} -collectionFlags ${profileArg}"
+            if (test == 'first half') {
+
+                [
+                    'Burgers',
+                    'Devirtualization',
+                    'FractalPerf',
+                    'Inlining',
+                    'Layout'
+                ].each { benchmark ->
+                    String runXUnitCodeQualityArgs = "${runXUnitPerfCommonArgs} -testBinLoc bin\\tests\\${os}.${arch}.${config}\\Jit\\Performance\\CodeQuality\\${benchmark}"
+                    bat "tests\\scripts\\run-xunit-perf.cmd ${runXUnitCodeQualityArgs} -collectionFlags ${profileArg}"
+                }
+            }
+            else if (test == 'last half') {
+                [
+                    'Linq',
+                    'Roslyn',
+                    'SciMark',
+                    'Serialization',
+                    'V8'
+                ].each { benchmark ->
+                    String runXUnitCodeQualityArgs = "${runXUnitPerfCommonArgs} -testBinLoc bin\\tests\\${os}.${arch}.${config}\\Jit\\Performance\\CodeQuality\\${benchmark}"
+                    bat "tests\\scripts\\run-xunit-perf.cmd ${runXUnitCodeQualityArgs} -collectionFlags ${profileArg}"
+                }
+            }
+            else {
+                String runXUnitCodeQualityArgs = "${runXUnitPerfCommonArgs} -testBinLoc bin\\tests\\${os}.${arch}.${config}\\Jit\\Performance\\CodeQuality\\${test}"
+                bat "tests\\scripts\\run-xunit-perf.cmd ${runXUnitCodeQualityArgs} -collectionFlags ${profileArg}"
+            }
         }
         else if (scenario == 'jitbench') {
             String runXUnitPerfCommonArgs = "${runXUnitCommonArgs} -stabilityPrefix \"START \"CORECLR_PERF_RUN\" /B /WAIT /HIGH\" -scenarioTest"
@@ -307,14 +354,16 @@ def innerLoopTests = [:]
 ['x64', 'x86'].each { arch ->
     ['full_opt'].each { opt_level ->
         [false].each { isBaseline ->
-            String baseline = ""
-            if (isBaseline) {
-                baseline = " baseline"
-            }
-            if (isPR() || !isBaseline) {
-                innerLoopTests["windows ${arch} ryujit ${opt_level} pgo${baseline} perf"] = {
-                    simpleNode('windows_server_2016_clr_perf', 180) {
-                        windowsPerf(arch, config, uploadString, runType, opt_level, 'ryujit', 'pgo', 'perf', isBaseline, true)
+            validTestFolders.each { benchmark ->
+                String baseline = ""
+                if (isBaseline) {
+                    baseline = " baseline"
+                }
+                if (isPR() || !isBaseline) {
+                    innerLoopTests["windows ${arch} ryujit ${opt_level} pgo ${benchmark}${baseline} perf"] = {
+                        simpleNode('windows_server_2016_clr_perf', 180) {
+                            windowsPerf(arch, config, uploadString, runType, opt_level, 'ryujit', 'pgo', 'perf', isBaseline, true, benchmark)
+                        }
                     }
                 }
             }
@@ -328,13 +377,13 @@ def outerLoopTests = [:]
 if (!isPR()) {
     outerLoopTests["windows ${arch} ryujit full_opt pgo${baseline} jitbench"] = {
         simpleNode('windows_server_2016_clr_perf', 180) {
-            windowsPerf(arch, config, uploadString, runType, 'full_opt', 'ryujit', 'pgo', 'jitbench', false)
+            windowsPerf(arch, config, uploadString, runType, 'full_opt', 'ryujit', 'pgo', 'jitbench', false, false, '')
         }
     }
 
     outerLoopTests["windows ${arch} ryujit full_opt pgo${baseline} illink"] = {
         simpleNode('Windows_NT', '20170427-elevated') {
-            windowsPerf(arch, config, uploadString, runType, 'full_opt', 'ryujit', 'pgo', 'illink', false)
+            windowsPerf(arch, config, uploadString, runType, 'full_opt', 'ryujit', 'pgo', 'illink', false, false, '')
         }
     }
 
@@ -345,7 +394,7 @@ if (!isPR()) {
                     [true, false].each { isProfileOn ->
                         outerLoopTests["windows ${arch} ${jit} ${opt_level} ${pgo_enabled} perf"] = {
                             simpleNode('windows_server_2016_clr_perf', 180) {
-                                windowsPerf(arch, config, uploadString, runType, opt_level, jit, pgo_enabled, 'perf', false, isProfileOn)
+                                windowsPerf(arch, config, uploadString, runType, opt_level, jit, pgo_enabled, 'perf', false, isProfileOn, 'all')
                             }
                         }