[Dynamic Instrumentation] DEBUG-2842 Snapshot exploration test#6064
[Dynamic Instrumentation] DEBUG-2842 Snapshot exploration test#6064dudikeleti wants to merge 33 commits into
Conversation
Datadog ReportBranch report: ❌ 31 Failed (0 Known Flaky), 441959 Passed, 3655 Skipped, 32h 18m 3.45s Total Time ❌ Failed Tests (31)
New Flaky Tests (31)
⌛ Performance Regressions vs Default Branch (1)
|
Execution-Time Benchmarks Report ⏱️Execution-time results for samples comparing This PR (6064) and master. ✅ No regressions detected - check the details below Full Metrics ComparisonFakeDbCommand
HttpMessageHandler
Comparison explanationExecution-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:
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 chartsFakeDbCommand (.NET Framework 4.8)gantt
title Execution time (ms) FakeDbCommand (.NET Framework 4.8)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (6064) - mean (73ms) : 71, 75
master - mean (73ms) : 71, 75
section Bailout
This PR (6064) - mean (77ms) : 75, 79
master - mean (77ms) : 75, 79
section CallTarget+Inlining+NGEN
This PR (6064) - mean (1,083ms) : 1054, 1113
master - mean (1,075ms) : 1017, 1133
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 (6064) - mean (116ms) : 111, 121
master - mean (115ms) : 111, 119
section Bailout
This PR (6064) - mean (115ms) : 112, 117
master - mean (117ms) : 114, 119
section CallTarget+Inlining+NGEN
This PR (6064) - mean (754ms) : 719, 789
master - mean (788ms) : 765, 811
FakeDbCommand (.NET 6)gantt
title Execution time (ms) FakeDbCommand (.NET 6)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (6064) - mean (102ms) : 97, 107
master - mean (101ms) : 98, 104
section Bailout
This PR (6064) - mean (102ms) : 99, 105
master - mean (105ms) : 100, 110
section CallTarget+Inlining+NGEN
This PR (6064) - mean (937ms) : 881, 993
master - mean (938ms) : 904, 972
FakeDbCommand (.NET 8)gantt
title Execution time (ms) FakeDbCommand (.NET 8)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (6064) - mean (104ms) : 99, 110
master - mean (101ms) : 96, 107
section Bailout
This PR (6064) - mean (102ms) : 99, 105
master - mean (101ms) : 98, 103
section CallTarget+Inlining+NGEN
This PR (6064) - mean (829ms) : 787, 871
master - mean (827ms) : 776, 879
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 (6064) - mean (204ms) : 196, 211
master - mean (204ms) : 194, 215
section Bailout
This PR (6064) - mean (208ms) : 200, 215
master - mean (209ms) : 197, 221
section CallTarget+Inlining+NGEN
This PR (6064) - mean (1,244ms) : 1218, 1269
master - mean (1,222ms) : 1157, 1288
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 (6064) - mean (292ms) : 280, 303
master - mean (295ms) : 280, 311
section Bailout
This PR (6064) - mean (292ms) : 282, 303
master - mean (297ms) : 279, 315
section CallTarget+Inlining+NGEN
This PR (6064) - mean (955ms) : 929, 981
master - mean (978ms) : 950, 1006
HttpMessageHandler (.NET 6)gantt
title Execution time (ms) HttpMessageHandler (.NET 6)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (6064) - mean (287ms) : 275, 299
master - mean (292ms) : 273, 311
section Bailout
This PR (6064) - mean (289ms) : 277, 302
master - mean (290ms) : 272, 309
section CallTarget+Inlining+NGEN
This PR (6064) - mean (1,147ms) : 1073, 1221
master - mean (1,169ms) : 1123, 1216
HttpMessageHandler (.NET 8)gantt
title Execution time (ms) HttpMessageHandler (.NET 8)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (6064) - mean (283ms) : 270, 296
master - mean (290ms) : 268, 313
section Bailout
This PR (6064) - mean (282ms) : 272, 292
master - mean (290ms) : 272, 308
section CallTarget+Inlining+NGEN
This PR (6064) - mean (1,048ms) : 999, 1096
master - mean (1,053ms) : 977, 1129
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Throughput/Crank Report ⚡Throughput results for AspNetCoreSimpleController comparing the following branches/commits: Cases where throughput results for the PR are worse than latest master (5% drop or greater), results are shown in red. Note that these results are based on a single point-in-time result for each branch. For full results, see one of the many, many dashboards! gantt
title Throughput Linux x64 (Total requests)
dateFormat X
axisFormat %s
section Baseline
This PR (6064) (11.340M) : 0, 11339527
master (11.262M) : 0, 11261987
benchmarks/2.9.0 (11.033M) : 0, 11032866
section Automatic
This PR (6064) (7.364M) : 0, 7364342
master (7.252M) : 0, 7252121
benchmarks/2.9.0 (7.786M) : 0, 7785853
section Trace stats
master (7.492M) : 0, 7491512
section Manual
master (11.082M) : 0, 11081514
section Manual + Automatic
This PR (6064) (6.707M) : 0, 6707358
master (6.511M) : 0, 6511339
section DD_TRACE_ENABLED=0
master (10.305M) : 0, 10305041
gantt
title Throughput Linux arm64 (Total requests)
dateFormat X
axisFormat %s
section Baseline
This PR (6064) (9.575M) : 0, 9574994
master (9.633M) : 0, 9633274
benchmarks/2.9.0 (9.495M) : 0, 9494821
section Automatic
This PR (6064) (6.472M) : 0, 6471666
master (6.436M) : 0, 6436394
section Trace stats
master (6.676M) : 0, 6676124
section Manual
master (9.575M) : 0, 9575331
section Manual + Automatic
This PR (6064) (5.874M) : 0, 5874057
master (5.718M) : 0, 5718155
section DD_TRACE_ENABLED=0
master (8.573M) : 0, 8572716
gantt
title Throughput Windows x64 (Total requests)
dateFormat X
axisFormat %s
section Baseline
This PR (6064) (9.323M) : 0, 9322956
master (9.876M) : 0, 9876001
benchmarks/2.9.0 (10.020M) : 0, 10019592
section Automatic
This PR (6064) (6.121M) : crit ,0, 6121452
master (6.512M) : 0, 6511943
benchmarks/2.9.0 (7.255M) : 0, 7255257
section Trace stats
master (7.089M) : 0, 7089152
section Manual
master (10.204M) : 0, 10203572
section Manual + Automatic
This PR (6064) (5.786M) : 0, 5786495
master (6.050M) : 0, 6050240
section DD_TRACE_ENABLED=0
master (9.471M) : 0, 9471285
|
Benchmarks Report for tracer 🐌Benchmarks for #6064 compared to master:
The following thresholds were used for comparing the benchmark speeds:
Allocation changes below 0.5% are ignored. Benchmark detailsBenchmarks.Trace.ActivityBenchmark - Same speed ✔️ Same allocations ✔️Raw results
Benchmarks.Trace.AgentWriterBenchmark - Same speed ✔️ Same allocations ✔️Raw results
Benchmarks.Trace.AspNetCoreBenchmark - Same speed ✔️ Same allocations ✔️Raw results
Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark - Same speed ✔️ Same allocations ✔️Raw results
Benchmarks.Trace.DbCommandBenchmark - Same speed ✔️ Same allocations ✔️Raw results
Benchmarks.Trace.ElasticsearchBenchmark - Same speed ✔️ Same allocations ✔️Raw results
Benchmarks.Trace.GraphQLBenchmark - Same speed ✔️ Same allocations ✔️Raw results
Benchmarks.Trace.HttpClientBenchmark - Same speed ✔️ Same allocations ✔️Raw results
Benchmarks.Trace.ILoggerBenchmark - Same speed ✔️ Same allocations ✔️Raw results
Benchmarks.Trace.Log4netBenchmark - Same speed ✔️ Same allocations ✔️Raw results
Benchmarks.Trace.NLogBenchmark - Same speed ✔️ Same allocations ✔️Raw results
Benchmarks.Trace.RedisBenchmark - Same speed ✔️ Same allocations ✔️Raw results
Benchmarks.Trace.SerilogBenchmark - Same speed ✔️ Same allocations ✔️Raw results
Benchmarks.Trace.SpanBenchmark - Slower
|
| Benchmark | diff/base | Base Median (ns) | Diff Median (ns) | Modality |
|---|---|---|---|---|
| Benchmarks.Trace.SpanBenchmark.StartFinishScope‑netcoreapp3.1 | 1.130 | 718.07 | 811.60 |
Raw results
| Branch | Method | Toolchain | Mean | StdError | StdDev | Gen 0 | Gen 1 | Gen 2 | Allocated |
|---|---|---|---|---|---|---|---|---|---|
| master | StartFinishSpan |
net6.0 | 429ns | 0.18ns | 0.673ns | 0.00814 | 0 | 0 | 576 B |
| master | StartFinishSpan |
netcoreapp3.1 | 554ns | 0.301ns | 1.17ns | 0.0078 | 0 | 0 | 576 B |
| master | StartFinishSpan |
net472 | 642ns | 0.2ns | 0.748ns | 0.0917 | 0 | 0 | 578 B |
| master | StartFinishScope |
net6.0 | 494ns | 0.122ns | 0.473ns | 0.00981 | 0 | 0 | 696 B |
| master | StartFinishScope |
netcoreapp3.1 | 718ns | 0.573ns | 2.22ns | 0.00921 | 0 | 0 | 696 B |
| master | StartFinishScope |
net472 | 815ns | 0.307ns | 1.19ns | 0.105 | 0 | 0 | 658 B |
| #6064 | StartFinishSpan |
net6.0 | 407ns | 0.17ns | 0.637ns | 0.00815 | 0 | 0 | 576 B |
| #6064 | StartFinishSpan |
netcoreapp3.1 | 574ns | 0.356ns | 1.33ns | 0.00786 | 0 | 0 | 576 B |
| #6064 | StartFinishSpan |
net472 | 606ns | 0.343ns | 1.33ns | 0.0916 | 0 | 0 | 578 B |
| #6064 | StartFinishScope |
net6.0 | 493ns | 0.199ns | 0.745ns | 0.00987 | 0 | 0 | 696 B |
| #6064 | StartFinishScope |
netcoreapp3.1 | 811ns | 0.488ns | 1.89ns | 0.00936 | 0 | 0 | 696 B |
| #6064 | StartFinishScope |
net472 | 795ns | 0.281ns | 1.09ns | 0.104 | 0 | 0 | 658 B |
Benchmarks.Trace.TraceAnnotationsBenchmark - Slower ⚠️ Same allocations ✔️
Slower ⚠️ in #6064
Benchmark
diff/base
Base Median (ns)
Diff Median (ns)
Modality
Benchmarks.Trace.TraceAnnotationsBenchmark.RunOnMethodBegin‑net6.0
1.135
616.73
700.10
| Benchmark | diff/base | Base Median (ns) | Diff Median (ns) | Modality |
|---|---|---|---|---|
| Benchmarks.Trace.TraceAnnotationsBenchmark.RunOnMethodBegin‑net6.0 | 1.135 | 616.73 | 700.10 |
Raw results
| Branch | Method | Toolchain | Mean | StdError | StdDev | Gen 0 | Gen 1 | Gen 2 | Allocated |
|---|---|---|---|---|---|---|---|---|---|
| master | RunOnMethodBegin |
net6.0 | 619ns | 1.84ns | 7.12ns | 0.00988 | 0 | 0 | 696 B |
| master | RunOnMethodBegin |
netcoreapp3.1 | 956ns | 0.501ns | 1.94ns | 0.0092 | 0 | 0 | 696 B |
| master | RunOnMethodBegin |
net472 | 1.1μs | 0.272ns | 0.98ns | 0.104 | 0 | 0 | 658 B |
| #6064 | RunOnMethodBegin |
net6.0 | 700ns | 0.272ns | 1.05ns | 0.00978 | 0 | 0 | 696 B |
| #6064 | RunOnMethodBegin |
netcoreapp3.1 | 938ns | 0.533ns | 2.06ns | 0.0094 | 0 | 0 | 696 B |
| #6064 | RunOnMethodBegin |
net472 | 1.05μs | 0.279ns | 1.08ns | 0.104 | 0 | 0 | 658 B |
1d82022 to
f154c5c
Compare
5b79941 to
f412eb8
Compare
fc5b6b1 to
c37f927
Compare
816321d to
a25c696
Compare
This comment has been minimized.
This comment has been minimized.
f8ddb56 to
38078bb
Compare
38078bb to
f71a985
Compare
BenchmarksBenchmark execution time: 2026-05-06 10:21:28 Comparing candidate commit f070f97 in PR branch Found 0 performance improvements and 1 performance regressions! Performance is the same for 26 metrics, 0 unstable metrics, 58 known flaky benchmarks, 29 flaky benchmarks without significant changes.
|
bd94d24 to
a3555b5
Compare
Fix rebase fallout in the snapshot exploration test path and make the harness reliable again. Share the exploration CSV sink between snapshot and log uploaders, disable hands-off config for isolated test hosts, and fail fast when probes are defined but none are installed so bootstrap problems are surfaced instead of passing silently. Reduce the supported snapshot exploration configuration to ENABLED plus a single root path, derive the probes/report locations from that root, and keep extra tuning/debug switches out of the supported config surface. Clean up the snapshot-flow debug logging so it stays purely diagnostic and can be removed without affecting behavior.
a3555b5 to
7d4fec8
Compare
- isolate snapshot exploration test plumbing in DebuggerManager.SnapshotExploration.cs partial; revert Instrumentation.cs to master - consolidate exploration-test enabled flags into ExplorationTestState - extract testhost name and native log polling values to SnapshotExplorationConstants - await DI initialization task instead of polling with Thread.Sleep - remove SnapshotFlowDebugLog and its 12 hot-path call sites; restore master debug logs in LineDebuggerInvoker null-byref skips - restore WriteCallsToLogArg at non-async ApplyMethodProbe exit to fix ref/out parameter capture - delete unused top-level BoundLineProbeLocation - set DD_TRACE_ENABLED=0 for snapshot scenarios to disable agent communication; restore VSTEST_CONNECTION_TIMEOUT=200 for non-snapshot runs - minor fixes in Redaction (Nullable<T>), SnapshotPruner (bounds checks), ProbeExpressionParser (generic type arg substitution) Co-authored-by: Cursor <[email protected]>
|
see #8572 |
Summary of changes
This PR expand the curent exploration test functionality to test not only the produced bytcode but also the snapshot of a probe.
Reason for change
In many cases the instrumentation itself is valid but still we fail to create a valid snapshot for a certain probe.
Implementation details
We run open source projects tests and put probe on each method, then validate the produced snapshot.
Test coverage
Exploration tests