Skip to content

Add artifacts for SLO checks to enable notifications#8184

Merged
igoragoli merged 3 commits intomasterfrom
augusto/slo-check-artifacts
Feb 16, 2026
Merged

Add artifacts for SLO checks to enable notifications#8184
igoragoli merged 3 commits intomasterfrom
augusto/slo-check-artifacts

Conversation

@igoragoli
Copy link
Contributor

@igoragoli igoragoli commented Feb 10, 2026

Summary of changes

Add SLO check artifacts to the SLO check jobs to enable notifications.

As a reminder:

  1. We are not blocking on SLO breaches (we have allow_failure: true);
  2. Notifications will only trigger on big regressions, since SLOs were set with a wide slack from benchmarking measurements.

Reason for change

Necessary to enable notification jobs.

Implementation details

Test coverage

Other details

@igoragoli igoragoli requested a review from a team as a code owner February 10, 2026 16:19
@pr-commenter
Copy link

pr-commenter bot commented Feb 10, 2026

Benchmarks

Benchmark execution time: 2026-02-13 08:15:21

Comparing candidate commit 17d246f in PR branch augusto/slo-check-artifacts with baseline commit 1799318 in branch master.

Found 3 performance improvements and 3 performance regressions! Performance is the same for 172 metrics, 14 unstable metrics.

scenario:Benchmarks.Trace.Asm.AppSecEncoderBenchmark.EncodeLegacyArgs netcoreapp3.1

  • 🟥 execution_time [+20.223ms; +20.817ms] or [+11.172%; +11.500%]

scenario:Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark.WriteAndFlushEnrichedTraces net6.0

  • 🟥 throughput [-119.497op/s; -90.536op/s] or [-7.555%; -5.724%]
  • 🟩 execution_time [-41.426ms; -38.068ms] or [-20.474%; -18.814%]

scenario:Benchmarks.Trace.ElasticsearchBenchmark.CallElasticsearchAsync netcoreapp3.1

  • 🟩 throughput [+29459.440op/s; +38261.087op/s] or [+7.219%; +9.376%]

scenario:Benchmarks.Trace.Log4netBenchmark.EnrichedLog netcoreapp3.1

  • 🟥 execution_time [+29.445ms; +30.446ms] or [+17.267%; +17.854%]

scenario:Benchmarks.Trace.SingleSpanAspNetCoreBenchmark.SingleSpanAspNetCore net6.0

  • 🟩 execution_time [-105.925ms; -104.219ms] or [-53.861%; -52.993%]

@dd-trace-dotnet-ci-bot
Copy link

dd-trace-dotnet-ci-bot bot commented Feb 10, 2026

Execution-Time Benchmarks Report ⏱️

Execution-time results for samples comparing This PR (8184) and master.

✅ No regressions detected - check the details below

Full Metrics Comparison

FakeDbCommand

Metric Master (Mean ± 95% CI) Current (Mean ± 95% CI) Change Status
.NET Framework 4.8 - Baseline
duration68.98 ± (69.02 - 69.28) ms69.03 ± (69.11 - 69.39) ms+0.1%✅⬆️
.NET Framework 4.8 - Bailout
duration72.68 ± (72.60 - 72.87) ms73.06 ± (72.95 - 73.18) ms+0.5%✅⬆️
.NET Framework 4.8 - CallTarget+Inlining+NGEN
duration1034.03 ± (1035.65 - 1041.50) ms1035.71 ± (1037.54 - 1044.47) ms+0.2%✅⬆️
.NET Core 3.1 - Baseline
process.internal_duration_ms22.36 ± (22.33 - 22.39) ms22.40 ± (22.37 - 22.43) ms+0.2%✅⬆️
process.time_to_main_ms87.03 ± (86.86 - 87.19) ms87.47 ± (87.28 - 87.65) ms+0.5%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed15.46 ± (15.46 - 15.47) MB15.48 ± (15.48 - 15.49) MB+0.1%✅⬆️
runtime.dotnet.threads.count12 ± (12 - 12)12 ± (12 - 12)+0.0%
.NET Core 3.1 - Bailout
process.internal_duration_ms22.26 ± (22.23 - 22.29) ms22.26 ± (22.24 - 22.28) ms-0.0%
process.time_to_main_ms88.15 ± (87.99 - 88.31) ms88.35 ± (88.20 - 88.50) ms+0.2%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed15.52 ± (15.51 - 15.52) MB15.50 ± (15.50 - 15.51) MB-0.1%
runtime.dotnet.threads.count13 ± (13 - 13)13 ± (13 - 13)+0.0%
.NET Core 3.1 - CallTarget+Inlining+NGEN
process.internal_duration_ms257.52 ± (254.58 - 260.46) ms257.28 ± (254.27 - 260.29) ms-0.1%
process.time_to_main_ms494.19 ± (493.65 - 494.73) ms493.65 ± (493.13 - 494.16) ms-0.1%
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed52.22 ± (52.20 - 52.24) MB52.18 ± (52.15 - 52.20) MB-0.1%
runtime.dotnet.threads.count28 ± (28 - 28)28 ± (28 - 28)-0.0%
.NET 6 - Baseline
process.internal_duration_ms21.09 ± (21.06 - 21.11) ms21.02 ± (21.00 - 21.05) ms-0.3%
process.time_to_main_ms75.23 ± (75.08 - 75.38) ms75.39 ± (75.23 - 75.55) ms+0.2%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed15.19 ± (15.18 - 15.19) MB15.19 ± (15.18 - 15.19) MB+0.0%✅⬆️
runtime.dotnet.threads.count10 ± (10 - 10)10 ± (10 - 10)+0.0%
.NET 6 - Bailout
process.internal_duration_ms21.04 ± (21.02 - 21.07) ms20.99 ± (20.96 - 21.02) ms-0.2%
process.time_to_main_ms76.17 ± (76.03 - 76.31) ms76.50 ± (76.38 - 76.62) ms+0.4%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed15.31 ± (15.31 - 15.31) MB15.30 ± (15.30 - 15.31) MB-0.0%
runtime.dotnet.threads.count11 ± (11 - 11)11 ± (11 - 11)+0.0%
.NET 6 - CallTarget+Inlining+NGEN
process.internal_duration_ms256.06 ± (255.41 - 256.71) ms256.68 ± (256.05 - 257.30) ms+0.2%✅⬆️
process.time_to_main_ms470.71 ± (470.05 - 471.36) ms472.13 ± (471.57 - 472.69) ms+0.3%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed53.03 ± (53.00 - 53.06) MB52.96 ± (52.93 - 52.99) MB-0.1%
runtime.dotnet.threads.count28 ± (28 - 28)28 ± (28 - 28)+0.2%✅⬆️
.NET 8 - Baseline
process.internal_duration_ms18.94 ± (18.91 - 18.96) ms18.95 ± (18.93 - 18.98) ms+0.1%✅⬆️
process.time_to_main_ms68.12 ± (67.98 - 68.26) ms68.58 ± (68.45 - 68.71) ms+0.7%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed7.69 ± (7.68 - 7.70) MB7.67 ± (7.67 - 7.68) MB-0.2%
runtime.dotnet.threads.count10 ± (10 - 10)10 ± (10 - 10)+0.0%
.NET 8 - Bailout
process.internal_duration_ms18.92 ± (18.89 - 18.95) ms19.00 ± (18.98 - 19.02) ms+0.4%✅⬆️
process.time_to_main_ms69.31 ± (69.17 - 69.45) ms69.71 ± (69.60 - 69.83) ms+0.6%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed7.74 ± (7.73 - 7.75) MB7.74 ± (7.74 - 7.75) MB-0.0%
runtime.dotnet.threads.count11 ± (11 - 11)11 ± (11 - 11)+0.0%
.NET 8 - CallTarget+Inlining+NGEN
process.internal_duration_ms177.39 ± (176.48 - 178.31) ms179.23 ± (178.32 - 180.14) ms+1.0%✅⬆️
process.time_to_main_ms429.21 ± (428.69 - 429.73) ms431.63 ± (430.88 - 432.38) ms+0.6%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed35.91 ± (35.89 - 35.94) MB35.93 ± (35.90 - 35.96) MB+0.1%✅⬆️
runtime.dotnet.threads.count27 ± (27 - 27)27 ± (27 - 27)-0.1%

HttpMessageHandler

Metric Master (Mean ± 95% CI) Current (Mean ± 95% CI) Change Status
.NET Framework 4.8 - Baseline
duration198.55 ± (198.39 - 199.43) ms200.21 ± (200.19 - 201.41) ms+0.8%✅⬆️
.NET Framework 4.8 - Bailout
duration206.87 ± (211.03 - 214.76) ms204.35 ± (204.20 - 205.18) ms-1.2%
.NET Framework 4.8 - CallTarget+Inlining+NGEN
duration1159.73 ± (1160.94 - 1168.30) ms1163.11 ± (1165.98 - 1174.05) ms+0.3%✅⬆️
.NET Core 3.1 - Baseline
process.internal_duration_ms200.74 ± (200.26 - 201.21) ms197.99 ± (197.54 - 198.45) ms-1.4%
process.time_to_main_ms91.94 ± (91.68 - 92.20) ms91.01 ± (90.77 - 91.24) ms-1.0%
runtime.dotnet.exceptions.count3 ± (3 - 3)3 ± (3 - 3)+0.0%
runtime.dotnet.mem.committed20.55 ± (20.53 - 20.57) MB20.53 ± (20.51 - 20.55) MB-0.1%
runtime.dotnet.threads.count20 ± (20 - 20)20 ± (20 - 20)+0.2%✅⬆️
.NET Core 3.1 - Bailout
process.internal_duration_ms199.03 ± (198.54 - 199.52) ms199.79 ± (199.19 - 200.38) ms+0.4%✅⬆️
process.time_to_main_ms92.93 ± (92.66 - 93.20) ms93.61 ± (93.28 - 93.94) ms+0.7%✅⬆️
runtime.dotnet.exceptions.count3 ± (3 - 3)3 ± (3 - 3)+0.0%
runtime.dotnet.mem.committed20.60 ± (20.58 - 20.62) MB20.63 ± (20.62 - 20.65) MB+0.2%✅⬆️
runtime.dotnet.threads.count21 ± (21 - 21)21 ± (21 - 21)+0.9%✅⬆️
.NET Core 3.1 - CallTarget+Inlining+NGEN
process.internal_duration_ms446.79 ± (443.96 - 449.63) ms445.96 ± (442.49 - 449.43) ms-0.2%
process.time_to_main_ms513.74 ± (512.86 - 514.61) ms512.87 ± (512.02 - 513.72) ms-0.2%
runtime.dotnet.exceptions.count3 ± (3 - 3)3 ± (3 - 3)+0.0%
runtime.dotnet.mem.committed62.23 ± (62.11 - 62.34) MB62.43 ± (62.31 - 62.56) MB+0.3%✅⬆️
runtime.dotnet.threads.count29 ± (29 - 29)29 ± (29 - 29)-0.2%
.NET 6 - Baseline
process.internal_duration_ms200.94 ± (200.43 - 201.45) ms200.04 ± (199.56 - 200.51) ms-0.4%
process.time_to_main_ms73.25 ± (73.05 - 73.44) ms73.30 ± (73.08 - 73.51) ms+0.1%✅⬆️
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed16.26 ± (16.24 - 16.28) MB16.31 ± (16.29 - 16.33) MB+0.3%✅⬆️
runtime.dotnet.threads.count19 ± (19 - 19)19 ± (19 - 19)+0.4%✅⬆️
.NET 6 - Bailout
process.internal_duration_ms199.63 ± (199.11 - 200.15) ms198.29 ± (197.74 - 198.85) ms-0.7%
process.time_to_main_ms74.19 ± (73.98 - 74.40) ms73.93 ± (73.76 - 74.11) ms-0.3%
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed16.32 ± (16.30 - 16.34) MB16.32 ± (16.29 - 16.35) MB-0.0%
runtime.dotnet.threads.count20 ± (20 - 20)20 ± (20 - 20)+0.6%✅⬆️
.NET 6 - CallTarget+Inlining+NGEN
process.internal_duration_ms458.12 ± (455.22 - 461.03) ms451.59 ± (448.66 - 454.51) ms-1.4%
process.time_to_main_ms463.48 ± (462.60 - 464.35) ms460.68 ± (459.78 - 461.58) ms-0.6%
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed57.76 ± (57.62 - 57.90) MB57.94 ± (57.80 - 58.07) MB+0.3%✅⬆️
runtime.dotnet.threads.count29 ± (29 - 30)29 ± (29 - 29)-0.1%
.NET 8 - Baseline
process.internal_duration_ms202.28 ± (201.69 - 202.86) ms201.02 ± (200.55 - 201.49) ms-0.6%
process.time_to_main_ms78.60 ± (78.35 - 78.86) ms78.21 ± (78.01 - 78.40) ms-0.5%
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed16.18 ± (16.16 - 16.20) MB16.24 ± (16.22 - 16.25) MB+0.3%✅⬆️
runtime.dotnet.threads.count19 ± (19 - 19)19 ± (19 - 19)+0.0%✅⬆️
.NET 8 - Bailout
process.internal_duration_ms199.95 ± (199.44 - 200.46) ms198.98 ± (198.45 - 199.51) ms-0.5%
process.time_to_main_ms78.87 ± (78.70 - 79.05) ms79.11 ± (78.90 - 79.32) ms+0.3%✅⬆️
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed16.27 ± (16.25 - 16.29) MB16.25 ± (16.23 - 16.27) MB-0.1%
runtime.dotnet.threads.count20 ± (20 - 20)20 ± (20 - 20)+0.1%✅⬆️
.NET 8 - CallTarget+Inlining+NGEN
process.internal_duration_ms392.30 ± (387.22 - 397.39) ms396.52 ± (391.08 - 401.95) ms+1.1%✅⬆️
process.time_to_main_ms468.67 ± (467.92 - 469.41) ms470.97 ± (470.28 - 471.66) ms+0.5%✅⬆️
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed53.07 ± (52.91 - 53.24) MB53.01 ± (52.85 - 53.17) MB-0.1%
runtime.dotnet.threads.count29 ± (29 - 29)29 ± (29 - 29)+0.0%✅⬆️
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 (8184) - mean (69ms)  : 67, 71
    master - mean (69ms)  : 67, 71

    section Bailout
    This PR (8184) - mean (73ms)  : 72, 74
    master - mean (73ms)  : 71, 74

    section CallTarget+Inlining+NGEN
    This PR (8184) - mean (1,041ms)  : 991, 1091
    master - mean (1,039ms)  : 997, 1080

Loading
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 (8184) - mean (116ms)  : 113, 119
    master - mean (116ms)  : 112, 119

    section Bailout
    This PR (8184) - mean (117ms)  : 115, 118
    master - mean (116ms)  : 114, 119

    section CallTarget+Inlining+NGEN
    This PR (8184) - mean (780ms)  : 737, 824
    master - mean (781ms)  : 730, 833

Loading
FakeDbCommand (.NET 6)
gantt
    title Execution time (ms) FakeDbCommand (.NET 6)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (8184) - mean (102ms)  : 99, 105
    master - mean (102ms)  : 98, 105

    section Bailout
    This PR (8184) - mean (103ms)  : 101, 105
    master - mean (103ms)  : 101, 104

    section CallTarget+Inlining+NGEN
    This PR (8184) - mean (762ms)  : 738, 786
    master - mean (759ms)  : 732, 787

Loading
FakeDbCommand (.NET 8)
gantt
    title Execution time (ms) FakeDbCommand (.NET 8)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (8184) - mean (94ms)  : 91, 97
    master - mean (94ms)  : 91, 96

    section Bailout
    This PR (8184) - mean (96ms)  : 92, 99
    master - mean (95ms)  : 92, 97

    section CallTarget+Inlining+NGEN
    This PR (8184) - mean (639ms)  : 621, 658
    master - mean (633ms)  : 620, 647

Loading
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 (8184) - mean (201ms)  : 192, 210
    master - mean (199ms)  : 192, 206

    section Bailout
    This PR (8184) - mean (205ms)  : 199, 211
    master - mean (213ms)  : 185, 241

    section CallTarget+Inlining+NGEN
    This PR (8184) - mean (1,170ms)  : 1110, 1230
    master - mean (1,165ms)  : 1109, 1220

Loading
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 (8184) - mean (299ms)  : 287, 310
    master - mean (302ms)  : 289, 316

    section Bailout
    This PR (8184) - mean (303ms)  : 289, 316
    master - mean (302ms)  : 293, 310

    section CallTarget+Inlining+NGEN
    This PR (8184) - mean (991ms)  : 925, 1057
    master - mean (994ms)  : 951, 1038

Loading
HttpMessageHandler (.NET 6)
gantt
    title Execution time (ms) HttpMessageHandler (.NET 6)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (8184) - mean (282ms)  : 271, 294
    master - mean (283ms)  : 271, 294

    section Bailout
    This PR (8184) - mean (281ms)  : 273, 289
    master - mean (282ms)  : 273, 291

    section CallTarget+Inlining+NGEN
    This PR (8184) - mean (945ms)  : 895, 994
    master - mean (951ms)  : 897, 1006

Loading
HttpMessageHandler (.NET 8)
gantt
    title Execution time (ms) HttpMessageHandler (.NET 8)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (8184) - mean (291ms)  : 280, 301
    master - mean (292ms)  : 281, 302

    section Bailout
    This PR (8184) - mean (289ms)  : 279, 298
    master - mean (290ms)  : 279, 300

    section CallTarget+Inlining+NGEN
    This PR (8184) - mean (900ms)  : 825, 976
    master - mean (895ms)  : 822, 967

Loading

@igoragoli igoragoli added the area:builds project files, build scripts, pipelines, versioning, releases, packages label Feb 11, 2026
@igoragoli igoragoli changed the title Add artifacts for SLO checks Add artifacts for SLO checks to enable notifications Feb 13, 2026
@igoragoli igoragoli merged commit 9281c0d into master Feb 16, 2026
178 of 180 checks passed
@igoragoli igoragoli deleted the augusto/slo-check-artifacts branch February 16, 2026 14:16
@github-actions github-actions bot added this to the vNext-v3 milestone Feb 16, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:builds project files, build scripts, pipelines, versioning, releases, packages

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants