-
Notifications
You must be signed in to change notification settings - Fork 151
[Native] Performance improvements #8149
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
BenchmarksBenchmark execution time: 2026-02-03 19:27:31 Comparing candidate commit b9e3a12 in PR branch Found 9 performance improvements and 11 performance regressions! Performance is the same for 150 metrics, 22 unstable metrics. scenario:Benchmarks.Trace.ActivityBenchmark.StartStopWithChild netcoreapp3.1
scenario:Benchmarks.Trace.AgentWriterBenchmark.WriteAndFlushEnrichedTraces net6.0
scenario:Benchmarks.Trace.Asm.AppSecBodyBenchmark.AllCycleSimpleBody net472
scenario:Benchmarks.Trace.Asm.AppSecBodyBenchmark.AllCycleSimpleBody net6.0
scenario:Benchmarks.Trace.Asm.AppSecBodyBenchmark.AllCycleSimpleBody netcoreapp3.1
scenario:Benchmarks.Trace.Asm.AppSecBodyBenchmark.ObjectExtractorMoreComplexBody net6.0
scenario:Benchmarks.Trace.Asm.AppSecBodyBenchmark.ObjectExtractorSimpleBody netcoreapp3.1
scenario:Benchmarks.Trace.Asm.AppSecEncoderBenchmark.EncodeLegacyArgs netcoreapp3.1
scenario:Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark.WriteAndFlushEnrichedTraces netcoreapp3.1
scenario:Benchmarks.Trace.CharSliceBenchmark.OptimizedCharSlice net6.0
scenario:Benchmarks.Trace.DbCommandBenchmark.ExecuteNonQuery net6.0
scenario:Benchmarks.Trace.ElasticsearchBenchmark.CallElasticsearch net6.0
scenario:Benchmarks.Trace.ILoggerBenchmark.EnrichedLog netcoreapp3.1
scenario:Benchmarks.Trace.Iast.StringAspectsBenchmark.StringConcatBenchmark net6.0
scenario:Benchmarks.Trace.Log4netBenchmark.EnrichedLog netcoreapp3.1
scenario:Benchmarks.Trace.SpanBenchmark.StartFinishScope net6.0
scenario:Benchmarks.Trace.SpanBenchmark.StartFinishScope netcoreapp3.1
|
Execution-Time Benchmarks Report ⏱️Execution-time results for samples comparing This PR (8149) and master.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Metric | Master (Mean ± 95% CI) | Current (Mean ± 95% CI) | Change | Status |
|---|---|---|---|---|
| .NET 8 - CallTarget+Inlining+NGEN | ||||
| runtime.dotnet.mem.committed | 37.02 ± (36.98 - 37.05) MB | 41.99 ± (41.97 - 42.02) MB | +13.5% | ❌⬆️ |
Full Metrics Comparison
FakeDbCommand
| Metric | Master (Mean ± 95% CI) | Current (Mean ± 95% CI) | Change | Status |
|---|---|---|---|---|
| .NET Framework 4.8 - Baseline | ||||
| duration | 79.31 ± (79.13 - 79.51) ms | 79.64 ± (79.54 - 79.87) ms | +0.4% | ✅⬆️ |
| .NET Framework 4.8 - Bailout | ||||
| duration | 84.40 ± (84.33 - 84.70) ms | 84.62 ± (84.48 - 84.85) ms | +0.3% | ✅⬆️ |
| .NET Framework 4.8 - CallTarget+Inlining+NGEN | ||||
| duration | 1121.11 ± (1118.66 - 1126.25) ms | 1126.50 ± (1129.58 - 1140.62) ms | +0.5% | ✅⬆️ |
| .NET Core 3.1 - Baseline | ||||
| process.internal_duration_ms | 24.30 ± (24.23 - 24.36) ms | 24.50 ± (24.44 - 24.56) ms | +0.8% | ✅⬆️ |
| process.time_to_main_ms | 94.22 ± (94.02 - 94.42) ms | 95.30 ± (95.08 - 95.51) ms | +1.1% | ✅⬆️ |
| runtime.dotnet.exceptions.count | 0 ± (0 - 0) | 0 ± (0 - 0) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 10.94 ± (10.93 - 10.94) MB | 10.95 ± (10.94 - 10.95) MB | +0.1% | ✅⬆️ |
| runtime.dotnet.threads.count | 12 ± (12 - 12) | 12 ± (12 - 12) | +0.0% | ✅ |
| .NET Core 3.1 - Bailout | ||||
| process.internal_duration_ms | 24.07 ± (24.01 - 24.13) ms | 24.52 ± (24.46 - 24.58) ms | +1.9% | ✅⬆️ |
| process.time_to_main_ms | 94.28 ± (94.04 - 94.52) ms | 96.37 ± (96.18 - 96.56) ms | +2.2% | ✅⬆️ |
| runtime.dotnet.exceptions.count | 0 ± (0 - 0) | 0 ± (0 - 0) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 10.97 ± (10.97 - 10.97) MB | 10.98 ± (10.98 - 10.99) MB | +0.1% | ✅⬆️ |
| runtime.dotnet.threads.count | 13 ± (13 - 13) | 13 ± (13 - 13) | +0.0% | ✅ |
| .NET Core 3.1 - CallTarget+Inlining+NGEN | ||||
| process.internal_duration_ms | 230.48 ± (227.83 - 233.13) ms | 291.93 ± (290.93 - 292.94) ms | +26.7% | ✅⬆️ |
| process.time_to_main_ms | 535.49 ± (534.59 - 536.39) ms | 555.89 ± (554.02 - 557.77) ms | +3.8% | ✅⬆️ |
| runtime.dotnet.exceptions.count | 0 ± (0 - 0) | 0 ± (0 - 0) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 48.57 ± (48.55 - 48.60) MB | 52.82 ± (52.56 - 53.08) MB | +8.7% | ✅⬆️ |
| runtime.dotnet.threads.count | 28 ± (28 - 28) | 28 ± (28 - 28) | +0.0% | ✅⬆️ |
| .NET 6 - Baseline | ||||
| process.internal_duration_ms | 22.79 ± (22.75 - 22.84) ms | 22.97 ± (22.92 - 23.03) ms | +0.8% | ✅⬆️ |
| process.time_to_main_ms | 81.11 ± (80.93 - 81.29) ms | 81.83 ± (81.63 - 82.03) ms | +0.9% | ✅⬆️ |
| runtime.dotnet.exceptions.count | 0 ± (0 - 0) | 0 ± (0 - 0) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 10.64 ± (10.64 - 10.64) MB | 10.65 ± (10.65 - 10.66) MB | +0.2% | ✅⬆️ |
| runtime.dotnet.threads.count | 10 ± (10 - 10) | 10 ± (10 - 10) | +0.0% | ✅ |
| .NET 6 - Bailout | ||||
| process.internal_duration_ms | 22.70 ± (22.65 - 22.76) ms | 23.18 ± (23.11 - 23.25) ms | +2.1% | ✅⬆️ |
| process.time_to_main_ms | 82.45 ± (82.32 - 82.58) ms | 84.01 ± (83.82 - 84.21) ms | +1.9% | ✅⬆️ |
| runtime.dotnet.exceptions.count | 0 ± (0 - 0) | 0 ± (0 - 0) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 10.72 ± (10.72 - 10.73) MB | 10.76 ± (10.76 - 10.77) MB | +0.4% | ✅⬆️ |
| runtime.dotnet.threads.count | 11 ± (11 - 11) | 11 ± (11 - 11) | +0.0% | ✅ |
| .NET 6 - CallTarget+Inlining+NGEN | ||||
| process.internal_duration_ms | 234.06 ± (229.89 - 238.23) ms | 273.58 ± (272.60 - 274.55) ms | +16.9% | ✅⬆️ |
| process.time_to_main_ms | 507.09 ± (506.08 - 508.09) ms | 515.19 ± (514.09 - 516.30) ms | +1.6% | ✅⬆️ |
| runtime.dotnet.exceptions.count | 0 ± (0 - 0) | 0 ± (0 - 0) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 49.17 ± (49.15 - 49.20) MB | 50.02 ± (49.98 - 50.05) MB | +1.7% | ✅⬆️ |
| runtime.dotnet.threads.count | 28 ± (28 - 28) | 28 ± (28 - 28) | +0.1% | ✅⬆️ |
| .NET 8 - Baseline | ||||
| process.internal_duration_ms | 20.51 ± (20.47 - 20.55) ms | 21.73 ± (21.67 - 21.78) ms | +5.9% | ✅⬆️ |
| process.time_to_main_ms | 78.03 ± (77.84 - 78.23) ms | 88.53 ± (88.35 - 88.71) ms | +13.5% | ✅⬆️ |
| runtime.dotnet.exceptions.count | 0 ± (0 - 0) | 0 ± (0 - 0) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 7.68 ± (7.68 - 7.69) MB | 12.28 ± (12.27 - 12.29) MB | +59.8% | ✅⬆️ |
| runtime.dotnet.threads.count | 10 ± (10 - 10) | 10 ± (10 - 10) | +0.0% | ✅ |
| .NET 8 - Bailout | ||||
| process.internal_duration_ms | 20.47 ± (20.42 - 20.52) ms | 21.57 ± (21.50 - 21.64) ms | +5.4% | ✅⬆️ |
| process.time_to_main_ms | 79.01 ± (78.80 - 79.22) ms | 89.96 ± (89.75 - 90.17) ms | +13.9% | ✅⬆️ |
| runtime.dotnet.exceptions.count | 0 ± (0 - 0) | 0 ± (0 - 0) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 7.74 ± (7.73 - 7.75) MB | 12.33 ± (12.32 - 12.34) MB | +59.3% | ✅⬆️ |
| runtime.dotnet.threads.count | 11 ± (11 - 11) | 11 ± (11 - 11) | +0.0% | ✅ |
| .NET 8 - CallTarget+Inlining+NGEN | ||||
| process.internal_duration_ms | 196.85 ± (196.07 - 197.62) ms | 203.97 ± (203.11 - 204.83) ms | +3.6% | ✅⬆️ |
| process.time_to_main_ms | 484.07 ± (483.12 - 485.03) ms | 526.93 ± (525.22 - 528.64) ms | +8.9% | ✅⬆️ |
| runtime.dotnet.exceptions.count | 0 ± (0 - 0) | 0 ± (0 - 0) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 37.02 ± (36.98 - 37.05) MB | 41.99 ± (41.97 - 42.02) MB | +13.5% | ❌⬆️ |
| runtime.dotnet.threads.count | 27 ± (27 - 27) | 27 ± (27 - 27) | +0.2% | ✅⬆️ |
HttpMessageHandler
| Metric | Master (Mean ± 95% CI) | Current (Mean ± 95% CI) | Change | Status |
|---|---|---|---|---|
| .NET Framework 4.8 - Baseline | ||||
| duration | 203.83 ± (203.44 - 204.53) ms | 202.41 ± (202.36 - 203.43) ms | -0.7% | ✅ |
| .NET Framework 4.8 - Bailout | ||||
| duration | 206.62 ± (206.50 - 207.47) ms | 210.17 ± (210.00 - 211.10) ms | +1.7% | ✅⬆️ |
| .NET Framework 4.8 - CallTarget+Inlining+NGEN | ||||
| duration | 1188.00 ± (1187.93 - 1194.72) ms | 1178.97 ± (1181.94 - 1191.59) ms | -0.8% | ✅ |
| .NET Core 3.1 - Baseline | ||||
| process.internal_duration_ms | 199.68 ± (199.16 - 200.20) ms | 195.54 ± (195.05 - 196.03) ms | -2.1% | ✅ |
| process.time_to_main_ms | 86.45 ± (86.20 - 86.70) ms | 84.73 ± (84.44 - 85.03) ms | -2.0% | ✅ |
| runtime.dotnet.exceptions.count | 3 ± (3 - 3) | 3 ± (3 - 3) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 16.09 ± (16.07 - 16.10) MB | 16.15 ± (16.12 - 16.17) MB | +0.4% | ✅⬆️ |
| runtime.dotnet.threads.count | 20 ± (20 - 20) | 20 ± (20 - 20) | -0.1% | ✅ |
| .NET Core 3.1 - Bailout | ||||
| process.internal_duration_ms | 198.70 ± (198.19 - 199.22) ms | 197.43 ± (196.95 - 197.91) ms | -0.6% | ✅ |
| process.time_to_main_ms | 87.86 ± (87.59 - 88.14) ms | 86.82 ± (86.61 - 87.03) ms | -1.2% | ✅ |
| runtime.dotnet.exceptions.count | 3 ± (3 - 3) | 3 ± (3 - 3) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 16.17 ± (16.15 - 16.18) MB | 16.12 ± (16.10 - 16.14) MB | -0.3% | ✅ |
| runtime.dotnet.threads.count | 21 ± (21 - 21) | 21 ± (21 - 21) | -0.9% | ✅ |
| .NET Core 3.1 - CallTarget+Inlining+NGEN | ||||
| process.internal_duration_ms | 424.41 ± (420.95 - 427.87) ms | 452.02 ± (450.54 - 453.50) ms | +6.5% | ✅⬆️ |
| process.time_to_main_ms | 504.42 ± (503.42 - 505.43) ms | 500.31 ± (499.06 - 501.55) ms | -0.8% | ✅ |
| runtime.dotnet.exceptions.count | 3 ± (3 - 3) | 3 ± (3 - 3) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 59.27 ± (59.17 - 59.38) MB | 58.84 ± (58.77 - 58.92) MB | -0.7% | ✅ |
| runtime.dotnet.threads.count | 29 ± (29 - 30) | 29 ± (29 - 29) | -0.1% | ✅ |
| .NET 6 - Baseline | ||||
| process.internal_duration_ms | 205.14 ± (204.55 - 205.74) ms | 205.26 ± (204.67 - 205.85) ms | +0.1% | ✅⬆️ |
| process.time_to_main_ms | 75.66 ± (75.43 - 75.90) ms | 75.62 ± (75.37 - 75.87) ms | -0.1% | ✅ |
| runtime.dotnet.exceptions.count | 4 ± (4 - 4) | 4 ± (4 - 4) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 16.29 ± (16.27 - 16.31) MB | 16.28 ± (16.26 - 16.30) MB | -0.1% | ✅ |
| runtime.dotnet.threads.count | 19 ± (19 - 19) | 19 ± (19 - 19) | +0.8% | ✅⬆️ |
| .NET 6 - Bailout | ||||
| process.internal_duration_ms | 207.27 ± (206.73 - 207.81) ms | 204.09 ± (203.56 - 204.63) ms | -1.5% | ✅ |
| process.time_to_main_ms | 77.70 ± (77.48 - 77.91) ms | 75.87 ± (75.69 - 76.06) ms | -2.3% | ✅ |
| runtime.dotnet.exceptions.count | 4 ± (4 - 4) | 4 ± (4 - 4) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 16.34 ± (16.32 - 16.36) MB | 16.33 ± (16.31 - 16.34) MB | -0.1% | ✅ |
| runtime.dotnet.threads.count | 20 ± (20 - 20) | 20 ± (20 - 20) | -0.2% | ✅ |
| .NET 6 - CallTarget+Inlining+NGEN | ||||
| process.internal_duration_ms | 449.99 ± (445.76 - 454.23) ms | 467.82 ± (466.07 - 469.57) ms | +4.0% | ✅⬆️ |
| process.time_to_main_ms | 486.90 ± (485.85 - 487.96) ms | 492.14 ± (489.74 - 494.54) ms | +1.1% | ✅⬆️ |
| runtime.dotnet.exceptions.count | 4 ± (4 - 4) | 4 ± (4 - 4) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 59.30 ± (59.12 - 59.48) MB | 60.49 ± (60.19 - 60.78) MB | +2.0% | ✅⬆️ |
| runtime.dotnet.threads.count | 30 ± (30 - 30) | 30 ± (30 - 30) | +0.7% | ✅⬆️ |
| .NET 8 - Baseline | ||||
| process.internal_duration_ms | 204.67 ± (204.16 - 205.18) ms | 218.79 ± (217.31 - 220.27) ms | +6.9% | ✅⬆️ |
| process.time_to_main_ms | 74.84 ± (74.63 - 75.04) ms | 78.18 ± (77.82 - 78.53) ms | +4.5% | ✅⬆️ |
| runtime.dotnet.exceptions.count | 4 ± (4 - 4) | 4 ± (4 - 4) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 11.65 ± (11.63 - 11.66) MB | 11.50 ± (11.48 - 11.52) MB | -1.2% | ✅ |
| runtime.dotnet.threads.count | 19 ± (19 - 19) | 19 ± (19 - 19) | +1.7% | ✅⬆️ |
| .NET 8 - Bailout | ||||
| process.internal_duration_ms | 204.92 ± (204.36 - 205.49) ms | 209.23 ± (208.41 - 210.05) ms | +2.1% | ✅⬆️ |
| process.time_to_main_ms | 76.42 ± (76.22 - 76.63) ms | 77.63 ± (77.36 - 77.91) ms | +1.6% | ✅⬆️ |
| runtime.dotnet.exceptions.count | 4 ± (4 - 4) | 4 ± (4 - 4) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 11.68 ± (11.67 - 11.69) MB | 11.64 ± (11.63 - 11.66) MB | -0.3% | ✅ |
| runtime.dotnet.threads.count | 20 ± (20 - 20) | 20 ± (20 - 20) | +0.3% | ✅⬆️ |
| .NET 8 - CallTarget+Inlining+NGEN | ||||
| process.internal_duration_ms | 471.39 ± (464.37 - 478.40) ms | 395.62 ± (389.49 - 401.75) ms | -16.1% | ✅ |
| process.time_to_main_ms | 481.53 ± (480.09 - 482.96) ms | 493.86 ± (492.31 - 495.40) ms | +2.6% | ✅⬆️ |
| runtime.dotnet.exceptions.count | 4 ± (4 - 4) | 4 ± (4 - 4) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 50.53 ± (50.49 - 50.57) MB | 53.93 ± (53.72 - 54.14) MB | +6.7% | ✅⬆️ |
| runtime.dotnet.threads.count | 29 ± (29 - 29) | 29 ± (29 - 29) | +1.2% | ✅⬆️ |
Comparison explanation
Execution-time benchmarks measure the whole time it takes to execute a program, and are intended to measure the one-off costs. Cases where the execution time results for the PR are worse than latest master results are highlighted in **red**. The following thresholds were used for comparing the execution times:
- Welch test with statistical test for significance of 5%
- Only results indicating a difference greater than 5% and 5 ms are considered.
Note that these results are based on a single point-in-time result for each branch. For full results, see the dashboard.
Graphs show the p99 interval based on the mean and StdDev of the test run, as well as the mean value of the run (shown as a diamond below the graph).
Duration charts
FakeDbCommand (.NET Framework 4.8)
gantt
title Execution time (ms) FakeDbCommand (.NET Framework 4.8)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8149) - mean (80ms) : 78, 82
master - mean (79ms) : 77, 82
section Bailout
This PR (8149) - mean (85ms) : 83, 86
master - mean (85ms) : 83, 86
section CallTarget+Inlining+NGEN
This PR (8149) - mean (1,135ms) : 1052, 1218
master - mean (1,122ms) : 1067, 1178
FakeDbCommand (.NET Core 3.1)
gantt
title Execution time (ms) FakeDbCommand (.NET Core 3.1)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8149) - mean (127ms) : 124, 131
master - mean (126ms) : 123, 129
section Bailout
This PR (8149) - mean (128ms) : 126, 131
master - mean (126ms) : 122, 130
section CallTarget+Inlining+NGEN
This PR (8149) - mean (890ms) : crit, 853, 926
master - mean (808ms) : 755, 860
FakeDbCommand (.NET 6)
gantt
title Execution time (ms) FakeDbCommand (.NET 6)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8149) - mean (112ms) : 109, 115
master - mean (111ms) : 108, 114
section Bailout
This PR (8149) - mean (114ms) : 112, 117
master - mean (112ms) : 110, 114
section CallTarget+Inlining+NGEN
This PR (8149) - mean (829ms) : 803, 854
master - mean (784ms) : 717, 851
FakeDbCommand (.NET 8)
gantt
title Execution time (ms) FakeDbCommand (.NET 8)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8149) - mean (119ms) : 116, 123
master - mean (107ms) : 103, 111
section Bailout
This PR (8149) - mean (120ms) : crit, 118, 123
master - mean (108ms) : 105, 111
section CallTarget+Inlining+NGEN
This PR (8149) - mean (776ms) : crit, 747, 806
master - mean (723ms) : 698, 749
HttpMessageHandler (.NET Framework 4.8)
gantt
title Execution time (ms) HttpMessageHandler (.NET Framework 4.8)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8149) - mean (203ms) : 195, 211
master - mean (204ms) : 196, 212
section Bailout
This PR (8149) - mean (211ms) : 203, 219
master - mean (207ms) : 200, 213
section CallTarget+Inlining+NGEN
This PR (8149) - mean (1,187ms) : 1118, 1255
master - mean (1,191ms) : 1143, 1239
HttpMessageHandler (.NET Core 3.1)
gantt
title Execution time (ms) HttpMessageHandler (.NET Core 3.1)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8149) - mean (290ms) : 283, 296
master - mean (296ms) : 283, 309
section Bailout
This PR (8149) - mean (294ms) : 283, 304
master - mean (296ms) : 288, 305
section CallTarget+Inlining+NGEN
This PR (8149) - mean (992ms) : 959, 1025
master - mean (972ms) : 910, 1033
HttpMessageHandler (.NET 6)
gantt
title Execution time (ms) HttpMessageHandler (.NET 6)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8149) - mean (290ms) : 277, 303
master - mean (290ms) : 276, 304
section Bailout
This PR (8149) - mean (289ms) : 280, 299
master - mean (294ms) : 284, 305
section CallTarget+Inlining+NGEN
This PR (8149) - mean (999ms) : 942, 1056
master - mean (979ms) : 906, 1053
HttpMessageHandler (.NET 8)
gantt
title Execution time (ms) HttpMessageHandler (.NET 8)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8149) - mean (308ms) : 283, 334
master - mean (291ms) : 281, 300
section Bailout
This PR (8149) - mean (298ms) : 282, 314
master - mean (292ms) : 281, 302
section CallTarget+Inlining+NGEN
This PR (8149) - mean (921ms) : 830, 1012
master - mean (993ms) : 877, 1108
Summary of changes
ModuleRegistryandAppDomainRegistryto manage modules/appdomains with shared locks and atomic state, replacingmodule_idsand the appdomain set in hot paths.inline_blockers_enabled_) to skip work when no instrumentation is active.unordered_setfor O(1) lookups and prevent duplicate NGEN inliner registration.DD_TESTS.Reason for change
Implementation details
Synchronized<std::vector<ModuleID>>withModuleRegistry(membership + snapshot + ModuleState) and useAppDomainRegistryfor the appdomain set.JITInliningwork behindinline_blockers_enabled_, enabled when instrumentations/IAST/dataflow/trace methods/probes are present.RejitHandlernow usesunordered_set<MethodKey>and adds a test-only helper underDD_TESTS.TryRejitModulerecords module state, marks NGEN inliners only once, and narrows TraceAttribute enumeration.Test coverage
appdomain_registry_test.cpp,module_registry_test.cpp,rejit_history_test.cpp.Other details
DD_TESTSadded toDatadog.Tracer.Native.Tests.vcxproj(Windows).-static-libgcc/-static-libstdc++/-lstdc++fsare Linux-only.