Skip to content

Conversation

@robcarlan-datadog
Copy link
Contributor

@robcarlan-datadog robcarlan-datadog commented Nov 14, 2025

Summary of changes

Moves DSM flush work to a dedicated thread to improve thread pool performance. Also simplifies the flushing logic to more closely match the AgentWriter logic.

(See below for test results)

Reason for change

A = DSM enabled after the fix
B = DSM enabled before the fix
Screenshot 2025-12-01 at 5 23 44 pm

DSM flush logic was previously running entirely on the thread pool, which includes the task to frequently move DSM checkpoints off of the buffer and add them to the backlog. This was causing thread contention shown in the above profile.

Implementation details

Moves the DSM buffer flushing logic into it's own thread. Below is a profile after the fix (DSM disabled on the right).

Screenshot 2025-12-01 at 5 26 53 pm

Test coverage

Mostly manual testing. I ran a set of three apps:

  1. DSM enabled, after the fix
  2. DSM disabled, after the fix
  3. DSM enabled, before the fix

The test app just forwards a Kafka message every 0.5 seconds.

And run those via docker-compose with a restricted CPU count of 0.1 and 0.5 in the below screenshots. In both cases, DSM disabled is the lowest CPU usage, and the line just above is DSM enabled after the fix. The highest CPU is DSM enabled, prior to the fix. The performance is a lot better, but I'm not sure if the gap can be closed further.

Screenshot 2025-12-01 at 6 30 10 pm Screenshot 2025-12-01 at 5 55 28 pm

Other details

@datadog-datadog-prod-us1

This comment has been minimized.

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

dd-trace-dotnet-ci-bot bot commented Nov 14, 2025

Execution-Time Benchmarks Report ⏱️

Execution-time results for samples comparing This PR (7827) 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
duration75.57 ± (75.60 - 76.48) ms76.36 ± (76.37 - 77.10) ms+1.0%✅⬆️
.NET Framework 4.8 - Bailout
duration81.39 ± (81.70 - 82.76) ms80.50 ± (80.01 - 80.94) ms-1.1%
.NET Framework 4.8 - CallTarget+Inlining+NGEN
duration1066.26 ± (1068.91 - 1078.61) ms1077.67 ± (1074.38 - 1084.28) ms+1.1%✅⬆️
.NET Core 3.1 - Baseline
process.internal_duration_ms23.22 ± (23.15 - 23.30) ms23.15 ± (23.07 - 23.23) ms-0.3%
process.time_to_main_ms89.31 ± (88.85 - 89.77) ms88.37 ± (87.99 - 88.75) ms-1.1%
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed10.93 ± (10.92 - 10.93) MB10.92 ± (10.91 - 10.92) MB-0.1%
runtime.dotnet.threads.count12 ± (12 - 12)12 ± (12 - 12)+0.0%
.NET Core 3.1 - Bailout
process.internal_duration_ms23.08 ± (23.00 - 23.15) ms23.03 ± (22.95 - 23.11) ms-0.2%
process.time_to_main_ms90.49 ± (89.95 - 91.02) ms90.42 ± (89.96 - 90.89) ms-0.1%
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed10.97 ± (10.97 - 10.98) MB10.96 ± (10.96 - 10.96) MB-0.1%
runtime.dotnet.threads.count13 ± (13 - 13)13 ± (13 - 13)+0.0%
.NET Core 3.1 - CallTarget+Inlining+NGEN
process.internal_duration_ms222.15 ± (220.82 - 223.49) ms223.91 ± (222.73 - 225.08) ms+0.8%✅⬆️
process.time_to_main_ms505.77 ± (504.43 - 507.12) ms506.51 ± (505.32 - 507.70) ms+0.1%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed47.98 ± (47.96 - 48.00) MB47.93 ± (47.91 - 47.96) MB-0.1%
runtime.dotnet.threads.count28 ± (28 - 28)28 ± (28 - 28)-0.0%
.NET 6 - Baseline
process.internal_duration_ms21.82 ± (21.74 - 21.90) ms21.90 ± (21.81 - 21.98) ms+0.3%✅⬆️
process.time_to_main_ms76.75 ± (76.35 - 77.15) ms76.98 ± (76.54 - 77.43) ms+0.3%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed10.62 ± (10.62 - 10.62) MB10.61 ± (10.61 - 10.62) MB-0.0%
runtime.dotnet.threads.count10 ± (10 - 10)10 ± (10 - 10)+0.0%
.NET 6 - Bailout
process.internal_duration_ms21.63 ± (21.56 - 21.70) ms21.99 ± (21.90 - 22.08) ms+1.6%✅⬆️
process.time_to_main_ms77.29 ± (76.85 - 77.74) ms79.27 ± (78.79 - 79.74) ms+2.6%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed10.68 ± (10.68 - 10.68) MB10.67 ± (10.66 - 10.67) MB-0.1%
runtime.dotnet.threads.count11 ± (11 - 11)11 ± (11 - 11)+0.0%
.NET 6 - CallTarget+Inlining+NGEN
process.internal_duration_ms212.28 ± (211.25 - 213.31) ms213.82 ± (212.63 - 215.00) ms+0.7%✅⬆️
process.time_to_main_ms474.18 ± (472.89 - 475.46) ms474.91 ± (473.59 - 476.22) ms+0.2%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed48.06 ± (48.03 - 48.08) MB48.13 ± (48.11 - 48.15) MB+0.1%✅⬆️
runtime.dotnet.threads.count28 ± (28 - 28)28 ± (28 - 28)+0.0%✅⬆️
.NET 8 - Baseline
process.internal_duration_ms20.18 ± (20.10 - 20.26) ms20.14 ± (20.06 - 20.22) ms-0.2%
process.time_to_main_ms76.94 ± (76.55 - 77.34) ms77.66 ± (77.16 - 78.15) ms+0.9%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed7.67 ± (7.66 - 7.67) MB7.67 ± (7.67 - 7.68) MB+0.1%✅⬆️
runtime.dotnet.threads.count10 ± (10 - 10)10 ± (10 - 10)+0.0%
.NET 8 - Bailout
process.internal_duration_ms20.00 ± (19.93 - 20.07) ms20.03 ± (19.95 - 20.11) ms+0.2%✅⬆️
process.time_to_main_ms77.18 ± (76.82 - 77.54) ms77.44 ± (77.05 - 77.82) ms+0.3%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed7.71 ± (7.71 - 7.72) MB7.73 ± (7.72 - 7.74) MB+0.2%✅⬆️
runtime.dotnet.threads.count11 ± (11 - 11)11 ± (11 - 11)+0.0%
.NET 8 - CallTarget+Inlining+NGEN
process.internal_duration_ms194.00 ± (192.83 - 195.18) ms195.57 ± (194.36 - 196.77) ms+0.8%✅⬆️
process.time_to_main_ms458.15 ± (456.94 - 459.37) ms463.12 ± (461.86 - 464.39) ms+1.1%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed36.52 ± (36.48 - 36.56) MB36.42 ± (36.38 - 36.46) MB-0.3%
runtime.dotnet.threads.count27 ± (27 - 27)27 ± (27 - 27)-0.0%

HttpMessageHandler

Metric Master (Mean ± 95% CI) Current (Mean ± 95% CI) Change Status
.NET Framework 4.8 - Baseline
duration193.60 ± (193.65 - 194.49) ms192.47 ± (192.44 - 193.08) ms-0.6%
.NET Framework 4.8 - Bailout
duration198.88 ± (198.86 - 199.80) ms195.98 ± (195.95 - 196.38) ms-1.5%
.NET Framework 4.8 - CallTarget+Inlining+NGEN
duration1127.57 ± (1128.10 - 1137.18) ms1121.54 ± (1127.55 - 1137.52) ms-0.5%
.NET Core 3.1 - Baseline
process.internal_duration_ms191.73 ± (191.28 - 192.18) ms188.73 ± (188.33 - 189.13) ms-1.6%
process.time_to_main_ms81.88 ± (81.64 - 82.13) ms80.63 ± (80.43 - 80.83) ms-1.5%
runtime.dotnet.exceptions.count3 ± (3 - 3)3 ± (3 - 3)+0.0%
runtime.dotnet.mem.committed16.05 ± (16.04 - 16.07) MB16.18 ± (16.15 - 16.21) MB+0.8%✅⬆️
runtime.dotnet.threads.count20 ± (20 - 20)20 ± (20 - 20)+0.1%✅⬆️
.NET Core 3.1 - Bailout
process.internal_duration_ms189.49 ± (189.03 - 189.96) ms189.18 ± (188.72 - 189.64) ms-0.2%
process.time_to_main_ms82.66 ± (82.45 - 82.87) ms82.36 ± (82.14 - 82.57) ms-0.4%
runtime.dotnet.exceptions.count3 ± (3 - 3)3 ± (3 - 3)+0.0%
runtime.dotnet.mem.committed16.11 ± (16.08 - 16.14) MB16.17 ± (16.14 - 16.20) MB+0.4%✅⬆️
runtime.dotnet.threads.count21 ± (21 - 21)21 ± (20 - 21)-0.2%
.NET Core 3.1 - CallTarget+Inlining+NGEN
process.internal_duration_ms401.19 ± (398.61 - 403.77) ms401.97 ± (399.24 - 404.70) ms+0.2%✅⬆️
process.time_to_main_ms479.99 ± (478.95 - 481.03) ms481.15 ± (480.24 - 482.06) ms+0.2%✅⬆️
runtime.dotnet.exceptions.count3 ± (3 - 3)3 ± (3 - 3)+0.0%
runtime.dotnet.mem.committed58.87 ± (58.76 - 58.98) MB58.79 ± (58.68 - 58.90) MB-0.1%
runtime.dotnet.threads.count30 ± (29 - 30)29 ± (29 - 30)-0.1%
.NET 6 - Baseline
process.internal_duration_ms196.70 ± (196.17 - 197.24) ms195.02 ± (194.55 - 195.49) ms-0.9%
process.time_to_main_ms71.10 ± (70.92 - 71.29) ms70.28 ± (70.10 - 70.45) ms-1.2%
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed16.32 ± (16.30 - 16.34) MB16.37 ± (16.33 - 16.42) MB+0.3%✅⬆️
runtime.dotnet.threads.count19 ± (19 - 19)19 ± (19 - 19)-1.4%
.NET 6 - Bailout
process.internal_duration_ms192.59 ± (192.14 - 193.04) ms193.55 ± (193.09 - 194.00) ms+0.5%✅⬆️
process.time_to_main_ms71.27 ± (71.09 - 71.44) ms71.30 ± (71.14 - 71.45) ms+0.0%✅⬆️
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed16.09 ± (15.94 - 16.23) MB16.42 ± (16.39 - 16.45) MB+2.1%✅⬆️
runtime.dotnet.threads.count19 ± (19 - 20)20 ± (20 - 20)+3.6%✅⬆️
.NET 6 - CallTarget+Inlining+NGEN
process.internal_duration_ms409.28 ± (406.92 - 411.63) ms414.50 ± (412.14 - 416.86) ms+1.3%✅⬆️
process.time_to_main_ms443.32 ± (442.60 - 444.04) ms446.90 ± (446.20 - 447.61) ms+0.8%✅⬆️
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed59.09 ± (58.94 - 59.24) MB59.24 ± (59.14 - 59.35) MB+0.3%✅⬆️
runtime.dotnet.threads.count30 ± (29 - 30)30 ± (30 - 30)+0.1%✅⬆️
.NET 8 - Baseline
process.internal_duration_ms191.46 ± (191.10 - 191.82) ms192.61 ± (192.18 - 193.05) ms+0.6%✅⬆️
process.time_to_main_ms69.47 ± (69.23 - 69.71) ms69.51 ± (69.32 - 69.71) ms+0.1%✅⬆️
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed11.71 ± (11.69 - 11.74) MB11.69 ± (11.67 - 11.71) MB-0.2%
runtime.dotnet.threads.count18 ± (18 - 18)18 ± (18 - 18)+0.2%✅⬆️
.NET 8 - Bailout
process.internal_duration_ms193.07 ± (192.58 - 193.55) ms190.95 ± (190.52 - 191.38) ms-1.1%
process.time_to_main_ms71.23 ± (71.05 - 71.41) ms70.62 ± (70.46 - 70.78) ms-0.9%
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed11.76 ± (11.74 - 11.77) MB11.79 ± (11.75 - 11.82) MB+0.2%✅⬆️
runtime.dotnet.threads.count19 ± (19 - 19)19 ± (19 - 19)-0.3%
.NET 8 - CallTarget+Inlining+NGEN
process.internal_duration_ms371.19 ± (369.80 - 372.57) ms374.99 ± (373.26 - 376.71) ms+1.0%✅⬆️
process.time_to_main_ms433.36 ± (432.73 - 433.98) ms438.18 ± (437.23 - 439.13) ms+1.1%✅⬆️
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed47.93 ± (47.90 - 47.96) MB48.00 ± (47.97 - 48.02) MB+0.1%✅⬆️
runtime.dotnet.threads.count29 ± (29 - 29)29 ± (29 - 29)+0.1%✅⬆️
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 (7827) - mean (77ms)  : 72, 82
    master - mean (76ms)  : 69, 83

    section Bailout
    This PR (7827) - mean (80ms)  : 75, 86
    master - mean (82ms)  : 74, 90

    section CallTarget+Inlining+NGEN
    This PR (7827) - mean (1,079ms)  : 1022, 1136
    master - mean (1,074ms)  : 1003, 1144

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 (7827) - mean (119ms)  : 111, 127
    master - mean (120ms)  : 112, 129

    section Bailout
    This PR (7827) - mean (121ms)  : 113, 129
    master - mean (121ms)  : 113, 130

    section CallTarget+Inlining+NGEN
    This PR (7827) - mean (770ms)  : 735, 805
    master - mean (766ms)  : 730, 802

Loading
FakeDbCommand (.NET 6)
gantt
    title Execution time (ms) FakeDbCommand (.NET 6)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (7827) - mean (106ms)  : 97, 115
    master - mean (106ms)  : 97, 114

    section Bailout
    This PR (7827) - mean (108ms)  : 99, 118
    master - mean (106ms)  : 97, 116

    section CallTarget+Inlining+NGEN
    This PR (7827) - mean (720ms)  : 684, 755
    master - mean (715ms)  : 684, 747

Loading
FakeDbCommand (.NET 8)
gantt
    title Execution time (ms) FakeDbCommand (.NET 8)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (7827) - mean (107ms)  : 98, 116
    master - mean (106ms)  : 96, 115

    section Bailout
    This PR (7827) - mean (106ms)  : 98, 114
    master - mean (106ms)  : 99, 113

    section CallTarget+Inlining+NGEN
    This PR (7827) - mean (698ms)  : 666, 731
    master - mean (686ms)  : 654, 719

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 (7827) - mean (193ms)  : 189, 196
    master - mean (194ms)  : 188, 200

    section Bailout
    This PR (7827) - mean (196ms)  : 194, 198
    master - mean (199ms)  : 194, 205

    section CallTarget+Inlining+NGEN
    This PR (7827) - mean (1,133ms)  : 1058, 1207
    master - mean (1,133ms)  : 1068, 1197

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 (7827) - mean (278ms)  : 272, 284
    master - mean (282ms)  : 274, 290

    section Bailout
    This PR (7827) - mean (280ms)  : 274, 286
    master - mean (281ms)  : 273, 288

    section CallTarget+Inlining+NGEN
    This PR (7827) - mean (921ms)  : 868, 975
    master - mean (920ms)  : 864, 976

Loading
HttpMessageHandler (.NET 6)
gantt
    title Execution time (ms) HttpMessageHandler (.NET 6)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (7827) - mean (274ms)  : 264, 284
    master - mean (276ms)  : 266, 285

    section Bailout
    This PR (7827) - mean (273ms)  : 265, 280
    master - mean (272ms)  : 266, 278

    section CallTarget+Inlining+NGEN
    This PR (7827) - mean (895ms)  : 846, 943
    master - mean (884ms)  : 845, 924

Loading
HttpMessageHandler (.NET 8)
gantt
    title Execution time (ms) HttpMessageHandler (.NET 8)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (7827) - mean (272ms)  : 265, 278
    master - mean (271ms)  : 264, 278

    section Bailout
    This PR (7827) - mean (271ms)  : 265, 278
    master - mean (274ms)  : 265, 284

    section CallTarget+Inlining+NGEN
    This PR (7827) - mean (845ms)  : 808, 883
    master - mean (836ms)  : 810, 862

Loading

@pr-commenter
Copy link

pr-commenter bot commented Nov 14, 2025

Benchmarks

Benchmarks Report for benchmark platform 🐌

Benchmarks for #7827 compared to master:

  • All benchmarks have the same speed
  • 1 benchmarks have fewer allocations
  • 6 benchmarks have more allocations

The following thresholds were used for comparing the benchmark speeds:

  • Mann–Whitney U test with statistical test for significance of 5%
  • Only results indicating a difference greater than 10% and 0.3 ns are considered.

Allocation changes below 0.5% are ignored.

Benchmark details

Benchmarks.Trace.ActivityBenchmark - Same speed ✔️ More allocations ⚠️

More allocations ⚠️ in #7827

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.ActivityBenchmark.StartStopWithChild‑netcoreapp3.1 5.57 KB 5.71 KB 140 B 2.51%
Benchmarks.Trace.ActivityBenchmark.StartStopWithChild‑net472 5.94 KB 6.03 KB 93 B 1.57%

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master StartStopWithChild net6.0 10.7μs 60.2ns 395ns 0 0 0 5.51 KB
master StartStopWithChild netcoreapp3.1 13.5μs 45.3ns 163ns 0 0 0 5.57 KB
master StartStopWithChild net472 22.5μs 108ns 447ns 0.992 0.441 0.11 5.94 KB
#7827 StartStopWithChild net6.0 10.7μs 27.8ns 96.4ns 0 0 0 5.51 KB
#7827 StartStopWithChild netcoreapp3.1 13.7μs 71.1ns 341ns 0 0 0 5.71 KB
#7827 StartStopWithChild net472 22.7μs 105ns 408ns 0.896 0.336 0 6.03 KB
Benchmarks.Trace.AgentWriterBenchmark - Same speed ✔️ More allocations ⚠️

More allocations ⚠️ in #7827

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.AgentWriterBenchmark.WriteAndFlushEnrichedTraces‑net472 3.26 KB 3.44 KB 174 B 5.33%

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master WriteAndFlushEnrichedTraces net6.0 1.28ms 208ns 807ns 0 0 0 2.7 KB
master WriteAndFlushEnrichedTraces netcoreapp3.1 1.43ms 693ns 2.68μs 0 0 0 2.71 KB
master WriteAndFlushEnrichedTraces net472 1.7ms 206ns 771ns 0 0 0 3.26 KB
#7827 WriteAndFlushEnrichedTraces net6.0 1.28ms 127ns 492ns 0 0 0 2.7 KB
#7827 WriteAndFlushEnrichedTraces netcoreapp3.1 1.38ms 129ns 483ns 0 0 0 2.7 KB
#7827 WriteAndFlushEnrichedTraces net472 1.81ms 1.49μs 5.76μs 0 0 0 3.44 KB
Benchmarks.Trace.Asm.AppSecBodyBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master AllCycleSimpleBody net6.0 1.12μs 0.55ns 2.06ns 0 0 0 1.22 KB
master AllCycleSimpleBody netcoreapp3.1 1.41μs 1.15ns 4.44ns 0 0 0 1.2 KB
master AllCycleSimpleBody net472 1.01μs 0.479ns 1.86ns 0.192 0 0 1.23 KB
master AllCycleMoreComplexBody net6.0 7.24μs 6.84ns 26.5ns 0 0 0 4.72 KB
master AllCycleMoreComplexBody netcoreapp3.1 9.18μs 45.1ns 191ns 0 0 0 4.62 KB
master AllCycleMoreComplexBody net472 7.69μs 3.53ns 13.7ns 0.729 0 0 4.74 KB
master ObjectExtractorSimpleBody net6.0 340ns 1.65ns 6.81ns 0 0 0 280 B
master ObjectExtractorSimpleBody netcoreapp3.1 395ns 2.18ns 12.4ns 0 0 0 272 B
master ObjectExtractorSimpleBody net472 295ns 0.0129ns 0.05ns 0.0445 0 0 281 B
master ObjectExtractorMoreComplexBody net6.0 6.3μs 30.8ns 134ns 0 0 0 3.78 KB
master ObjectExtractorMoreComplexBody netcoreapp3.1 7.9μs 36.9ns 148ns 0 0 0 3.69 KB
master ObjectExtractorMoreComplexBody net472 6.67μs 1.38ns 5.15ns 0.601 0 0 3.8 KB
#7827 AllCycleSimpleBody net6.0 1.08μs 6.2ns 51.1ns 0 0 0 1.22 KB
#7827 AllCycleSimpleBody netcoreapp3.1 1.38μs 7.94ns 61.5ns 0 0 0 1.2 KB
#7827 AllCycleSimpleBody net472 989ns 0.406ns 1.52ns 0.193 0 0 1.23 KB
#7827 AllCycleMoreComplexBody net6.0 7.09μs 38.5ns 214ns 0 0 0 4.72 KB
#7827 AllCycleMoreComplexBody netcoreapp3.1 8.9μs 47ns 253ns 0 0 0 4.62 KB
#7827 AllCycleMoreComplexBody net472 7.71μs 3.34ns 12.9ns 0.732 0 0 4.74 KB
#7827 ObjectExtractorSimpleBody net6.0 330ns 0.138ns 0.533ns 0 0 0 280 B
#7827 ObjectExtractorSimpleBody netcoreapp3.1 405ns 2.11ns 10.5ns 0 0 0 272 B
#7827 ObjectExtractorSimpleBody net472 304ns 0.0131ns 0.0489ns 0.0443 0 0 281 B
#7827 ObjectExtractorMoreComplexBody net6.0 6.32μs 4.16ns 15.6ns 0 0 0 3.78 KB
#7827 ObjectExtractorMoreComplexBody netcoreapp3.1 7.98μs 41.9ns 209ns 0 0 0 3.69 KB
#7827 ObjectExtractorMoreComplexBody net472 6.72μs 2.27ns 8.79ns 0.573 0 0 3.8 KB
Benchmarks.Trace.Asm.AppSecEncoderBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master EncodeArgs net6.0 77.9μs 182ns 706ns 0 0 0 32.4 KB
master EncodeArgs netcoreapp3.1 99.1μs 23.8ns 92.2ns 0 0 0 32.4 KB
master EncodeArgs net472 109μs 11.8ns 45.9ns 4.89 0 0 32.5 KB
master EncodeLegacyArgs net6.0 146μs 10.8ns 41.7ns 0 0 0 2.14 KB
master EncodeLegacyArgs netcoreapp3.1 198μs 32.5ns 126ns 0 0 0 2.14 KB
master EncodeLegacyArgs net472 262μs 25.1ns 97.4ns 0 0 0 2.14 KB
#7827 EncodeArgs net6.0 75.9μs 219ns 847ns 0 0 0 32.4 KB
#7827 EncodeArgs netcoreapp3.1 97.9μs 216ns 837ns 0 0 0 32.4 KB
#7827 EncodeArgs net472 110μs 62.3ns 241ns 4.95 0 0 32.5 KB
#7827 EncodeLegacyArgs net6.0 144μs 9.09ns 35.2ns 0 0 0 2.14 KB
#7827 EncodeLegacyArgs netcoreapp3.1 200μs 62.9ns 235ns 0 0 0 2.14 KB
#7827 EncodeLegacyArgs net472 264μs 18.4ns 68.7ns 0 0 0 2.14 KB
Benchmarks.Trace.Asm.AppSecWafBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master RunWafRealisticBenchmark net6.0 439μs 1.9μs 6.85μs 0 0 0 4.55 KB
master RunWafRealisticBenchmark netcoreapp3.1 473μs 3.2μs 30μs 0 0 0 4.48 KB
master RunWafRealisticBenchmark net472 497μs 660ns 2.47μs 0 0 0 0 b
master RunWafRealisticBenchmarkWithAttack net6.0 312μs 1.46μs 5.46μs 0 0 0 2.24 KB
master RunWafRealisticBenchmarkWithAttack netcoreapp3.1 354μs 2.91μs 27.8μs 0 0 0 2.22 KB
master RunWafRealisticBenchmarkWithAttack net472 369μs 199ns 718ns 0 0 0 0 b
#7827 RunWafRealisticBenchmark net6.0 420μs 545ns 1.89μs 0 0 0 4.55 KB
#7827 RunWafRealisticBenchmark netcoreapp3.1 447μs 1.66μs 5.76μs 0 0 0 4.48 KB
#7827 RunWafRealisticBenchmark net472 497μs 305ns 1.06μs 0 0 0 0 b
#7827 RunWafRealisticBenchmarkWithAttack net6.0 309μs 590ns 2.13μs 0 0 0 2.24 KB
#7827 RunWafRealisticBenchmarkWithAttack netcoreapp3.1 356μs 2.9μs 28.1μs 0 0 0 2.22 KB
#7827 RunWafRealisticBenchmarkWithAttack net472 373μs 115ns 416ns 0 0 0 0 b
Benchmarks.Trace.AspNetCoreBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master SendRequest net6.0 86.5μs 456ns 2.37μs 0 0 0 18.97 KB
master SendRequest netcoreapp3.1 97.4μs 245ns 1.37μs 0 0 0 21.18 KB
master SendRequest net472 0ns 0ns 0ns 0 0 0 0 b
#7827 SendRequest net6.0 85.2μs 241ns 900ns 0 0 0 18.97 KB
#7827 SendRequest netcoreapp3.1 97.5μs 451ns 2.99μs 0 0 0 21.18 KB
#7827 SendRequest net472 0ns 0ns 0ns 0 0 0 0 b
Benchmarks.Trace.CharSliceBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master OriginalCharSlice net6.0 1.91ms 2.12μs 8.22μs 0 0 0 640 KB
master OriginalCharSlice netcoreapp3.1 4.2ms 2.19μs 8.46μs 0 0 0 640.05 KB
master OriginalCharSlice net472 2.57ms 390ns 1.41μs 0 0 0 638.98 KB
master OptimizedCharSlice net6.0 1.44ms 1.05μs 4.06μs 0 0 0 0 b
master OptimizedCharSlice netcoreapp3.1 2.81ms 791ns 2.85μs 0 0 0 0 b
master OptimizedCharSlice net472 2.15ms 694ns 2.5μs 0 0 0 0 b
master OptimizedCharSliceWithPool net6.0 1.01ms 1.23μs 4.76μs 0 0 0 0 b
master OptimizedCharSliceWithPool netcoreapp3.1 1.86ms 1.63μs 6.31μs 0 0 0 0 b
master OptimizedCharSliceWithPool net472 1.17ms 940ns 3.64μs 0 0 0 0 b
#7827 OriginalCharSlice net6.0 1.97ms 1.33μs 4.8μs 0 0 0 640 KB
#7827 OriginalCharSlice netcoreapp3.1 3.87ms 1.84μs 7.13μs 0 0 0 640.05 KB
#7827 OriginalCharSlice net472 2.61ms 570ns 2.13μs 0 0 0 638.98 KB
#7827 OptimizedCharSlice net6.0 1.51ms 536ns 2.01μs 0 0 0 0 b
#7827 OptimizedCharSlice netcoreapp3.1 2.77ms 591ns 2.21μs 0 0 0 0 b
#7827 OptimizedCharSlice net472 2ms 944ns 3.4μs 0 0 0 0 b
#7827 OptimizedCharSliceWithPool net6.0 1.01ms 735ns 2.85μs 0 0 0 0 b
#7827 OptimizedCharSliceWithPool netcoreapp3.1 1.89ms 2.38μs 9.21μs 0 0 0 0 b
#7827 OptimizedCharSliceWithPool net472 1.16ms 488ns 1.83μs 0 0 0 0 b
Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark - Same speed ✔️ More allocations ⚠️

More allocations ⚠️ in #7827

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark.WriteAndFlushEnrichedTraces‑net6.0 41.73 KB 42.59 KB 865 B 2.07%

Fewer allocations 🎉 in #7827

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark.WriteAndFlushEnrichedTraces‑netcoreapp3.1 42.1 KB 41.83 KB -264 B -0.63%

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master WriteAndFlushEnrichedTraces net6.0 658μs 2.16μs 16.4μs 0 0 0 41.73 KB
master WriteAndFlushEnrichedTraces netcoreapp3.1 778μs 4.14μs 21.5μs 0 0 0 42.1 KB
master WriteAndFlushEnrichedTraces net472 971μs 4.77μs 20.2μs 4.81 0 0 56.04 KB
#7827 WriteAndFlushEnrichedTraces net6.0 700μs 3.69μs 18.1μs 0 0 0 42.59 KB
#7827 WriteAndFlushEnrichedTraces netcoreapp3.1 756μs 4.24μs 30μs 0 0 0 41.83 KB
#7827 WriteAndFlushEnrichedTraces net472 947μs 4.56μs 17.7μs 4.81 0 0 55.89 KB
Benchmarks.Trace.DbCommandBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master ExecuteNonQuery net6.0 1.9μs 7.2ns 27.9ns 0 0 0 968 B
master ExecuteNonQuery netcoreapp3.1 2.48μs 3.49ns 13ns 0 0 0 960 B
master ExecuteNonQuery net472 2.92μs 2.32ns 8.68ns 0.144 0 0 931 B
#7827 ExecuteNonQuery net6.0 1.88μs 9.21ns 38ns 0 0 0 968 B
#7827 ExecuteNonQuery netcoreapp3.1 2.56μs 7.93ns 30.7ns 0 0 0 960 B
#7827 ExecuteNonQuery net472 2.8μs 2.5ns 9.36ns 0.141 0 0 931 B
Benchmarks.Trace.ElasticsearchBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master CallElasticsearch net6.0 1.76μs 6.41ns 24.8ns 0 0 0 952 B
master CallElasticsearch netcoreapp3.1 2.29μs 4.79ns 18.5ns 0 0 0 968 B
master CallElasticsearch net472 3.32μs 5.15ns 20ns 0.15 0 0 955 B
master CallElasticsearchAsync net6.0 1.89μs 9.5ns 40.3ns 0 0 0 928 B
master CallElasticsearchAsync netcoreapp3.1 2.44μs 7.62ns 29.5ns 0 0 0 1.02 KB
master CallElasticsearchAsync net472 3.69μs 2.19ns 8.49ns 0.146 0 0 1.01 KB
#7827 CallElasticsearch net6.0 1.68μs 8.5ns 36.1ns 0 0 0 952 B
#7827 CallElasticsearch netcoreapp3.1 2.37μs 1.91ns 7.41ns 0 0 0 968 B
#7827 CallElasticsearch net472 3.39μs 6.42ns 24.9ns 0.135 0 0 955 B
#7827 CallElasticsearchAsync net6.0 1.7μs 8.66ns 39.7ns 0 0 0 928 B
#7827 CallElasticsearchAsync netcoreapp3.1 2.35μs 11.7ns 52.5ns 0 0 0 1.02 KB
#7827 CallElasticsearchAsync net472 3.49μs 3.53ns 13.7ns 0.157 0 0 1.01 KB
Benchmarks.Trace.GraphQLBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master ExecuteAsync net6.0 1.89μs 1.1ns 4.25ns 0 0 0 896 B
master ExecuteAsync netcoreapp3.1 2.42μs 6.21ns 24ns 0 0 0 896 B
master ExecuteAsync net472 2.55μs 2.84ns 11ns 0.126 0 0 859 B
#7827 ExecuteAsync net6.0 1.91μs 7.71ns 28.8ns 0 0 0 896 B
#7827 ExecuteAsync netcoreapp3.1 2.32μs 4.58ns 17.7ns 0 0 0 896 B
#7827 ExecuteAsync net472 2.58μs 1.15ns 4ns 0.129 0 0 858 B
Benchmarks.Trace.HttpClientBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master SendAsync net6.0 7.04μs 28.5ns 110ns 0 0 0 2.29 KB
master SendAsync netcoreapp3.1 8.29μs 31.9ns 124ns 0 0 0 2.83 KB
master SendAsync net472 12μs 4.52ns 17.5ns 0.481 0 0 3.08 KB
#7827 SendAsync net6.0 7.01μs 25.2ns 94.2ns 0 0 0 2.29 KB
#7827 SendAsync netcoreapp3.1 8.43μs 15.1ns 58.6ns 0 0 0 2.83 KB
#7827 SendAsync net472 11.8μs 5.96ns 23.1ns 0.47 0 0 3.08 KB
Benchmarks.Trace.Iast.StringAspectsBenchmark - Same speed ✔️ More allocations ⚠️

More allocations ⚠️ in #7827

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.Iast.StringAspectsBenchmark.StringConcatAspectBenchmark‑netcoreapp3.1 257.02 KB 272.94 KB 15.91 KB 6.19%
Benchmarks.Trace.Iast.StringAspectsBenchmark.StringConcatAspectBenchmark‑net6.0 257.62 KB 272.86 KB 15.24 KB 5.92%

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master StringConcatBenchmark net6.0 45.3μs 254ns 2.21μs 0 0 0 42.51 KB
master StringConcatBenchmark netcoreapp3.1 49.9μs 203ns 950ns 0 0 0 42.54 KB
master StringConcatBenchmark net472 56.8μs 266ns 1.03μs 0 0 0 49.15 KB
master StringConcatAspectBenchmark net6.0 444μs 1.39μs 6.06μs 0 0 0 257.62 KB
master StringConcatAspectBenchmark netcoreapp3.1 485μs 1.23μs 5.36μs 0 0 0 257.02 KB
master StringConcatAspectBenchmark net472 406μs 2.01μs 8.98μs 0 0 0 270.34 KB
#7827 StringConcatBenchmark net6.0 45.1μs 233ns 1.09μs 0 0 0 42.51 KB
#7827 StringConcatBenchmark netcoreapp3.1 50.7μs 294ns 2.35μs 0 0 0 42.54 KB
#7827 StringConcatBenchmark net472 56.3μs 285ns 1.21μs 0 0 0 49.15 KB
#7827 StringConcatAspectBenchmark net6.0 476μs 1.73μs 7.15μs 0 0 0 272.86 KB
#7827 StringConcatAspectBenchmark netcoreapp3.1 520μs 2.44μs 9.12μs 0 0 0 272.94 KB
#7827 StringConcatAspectBenchmark net472 403μs 1.99μs 9.1μs 0 0 0 270.34 KB
Benchmarks.Trace.ILoggerBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master EnrichedLog net6.0 2.66μs 0.531ns 2.06ns 0 0 0 1.69 KB
master EnrichedLog netcoreapp3.1 3.58μs 12.8ns 49.6ns 0 0 0 1.7 KB
master EnrichedLog net472 3.72μs 7.02ns 27.2ns 0.241 0 0 1.6 KB
#7827 EnrichedLog net6.0 2.66μs 6.23ns 24.1ns 0 0 0 1.69 KB
#7827 EnrichedLog netcoreapp3.1 3.52μs 12.1ns 46.7ns 0 0 0 1.7 KB
#7827 EnrichedLog net472 3.95μs 4.4ns 17ns 0.254 0 0 1.6 KB
Benchmarks.Trace.Log4netBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master EnrichedLog net6.0 123μs 89.8ns 348ns 0 0 0 4.31 KB
master EnrichedLog netcoreapp3.1 128μs 153ns 572ns 0 0 0 4.31 KB
master EnrichedLog net472 168μs 270ns 1.05μs 0 0 0 4.51 KB
#7827 EnrichedLog net6.0 124μs 86.8ns 325ns 0 0 0 4.31 KB
#7827 EnrichedLog netcoreapp3.1 128μs 164ns 634ns 0 0 0 4.31 KB
#7827 EnrichedLog net472 167μs 200ns 774ns 0 0 0 4.51 KB
Benchmarks.Trace.NLogBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master EnrichedLog net6.0 5.06μs 17.1ns 66.4ns 0 0 0 2.24 KB
master EnrichedLog netcoreapp3.1 6.93μs 20.2ns 78.1ns 0 0 0 2.26 KB
master EnrichedLog net472 7.75μs 10ns 38.8ns 0.312 0 0 2.05 KB
#7827 EnrichedLog net6.0 5.27μs 3.55ns 13.7ns 0 0 0 2.24 KB
#7827 EnrichedLog netcoreapp3.1 6.85μs 16.8ns 60.5ns 0 0 0 2.26 KB
#7827 EnrichedLog net472 7.6μs 7.11ns 27.6ns 0.304 0 0 2.05 KB
Benchmarks.Trace.RedisBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master SendReceive net6.0 1.93μs 6.93ns 25ns 0 0 0 1.12 KB
master SendReceive netcoreapp3.1 2.71μs 11.8ns 45.8ns 0 0 0 1.14 KB
master SendReceive net472 2.86μs 11.1ns 43.2ns 0.173 0 0 1.12 KB
#7827 SendReceive net6.0 1.92μs 9.09ns 35.2ns 0 0 0 1.12 KB
#7827 SendReceive netcoreapp3.1 2.42μs 12ns 53.8ns 0 0 0 1.14 KB
#7827 SendReceive net472 2.81μs 2.68ns 9.65ns 0.169 0 0 1.12 KB
Benchmarks.Trace.SerilogBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master EnrichedLog net6.0 4.44μs 12.2ns 47.4ns 0 0 0 1.58 KB
master EnrichedLog netcoreapp3.1 5.54μs 11.6ns 44.8ns 0 0 0 1.63 KB
master EnrichedLog net472 7.15μs 8.45ns 32.7ns 0.319 0 0 2.03 KB
#7827 EnrichedLog net6.0 4.3μs 15.9ns 59.5ns 0 0 0 1.58 KB
#7827 EnrichedLog netcoreapp3.1 5.79μs 19.4ns 75.1ns 0 0 0 1.63 KB
#7827 EnrichedLog net472 6.53μs 11.7ns 45.4ns 0.293 0 0 2.03 KB
Benchmarks.Trace.SpanBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master StartFinishSpan net6.0 779ns 2.45ns 9.5ns 0 0 0 520 B
master StartFinishSpan netcoreapp3.1 961ns 4.97ns 24.8ns 0 0 0 520 B
master StartFinishSpan net472 887ns 0.0294ns 0.106ns 0.0801 0 0 522 B
master StartFinishScope net6.0 908ns 4.36ns 18.5ns 0 0 0 640 B
master StartFinishScope netcoreapp3.1 1.15μs 4.75ns 18.4ns 0 0 0 640 B
master StartFinishScope net472 1.1μs 0.263ns 0.91ns 0.0935 0 0 602 B
master StartFinishTwoScopes net6.0 1.81μs 4.71ns 18.2ns 0 0 0 1.19 KB
master StartFinishTwoScopes netcoreapp3.1 2.22μs 9.17ns 35.5ns 0 0 0 1.19 KB
master StartFinishTwoScopes net472 2.13μs 0.621ns 2.32ns 0.171 0 0 1.08 KB
#7827 StartFinishSpan net6.0 766ns 3.79ns 15.6ns 0 0 0 520 B
#7827 StartFinishSpan netcoreapp3.1 978ns 4.63ns 17.3ns 0 0 0 520 B
#7827 StartFinishSpan net472 896ns 0.111ns 0.401ns 0.0808 0 0 522 B
#7827 StartFinishScope net6.0 933ns 4.63ns 21.7ns 0 0 0 640 B
#7827 StartFinishScope netcoreapp3.1 1.15μs 5ns 19.4ns 0 0 0 640 B
#7827 StartFinishScope net472 1.11μs 0.391ns 1.52ns 0.0949 0 0 602 B
#7827 StartFinishTwoScopes net6.0 1.77μs 9.58ns 53.3ns 0 0 0 1.19 KB
#7827 StartFinishTwoScopes netcoreapp3.1 2.21μs 11.5ns 53.7ns 0 0 0 1.19 KB
#7827 StartFinishTwoScopes net472 2.18μs 1.63ns 6.3ns 0.164 0 0 1.08 KB
Benchmarks.Trace.TraceAnnotationsBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master RunOnMethodBegin net6.0 1.07μs 4.85ns 19.4ns 0 0 0 640 B
master RunOnMethodBegin netcoreapp3.1 1.39μs 6.44ns 25.8ns 0 0 0 640 B
master RunOnMethodBegin net472 1.43μs 0.673ns 2.61ns 0.0933 0 0 602 B
#7827 RunOnMethodBegin net6.0 1.1μs 0.629ns 2.35ns 0 0 0 640 B
#7827 RunOnMethodBegin netcoreapp3.1 1.4μs 5.76ns 22.3ns 0 0 0 640 B
#7827 RunOnMethodBegin net472 1.43μs 0.188ns 0.679ns 0.0934 0 0 602 B

@github-actions github-actions bot added area:tracer The core tracer library (Datadog.Trace, does not include OpenTracing, native code, or integrations) area:data-streams-monitoring labels Nov 19, 2025
@robcarlan-datadog robcarlan-datadog changed the title [Testing] Fixing DSM flush logic thread usage Fixing DSM flush logic thread CPU usage Dec 2, 2025
@robcarlan-datadog robcarlan-datadog changed the title Fixing DSM flush logic thread CPU usage Fixing DSM flush logic & CPU usage Dec 2, 2025
@robcarlan-datadog robcarlan-datadog marked this pull request as ready for review December 2, 2025 15:26
@robcarlan-datadog robcarlan-datadog requested review from a team as code owners December 2, 2025 15:26
Copy link
Member

@andrewlock andrewlock left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like the separation of the two jobs, but unfortunately I think we're going to need to rewrite the async timer part 🙁

Copy link
Member

@andrewlock andrewlock left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, thanks!

@robcarlan-datadog robcarlan-datadog requested a review from a team as a code owner December 8, 2025 19:56
@robcarlan-datadog robcarlan-datadog merged commit 1813369 into master Dec 8, 2025
148 of 150 checks passed
@robcarlan-datadog robcarlan-datadog deleted the rob.carlan/apms-17551-dsm-cpu-bottleneck branch December 8, 2025 22:06
@github-actions github-actions bot added this to the vNext-v3 milestone Dec 8, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:data-streams-monitoring area:tracer The core tracer library (Datadog.Trace, does not include OpenTracing, native code, or integrations)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants