-
Notifications
You must be signed in to change notification settings - Fork 5.2k
Open
Labels
area-CodeGen-coreclrCLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMICLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMItenet-performancePerformance related issuePerformance related issue
Milestone
Description
Description
While working on dotnet/BenchmarkDotNet#2806, I noticed strange measurements while running one of the samples. This benchmark performs worse in tier1 code than in tier0, and significantly worse than in tier0 + instrumented.
Tier | Time |
---|---|
tier0 | 426 us |
tier0 + instrumented | 276 us |
tier1 | 488 us |
And with DPGO disabled, it performs better, but still worse than tier0 + instrumented.
Tier | Time |
---|---|
tier0 | 442 us |
tier1 | 388 us |
Configuration
BenchmarkDotNet v0.15.3-develop (2025-07-17), Windows 10 (10.0.19045.6093/22H2/2022Update)
AMD Ryzen 7 9800X3D 4.70GHz, 1 CPU, 16 logical and 8 physical cores
.NET SDK 10.0.100-preview.5.25277.114
[Host] : .NET 10.0.0 (10.0.0-preview.5.25277.114, 10.0.25.27814), X64 RyuJIT AVX-512F+CD+BW+DQ+VL+VBMI
Job-TESGAY : .NET 10.0.0 (10.0.0-preview.5.25277.114, 10.0.25.27814), X64 RyuJIT AVX-512F+CD+BW+DQ+VL+VBMI
Job-GWABPB : .NET 10.0.0 (10.0.0-preview.5.25277.114, 10.0.25.27814), X64 RyuJIT AVX-512F+CD+BW+DQ+VL+VBMI
Regression?
Not sure if it counts as a regression, but the default behavior is worse than with DPGO disabled.
Data
public class RandomBenchmark
{
private readonly Random rand = new Random(42);
[Benchmark]
public void BurnCPU()
{
for (int i = 0; i < 100000; ++i)
{
rand.Next(1, 100);
}
}
}
DOTNET_TieredPGO=1
WorkloadJitting 1: 1 op, 1205500.00 ns, 1.2055 ms/op
WorkloadJitting 2: 1 op, 434600.00 ns, 434.6000 us/op
WorkloadJitting 3: 1 op, 427400.00 ns, 427.4000 us/op
WorkloadJitting 4: 1 op, 427300.00 ns, 427.3000 us/op
WorkloadJitting 5: 1 op, 428000.00 ns, 428.0000 us/op
WorkloadJitting 6: 1 op, 428000.00 ns, 428.0000 us/op
WorkloadJitting 7: 1 op, 431700.00 ns, 431.7000 us/op
WorkloadJitting 8: 1 op, 431900.00 ns, 431.9000 us/op
WorkloadJitting 9: 1 op, 425000.00 ns, 425.0000 us/op
WorkloadJitting 10: 1 op, 424200.00 ns, 424.2000 us/op
WorkloadJitting 11: 1 op, 424600.00 ns, 424.6000 us/op
WorkloadJitting 12: 1 op, 429400.00 ns, 429.4000 us/op
WorkloadJitting 13: 1 op, 426000.00 ns, 426.0000 us/op
WorkloadJitting 14: 1 op, 425000.00 ns, 425.0000 us/op
WorkloadJitting 15: 1 op, 482100.00 ns, 482.1000 us/op
WorkloadJitting 16: 1 op, 428200.00 ns, 428.2000 us/op
WorkloadJitting 17: 1 op, 425700.00 ns, 425.7000 us/op
WorkloadJitting 18: 1 op, 425500.00 ns, 425.5000 us/op
WorkloadJitting 19: 1 op, 425000.00 ns, 425.0000 us/op
WorkloadJitting 20: 1 op, 434100.00 ns, 434.1000 us/op
WorkloadJitting 21: 1 op, 435700.00 ns, 435.7000 us/op
WorkloadJitting 22: 1 op, 429800.00 ns, 429.8000 us/op
WorkloadJitting 23: 1 op, 425800.00 ns, 425.8000 us/op
WorkloadJitting 24: 1 op, 425400.00 ns, 425.4000 us/op
WorkloadJitting 25: 1 op, 424300.00 ns, 424.3000 us/op
WorkloadJitting 26: 1 op, 425200.00 ns, 425.2000 us/op
WorkloadJitting 27: 1 op, 423800.00 ns, 423.8000 us/op
WorkloadJitting 28: 1 op, 423900.00 ns, 423.9000 us/op
WorkloadJitting 29: 1 op, 424300.00 ns, 424.3000 us/op
WorkloadJitting 30: 1 op, 424900.00 ns, 424.9000 us/op
WorkloadJitting 31: 1 op, 423900.00 ns, 423.9000 us/op
WorkloadJitting 32: 1 op, 432800.00 ns, 432.8000 us/op
WorkloadJitting 33: 1 op, 794100.00 ns, 794.1000 us/op
WorkloadJitting 34: 1 op, 276800.00 ns, 276.8000 us/op
WorkloadJitting 35: 1 op, 276500.00 ns, 276.5000 us/op
WorkloadJitting 36: 1 op, 276500.00 ns, 276.5000 us/op
WorkloadJitting 37: 1 op, 280000.00 ns, 280.0000 us/op
WorkloadJitting 38: 1 op, 276000.00 ns, 276.0000 us/op
WorkloadJitting 39: 1 op, 276000.00 ns, 276.0000 us/op
WorkloadJitting 40: 1 op, 277600.00 ns, 277.6000 us/op
WorkloadJitting 41: 1 op, 276600.00 ns, 276.6000 us/op
WorkloadJitting 42: 1 op, 276600.00 ns, 276.6000 us/op
WorkloadJitting 43: 1 op, 278200.00 ns, 278.2000 us/op
WorkloadJitting 44: 1 op, 276900.00 ns, 276.9000 us/op
WorkloadJitting 45: 1 op, 276600.00 ns, 276.6000 us/op
WorkloadJitting 46: 1 op, 283600.00 ns, 283.6000 us/op
WorkloadJitting 47: 1 op, 276400.00 ns, 276.4000 us/op
WorkloadJitting 48: 1 op, 280200.00 ns, 280.2000 us/op
WorkloadJitting 49: 1 op, 277000.00 ns, 277.0000 us/op
WorkloadJitting 50: 1 op, 276500.00 ns, 276.5000 us/op
WorkloadJitting 51: 1 op, 280200.00 ns, 280.2000 us/op
WorkloadJitting 52: 1 op, 299700.00 ns, 299.7000 us/op
WorkloadJitting 53: 1 op, 276700.00 ns, 276.7000 us/op
WorkloadJitting 54: 1 op, 276300.00 ns, 276.3000 us/op
WorkloadJitting 55: 1 op, 277100.00 ns, 277.1000 us/op
WorkloadJitting 56: 1 op, 275400.00 ns, 275.4000 us/op
WorkloadJitting 57: 1 op, 275900.00 ns, 275.9000 us/op
WorkloadJitting 58: 1 op, 279300.00 ns, 279.3000 us/op
WorkloadJitting 59: 1 op, 289300.00 ns, 289.3000 us/op
WorkloadJitting 60: 1 op, 275600.00 ns, 275.6000 us/op
WorkloadJitting 61: 1 op, 275800.00 ns, 275.8000 us/op
WorkloadJitting 62: 1 op, 908300.00 ns, 908.3000 us/op
WorkloadJitting 63: 1 op, 488000.00 ns, 488.0000 us/op
WorkloadJitting 64: 1 op, 517700.00 ns, 517.7000 us/op
WorkloadJitting 65: 1 op, 485900.00 ns, 485.9000 us/op
WorkloadJitting 66: 1 op, 489800.00 ns, 489.8000 us/op
WorkloadJitting 67: 1 op, 491300.00 ns, 491.3000 us/op
WorkloadJitting 68: 1 op, 486800.00 ns, 486.8000 us/op
WorkloadJitting 69: 1 op, 489400.00 ns, 489.4000 us/op
WorkloadJitting 70: 1 op, 487300.00 ns, 487.3000 us/op
WorkloadJitting 71: 1 op, 499900.00 ns, 499.9000 us/op
WorkloadJitting 72: 1 op, 490100.00 ns, 490.1000 us/op
WorkloadJitting 73: 1 op, 488400.00 ns, 488.4000 us/op
WorkloadJitting 74: 1 op, 490600.00 ns, 490.6000 us/op
WorkloadJitting 75: 1 op, 480800.00 ns, 480.8000 us/op
WorkloadJitting 76: 1 op, 488600.00 ns, 488.6000 us/op
WorkloadJitting 77: 1 op, 487100.00 ns, 487.1000 us/op
WorkloadJitting 78: 1 op, 798800.00 ns, 798.8000 us/op
WorkloadJitting 79: 1 op, 495200.00 ns, 495.2000 us/op
WorkloadJitting 80: 1 op, 568000.00 ns, 568.0000 us/op
WorkloadJitting 81: 1 op, 505800.00 ns, 505.8000 us/op
WorkloadJitting 82: 1 op, 484300.00 ns, 484.3000 us/op
WorkloadJitting 83: 1 op, 485500.00 ns, 485.5000 us/op
WorkloadJitting 84: 1 op, 489100.00 ns, 489.1000 us/op
WorkloadJitting 85: 1 op, 488700.00 ns, 488.7000 us/op
WorkloadJitting 86: 1 op, 478500.00 ns, 478.5000 us/op
WorkloadJitting 87: 1 op, 488500.00 ns, 488.5000 us/op
WorkloadJitting 88: 1 op, 486700.00 ns, 486.7000 us/op
WorkloadJitting 89: 1 op, 487400.00 ns, 487.4000 us/op
WorkloadJitting 90: 1 op, 486600.00 ns, 486.6000 us/op
WorkloadJitting 91: 1 op, 485000.00 ns, 485.0000 us/op
WorkloadJitting 92: 1 op, 445500.00 ns, 445.5000 us/op
WorkloadJitting 93: 1 op, 454200.00 ns, 454.2000 us/op
WorkloadJitting 94: 1 op, 443000.00 ns, 443.0000 us/op
WorkloadJitting 95: 1 op, 441500.00 ns, 441.5000 us/op
WorkloadJitting 96: 1 op, 442500.00 ns, 442.5000 us/op
WorkloadJitting 97: 1 op, 442100.00 ns, 442.1000 us/op
WorkloadJitting 98: 1 op, 456200.00 ns, 456.2000 us/op
WorkloadJitting 99: 1 op, 452700.00 ns, 452.7000 us/op
WorkloadJitting 100: 1 op, 444100.00 ns, 444.1000 us/op
WorkloadJitting 101: 1 op, 441900.00 ns, 441.9000 us/op
WorkloadJitting 102: 1 op, 455600.00 ns, 455.6000 us/op
WorkloadJitting 103: 1 op, 463900.00 ns, 463.9000 us/op
WorkloadJitting 104: 1 op, 457600.00 ns, 457.6000 us/op
WorkloadJitting 105: 1 op, 464800.00 ns, 464.8000 us/op
WorkloadJitting 106: 1 op, 443900.00 ns, 443.9000 us/op
WorkloadJitting 107: 1 op, 442100.00 ns, 442.1000 us/op
WorkloadJitting 108: 1 op, 444000.00 ns, 444.0000 us/op
WorkloadJitting 109: 1 op, 456800.00 ns, 456.8000 us/op
WorkloadJitting 110: 1 op, 453100.00 ns, 453.1000 us/op
WorkloadJitting 111: 1 op, 441000.00 ns, 441.0000 us/op
WorkloadJitting 112: 1 op, 443900.00 ns, 443.9000 us/op
WorkloadJitting 113: 1 op, 442000.00 ns, 442.0000 us/op
WorkloadJitting 114: 1 op, 442100.00 ns, 442.1000 us/op
WorkloadJitting 115: 1 op, 460000.00 ns, 460.0000 us/op
WorkloadJitting 116: 1 op, 443100.00 ns, 443.1000 us/op
WorkloadJitting 117: 1 op, 441600.00 ns, 441.6000 us/op
WorkloadJitting 118: 1 op, 442500.00 ns, 442.5000 us/op
WorkloadJitting 119: 1 op, 443000.00 ns, 443.0000 us/op
WorkloadJitting 120: 1 op, 450200.00 ns, 450.2000 us/op
WorkloadJitting 121: 1 op, 462000.00 ns, 462.0000 us/op
DOTNET_TieredPGO=0
WorkloadJitting 1: 1 op, 906500.00 ns, 906.5000 us/op
WorkloadJitting 2: 1 op, 506400.00 ns, 506.4000 us/op
WorkloadJitting 3: 1 op, 442800.00 ns, 442.8000 us/op
WorkloadJitting 4: 1 op, 445300.00 ns, 445.3000 us/op
WorkloadJitting 5: 1 op, 443300.00 ns, 443.3000 us/op
WorkloadJitting 6: 1 op, 447800.00 ns, 447.8000 us/op
WorkloadJitting 7: 1 op, 443600.00 ns, 443.6000 us/op
WorkloadJitting 8: 1 op, 442300.00 ns, 442.3000 us/op
WorkloadJitting 9: 1 op, 441800.00 ns, 441.8000 us/op
WorkloadJitting 10: 1 op, 442300.00 ns, 442.3000 us/op
WorkloadJitting 11: 1 op, 443400.00 ns, 443.4000 us/op
WorkloadJitting 12: 1 op, 444600.00 ns, 444.6000 us/op
WorkloadJitting 13: 1 op, 443500.00 ns, 443.5000 us/op
WorkloadJitting 14: 1 op, 442000.00 ns, 442.0000 us/op
WorkloadJitting 15: 1 op, 442100.00 ns, 442.1000 us/op
WorkloadJitting 16: 1 op, 442600.00 ns, 442.6000 us/op
WorkloadJitting 17: 1 op, 443200.00 ns, 443.2000 us/op
WorkloadJitting 18: 1 op, 443600.00 ns, 443.6000 us/op
WorkloadJitting 19: 1 op, 447900.00 ns, 447.9000 us/op
WorkloadJitting 20: 1 op, 448200.00 ns, 448.2000 us/op
WorkloadJitting 21: 1 op, 443400.00 ns, 443.4000 us/op
WorkloadJitting 22: 1 op, 443900.00 ns, 443.9000 us/op
WorkloadJitting 23: 1 op, 448800.00 ns, 448.8000 us/op
WorkloadJitting 24: 1 op, 443600.00 ns, 443.6000 us/op
WorkloadJitting 25: 1 op, 443800.00 ns, 443.8000 us/op
WorkloadJitting 26: 1 op, 442500.00 ns, 442.5000 us/op
WorkloadJitting 27: 1 op, 445300.00 ns, 445.3000 us/op
WorkloadJitting 28: 1 op, 445600.00 ns, 445.6000 us/op
WorkloadJitting 29: 1 op, 447700.00 ns, 447.7000 us/op
WorkloadJitting 30: 1 op, 448000.00 ns, 448.0000 us/op
WorkloadJitting 31: 1 op, 443100.00 ns, 443.1000 us/op
WorkloadJitting 32: 1 op, 522300.00 ns, 522.3000 us/op
WorkloadJitting 33: 1 op, 540700.00 ns, 540.7000 us/op
WorkloadJitting 34: 1 op, 507000.00 ns, 507.0000 us/op
WorkloadJitting 35: 1 op, 517200.00 ns, 517.2000 us/op
WorkloadJitting 36: 1 op, 510700.00 ns, 510.7000 us/op
WorkloadJitting 37: 1 op, 538200.00 ns, 538.2000 us/op
WorkloadJitting 38: 1 op, 552600.00 ns, 552.6000 us/op
WorkloadJitting 39: 1 op, 527600.00 ns, 527.6000 us/op
WorkloadJitting 40: 1 op, 509000.00 ns, 509.0000 us/op
WorkloadJitting 41: 1 op, 521600.00 ns, 521.6000 us/op
WorkloadJitting 42: 1 op, 509300.00 ns, 509.3000 us/op
WorkloadJitting 43: 1 op, 519600.00 ns, 519.6000 us/op
WorkloadJitting 44: 1 op, 510800.00 ns, 510.8000 us/op
WorkloadJitting 45: 1 op, 521100.00 ns, 521.1000 us/op
WorkloadJitting 46: 1 op, 511100.00 ns, 511.1000 us/op
WorkloadJitting 47: 1 op, 528000.00 ns, 528.0000 us/op
WorkloadJitting 48: 1 op, 510800.00 ns, 510.8000 us/op
WorkloadJitting 49: 1 op, 521700.00 ns, 521.7000 us/op
WorkloadJitting 50: 1 op, 517000.00 ns, 517.0000 us/op
WorkloadJitting 51: 1 op, 519600.00 ns, 519.6000 us/op
WorkloadJitting 52: 1 op, 520600.00 ns, 520.6000 us/op
WorkloadJitting 53: 1 op, 507600.00 ns, 507.6000 us/op
WorkloadJitting 54: 1 op, 515600.00 ns, 515.6000 us/op
WorkloadJitting 55: 1 op, 506400.00 ns, 506.4000 us/op
WorkloadJitting 56: 1 op, 517500.00 ns, 517.5000 us/op
WorkloadJitting 57: 1 op, 511300.00 ns, 511.3000 us/op
WorkloadJitting 58: 1 op, 519400.00 ns, 519.4000 us/op
WorkloadJitting 59: 1 op, 512100.00 ns, 512.1000 us/op
WorkloadJitting 60: 1 op, 522600.00 ns, 522.6000 us/op
WorkloadJitting 61: 1 op, 513600.00 ns, 513.6000 us/op
WorkloadJitting 62: 1 op, 448600.00 ns, 448.6000 us/op
WorkloadJitting 63: 1 op, 387400.00 ns, 387.4000 us/op
WorkloadJitting 64: 1 op, 392300.00 ns, 392.3000 us/op
WorkloadJitting 65: 1 op, 392500.00 ns, 392.5000 us/op
WorkloadJitting 66: 1 op, 388100.00 ns, 388.1000 us/op
WorkloadJitting 67: 1 op, 387600.00 ns, 387.6000 us/op
WorkloadJitting 68: 1 op, 387600.00 ns, 387.6000 us/op
WorkloadJitting 69: 1 op, 388000.00 ns, 388.0000 us/op
WorkloadJitting 70: 1 op, 388000.00 ns, 388.0000 us/op
WorkloadJitting 71: 1 op, 386900.00 ns, 386.9000 us/op
WorkloadJitting 72: 1 op, 392000.00 ns, 392.0000 us/op
WorkloadJitting 73: 1 op, 391900.00 ns, 391.9000 us/op
WorkloadJitting 74: 1 op, 387600.00 ns, 387.6000 us/op
WorkloadJitting 75: 1 op, 387900.00 ns, 387.9000 us/op
WorkloadJitting 76: 1 op, 387100.00 ns, 387.1000 us/op
WorkloadJitting 77: 1 op, 462800.00 ns, 462.8000 us/op
WorkloadJitting 78: 1 op, 423200.00 ns, 423.2000 us/op
WorkloadJitting 79: 1 op, 386700.00 ns, 386.7000 us/op
WorkloadJitting 80: 1 op, 387800.00 ns, 387.8000 us/op
WorkloadJitting 81: 1 op, 387400.00 ns, 387.4000 us/op
WorkloadJitting 82: 1 op, 387800.00 ns, 387.8000 us/op
WorkloadJitting 83: 1 op, 388500.00 ns, 388.5000 us/op
WorkloadJitting 84: 1 op, 387300.00 ns, 387.3000 us/op
WorkloadJitting 85: 1 op, 387000.00 ns, 387.0000 us/op
WorkloadJitting 86: 1 op, 387000.00 ns, 387.0000 us/op
WorkloadJitting 87: 1 op, 391800.00 ns, 391.8000 us/op
WorkloadJitting 88: 1 op, 388900.00 ns, 388.9000 us/op
WorkloadJitting 89: 1 op, 386900.00 ns, 386.9000 us/op
WorkloadJitting 90: 1 op, 387600.00 ns, 387.6000 us/op
WorkloadJitting 91: 1 op, 387100.00 ns, 387.1000 us/op
Method | Job | EnvironmentVariables | Mean | Error | StdDev |
---|---|---|---|---|---|
BurnCPU | Job-TESGAY | DOTNET_TieredPGO=0 | 388.6 us | 0.82 us | 0.77 us |
BurnCPU | Job-GWABPB | DOTNET_TieredPGO=1 | 458.1 us | 0.47 us | 0.44 us |
I'm no jit expert, but these numbers seem quite strange to me.
Also, can anyone explain to me why there seems to be another jit tier in calls 32 - 61 with DPGO disabled? I thought there are only 2 tiers if it's disabled.
Metadata
Metadata
Assignees
Labels
area-CodeGen-coreclrCLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMICLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMItenet-performancePerformance related issuePerformance related issue