dd-trace-dotnet icon indicating copy to clipboard operation
dd-trace-dotnet copied to clipboard

Universal binaries: `Datadog.Trace.ClrProfiler` & `Datadog.Linux.ApiWrapper`

Open gleocadie opened this issue 1 year ago • 6 comments

Summary of changes

Make the Datadog.Trace.ClrProfiler & Datadog.Linux.ApiWrapper binaries universal: use the same binary whether it runs on musl-libc-based linux distribution or glibc-based linux distribution.

Reason for change

The goal is to simplify the setup in general and particularly with SSI. Today, we have customer reports where their applications are crashing after having installed the .NET product. It seems that running glibc-based binary on alpine with glibc-compatibility installed, leads to crash.

This happens because the wrong binaries are deployed there. To fix that we will ship the the glibc and musl-libc binaries in the same package. And this PR contributes to it by using one and only binary for those environment.

Implementation details

  • Use libddwaf Docker image to setup a universal build environment
  • Change the CI to have jobs building the universal binaries for x86_64 and for arm64.
  • Change everywhere in the AzDo yml script to download the universal binaries in order to run the tests.
  • Code change to build as universal + add glibc-compat file
  • For the wrapper, we have to make sure that it can be loaded even if the process does not depends on libpthread and libdl.

Test coverage

  • The current tests MUST pass

Other details

gleocadie avatar May 10 '24 09:05 gleocadie

Datadog Report

Branch report: gleocadie/universal-native-loader Commit report: d85f78e Test service: dd-trace-dotnet

:white_check_mark: 0 Failed, 299739 Passed, 1658 Skipped, 14h 14m 24.56s Total Time :hourglass: 2 Performance Regressions

:hourglass: Performance Regressions vs Default Branch (2)

  • Baseline_liveheap - scenarios 3.69s (+652.35ms, +21%) - Details
  • Profiler_liveheap - scenarios 4.95s (+622.87ms, +14%) - Details

datadog-ddstaging[bot] avatar May 10 '24 09:05 datadog-ddstaging[bot]

Execution-Time Benchmarks Report :stopwatch:

Execution-time results for samples comparing the following branches/commits:

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 shown 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).

gantt
    title Execution time (ms) FakeDbCommand (.NET Framework 4.6.2) 
    dateFormat  X
    axisFormat %s
    todayMarker off
    section Baseline
    This PR (5550) - mean (76ms)  : 64, 88
     .   : milestone, 76,
    master - mean (72ms)  : 63, 82
     .   : milestone, 72,

    section CallTarget+Inlining+NGEN
    This PR (5550) - mean (1,037ms)  : 1015, 1060
     .   : milestone, 1037,
    master - mean (1,013ms)  : 991, 1035
     .   : milestone, 1013,

gantt
    title Execution time (ms) FakeDbCommand (.NET Core 3.1) 
    dateFormat  X
    axisFormat %s
    todayMarker off
    section Baseline
    This PR (5550) - mean (109ms)  : 106, 113
     .   : milestone, 109,
    master - mean (109ms)  : 106, 113
     .   : milestone, 109,

    section CallTarget+Inlining+NGEN
    This PR (5550) - mean (728ms)  : 706, 750
     .   : milestone, 728,
    master - mean (708ms)  : 685, 731
     .   : milestone, 708,

gantt
    title Execution time (ms) FakeDbCommand (.NET 6) 
    dateFormat  X
    axisFormat %s
    todayMarker off
    section Baseline
    This PR (5550) - mean (92ms)  : 90, 95
     .   : milestone, 92,
    master - mean (93ms)  : 90, 97
     .   : milestone, 93,

    section CallTarget+Inlining+NGEN
    This PR (5550) - mean (672ms)  : 641, 702
     .   : milestone, 672,
    master - mean (658ms)  : 634, 682
     .   : milestone, 658,

gantt
    title Execution time (ms) HttpMessageHandler (.NET Framework 4.6.2) 
    dateFormat  X
    axisFormat %s
    todayMarker off
    section Baseline
    This PR (5550) - mean (191ms)  : 187, 194
     .   : milestone, 191,
    master - mean (190ms)  : 187, 194
     .   : milestone, 190,

    section CallTarget+Inlining+NGEN
    This PR (5550) - mean (1,129ms)  : 1098, 1160
     .   : milestone, 1129,
    master - mean (1,108ms)  : 1088, 1128
     .   : milestone, 1108,

gantt
    title Execution time (ms) HttpMessageHandler (.NET Core 3.1) 
    dateFormat  X
    axisFormat %s
    todayMarker off
    section Baseline
    This PR (5550) - mean (276ms)  : 270, 283
     .   : milestone, 276,
    master - mean (276ms)  : 272, 279
     .   : milestone, 276,

    section CallTarget+Inlining+NGEN
    This PR (5550) - mean (898ms)  : 862, 935
     .   : milestone, 898,
    master - mean (881ms)  : 860, 903
     .   : milestone, 881,

gantt
    title Execution time (ms) HttpMessageHandler (.NET 6) 
    dateFormat  X
    axisFormat %s
    todayMarker off
    section Baseline
    This PR (5550) - mean (266ms)  : 262, 269
     .   : milestone, 266,
    master - mean (264ms)  : 260, 267
     .   : milestone, 264,

    section CallTarget+Inlining+NGEN
    This PR (5550) - mean (880ms)  : 847, 913
     .   : milestone, 880,
    master - mean (859ms)  : 837, 882
     .   : milestone, 859,

andrewlock avatar May 10 '24 10:05 andrewlock

Benchmarks Report for tracer :snail:

Benchmarks for #5550 compared to master:

  • 1 benchmarks are faster, with geometric mean 1.186
  • 3 benchmarks are slower, with geometric mean 1.142
  • All benchmarks have the same 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 :heavy_check_mark: Same allocations :heavy_check_mark:

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master StartStopWithChild net6.0 7.59μs 42ns 256ns 0.0108 0.0036 0 5.43 KB
master StartStopWithChild netcoreapp3.1 10.1μs 56.5ns 348ns 0.0217 0.0108 0 5.62 KB
master StartStopWithChild net472 16.2μs 64.5ns 250ns 1.04 0.327 0.106 6.07 KB
#5550 StartStopWithChild net6.0 7.74μs 42.5ns 244ns 0.016 0.00798 0 5.43 KB
#5550 StartStopWithChild netcoreapp3.1 9.78μs 53.4ns 316ns 0.019 0.00952 0 5.61 KB
#5550 StartStopWithChild net472 16.6μs 76.1ns 305ns 1.02 0.304 0.088 6.06 KB
Benchmarks.Trace.AgentWriterBenchmark - Slower :warning: Same allocations :heavy_check_mark:

Slower :warning: in #5550

Benchmark diff/base Base Median (ns) Diff Median (ns) Modality
Benchmarks.Trace.AgentWriterBenchmark.WriteAndFlushEnrichedTraces‑net6.0 1.121 477,068.03 535,005.03

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master WriteAndFlushEnrichedTraces net6.0 477μs 149ns 576ns 0 0 0 2.7 KB
master WriteAndFlushEnrichedTraces netcoreapp3.1 628μs 292ns 1.09μs 0 0 0 2.7 KB
master WriteAndFlushEnrichedTraces net472 822μs 305ns 1.18μs 0.411 0 0 3.3 KB
#5550 WriteAndFlushEnrichedTraces net6.0 535μs 169ns 633ns 0 0 0 2.7 KB
#5550 WriteAndFlushEnrichedTraces netcoreapp3.1 637μs 133ns 496ns 0 0 0 2.7 KB
#5550 WriteAndFlushEnrichedTraces net472 845μs 224ns 867ns 0.419 0 0 3.3 KB
Benchmarks.Trace.AspNetCoreBenchmark - Same speed :heavy_check_mark: Same allocations :heavy_check_mark:

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master SendRequest net6.0 173μs 187ns 723ns 0.173 0 0 18.45 KB
master SendRequest netcoreapp3.1 194μs 306ns 1.19μs 0.193 0 0 20.61 KB
master SendRequest net472 0.000434ns 0.000221ns 0.000826ns 0 0 0 0 b
#5550 SendRequest net6.0 170μs 183ns 711ns 0.255 0 0 18.45 KB
#5550 SendRequest netcoreapp3.1 190μs 339ns 1.31μs 0.19 0 0 20.61 KB
#5550 SendRequest net472 0ns 0ns 0ns 0 0 0 0 b
Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark - Same speed :heavy_check_mark: Same allocations :heavy_check_mark:

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master WriteAndFlushEnrichedTraces net6.0 544μs 343ns 1.33μs 0.53 0 0 41.73 KB
master WriteAndFlushEnrichedTraces netcoreapp3.1 655μs 792ns 3.07μs 0.322 0 0 41.72 KB
master WriteAndFlushEnrichedTraces net472 837μs 2.15μs 8.05μs 8.28 2.48 0.414 53.22 KB
#5550 WriteAndFlushEnrichedTraces net6.0 546μs 2.07μs 8.02μs 0.541 0 0 41.59 KB
#5550 WriteAndFlushEnrichedTraces netcoreapp3.1 647μs 1.48μs 5.75μs 0.317 0 0 41.83 KB
#5550 WriteAndFlushEnrichedTraces net472 851μs 3.53μs 12.7μs 8.45 2.53 0.422 53.23 KB
Benchmarks.Trace.DbCommandBenchmark - Same speed :heavy_check_mark: Same allocations :heavy_check_mark:

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master ExecuteNonQuery net6.0 1.17μs 0.501ns 1.94ns 0.014 0 0 1.02 KB
master ExecuteNonQuery netcoreapp3.1 1.59μs 0.816ns 3.16ns 0.0136 0 0 1.02 KB
master ExecuteNonQuery net472 1.97μs 1.02ns 3.94ns 0.157 0 0 987 B
#5550 ExecuteNonQuery net6.0 1.26μs 0.434ns 1.68ns 0.0145 0 0 1.02 KB
#5550 ExecuteNonQuery netcoreapp3.1 1.68μs 0.53ns 1.91ns 0.0134 0 0 1.02 KB
#5550 ExecuteNonQuery net472 1.97μs 0.46ns 1.59ns 0.157 0 0 987 B
Benchmarks.Trace.ElasticsearchBenchmark - Slower :warning: Same allocations :heavy_check_mark:

Slower :warning: in #5550

Benchmark diff/base Base Median (ns) Diff Median (ns) Modality
Benchmarks.Trace.ElasticsearchBenchmark.CallElasticsearchAsync‑net6.0 1.116 1,131.99 1,262.74

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master CallElasticsearch net6.0 1.18μs 1.18ns 4.57ns 0.014 0 0 976 B
master CallElasticsearch netcoreapp3.1 1.52μs 1.46ns 5.48ns 0.0131 0 0 976 B
master CallElasticsearch net472 2.52μs 1.03ns 3.97ns 0.158 0 0 995 B
master CallElasticsearchAsync net6.0 1.13μs 0.815ns 3.05ns 0.0132 0 0 952 B
master CallElasticsearchAsync netcoreapp3.1 1.52μs 0.525ns 1.96ns 0.0137 0 0 1.02 KB
master CallElasticsearchAsync net472 2.63μs 1.82ns 7.07ns 0.167 0 0 1.05 KB
#5550 CallElasticsearch net6.0 1.22μs 0.674ns 2.52ns 0.0134 0 0 976 B
#5550 CallElasticsearch netcoreapp3.1 1.53μs 0.673ns 2.52ns 0.0128 0 0 976 B
#5550 CallElasticsearch net472 2.51μs 0.89ns 3.33ns 0.157 0 0 995 B
#5550 CallElasticsearchAsync net6.0 1.26μs 0.472ns 1.77ns 0.0133 0 0 952 B
#5550 CallElasticsearchAsync netcoreapp3.1 1.65μs 1.99ns 7.45ns 0.0139 0 0 1.02 KB
#5550 CallElasticsearchAsync net472 2.66μs 2.04ns 7.92ns 0.166 0 0 1.05 KB
Benchmarks.Trace.GraphQLBenchmark - Same speed :heavy_check_mark: Same allocations :heavy_check_mark:

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master ExecuteAsync net6.0 1.22μs 0.483ns 1.81ns 0.0135 0 0 952 B
master ExecuteAsync netcoreapp3.1 1.58μs 0.559ns 2.16ns 0.0127 0 0 952 B
master ExecuteAsync net472 1.81μs 0.866ns 3.35ns 0.145 0 0 915 B
#5550 ExecuteAsync net6.0 1.29μs 1.13ns 4.39ns 0.0135 0 0 952 B
#5550 ExecuteAsync netcoreapp3.1 1.66μs 1.23ns 4.62ns 0.0124 0 0 952 B
#5550 ExecuteAsync net472 1.73μs 0.901ns 3.49ns 0.145 0 0 915 B
Benchmarks.Trace.HttpClientBenchmark - Same speed :heavy_check_mark: Same allocations :heavy_check_mark:

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master SendAsync net6.0 4.34μs 5.78ns 22.4ns 0.0303 0 0 2.22 KB
master SendAsync netcoreapp3.1 5.16μs 2.77ns 10.7ns 0.0362 0 0 2.76 KB
master SendAsync net472 7.57μs 8.71ns 33.8ns 0.499 0 0 3.15 KB
#5550 SendAsync net6.0 4.25μs 1.87ns 7.24ns 0.0299 0 0 2.22 KB
#5550 SendAsync netcoreapp3.1 5.08μs 2.18ns 8.45ns 0.0386 0 0 2.76 KB
#5550 SendAsync net472 7.58μs 2.59ns 10ns 0.498 0 0 3.15 KB
Benchmarks.Trace.ILoggerBenchmark - Same speed :heavy_check_mark: Same allocations :heavy_check_mark:

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master EnrichedLog net6.0 1.58μs 0.615ns 2.3ns 0.0228 0 0 1.64 KB
master EnrichedLog netcoreapp3.1 2.26μs 0.668ns 2.41ns 0.0224 0 0 1.64 KB
master EnrichedLog net472 2.58μs 2.71ns 10.5ns 0.249 0 0 1.57 KB
#5550 EnrichedLog net6.0 1.52μs 0.689ns 2.58ns 0.0229 0 0 1.64 KB
#5550 EnrichedLog netcoreapp3.1 2.3μs 1.04ns 3.89ns 0.0221 0 0 1.64 KB
#5550 EnrichedLog net472 2.58μs 1.6ns 6.2ns 0.249 0 0 1.57 KB
Benchmarks.Trace.Log4netBenchmark - Same speed :heavy_check_mark: Same allocations :heavy_check_mark:

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master EnrichedLog net6.0 114μs 246ns 951ns 0.0574 0 0 4.28 KB
master EnrichedLog netcoreapp3.1 118μs 108ns 389ns 0 0 0 4.28 KB
master EnrichedLog net472 147μs 224ns 867ns 0.663 0.221 0 4.46 KB
#5550 EnrichedLog net6.0 115μs 128ns 494ns 0.0575 0 0 4.28 KB
#5550 EnrichedLog netcoreapp3.1 121μs 104ns 391ns 0 0 0 4.28 KB
#5550 EnrichedLog net472 147μs 75.9ns 284ns 0.666 0.222 0 4.46 KB
Benchmarks.Trace.NLogBenchmark - Same speed :heavy_check_mark: Same allocations :heavy_check_mark:

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master EnrichedLog net6.0 3.01μs 1.17ns 4.54ns 0.0314 0 0 2.2 KB
master EnrichedLog netcoreapp3.1 4.28μs 2.22ns 8.29ns 0.03 0 0 2.2 KB
master EnrichedLog net472 4.75μs 1.47ns 5.49ns 0.319 0 0 2.02 KB
#5550 EnrichedLog net6.0 3.15μs 1.46ns 5.46ns 0.0314 0 0 2.2 KB
#5550 EnrichedLog netcoreapp3.1 4.16μs 1.4ns 5.03ns 0.029 0 0 2.2 KB
#5550 EnrichedLog net472 4.9μs 0.512ns 1.92ns 0.319 0 0 2.02 KB
Benchmarks.Trace.RedisBenchmark - Same speed :heavy_check_mark: Same allocations :heavy_check_mark:

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master SendReceive net6.0 1.42μs 0.504ns 1.95ns 0.0164 0 0 1.14 KB
master SendReceive netcoreapp3.1 1.79μs 1.96ns 7.59ns 0.0152 0 0 1.14 KB
master SendReceive net472 2.06μs 0.774ns 2.79ns 0.183 0 0 1.16 KB
#5550 SendReceive net6.0 1.47μs 1.99ns 7.71ns 0.0155 0 0 1.14 KB
#5550 SendReceive netcoreapp3.1 1.69μs 1.54ns 5.96ns 0.0152 0 0 1.14 KB
#5550 SendReceive net472 2.02μs 2.17ns 8.42ns 0.183 0 0 1.16 KB
Benchmarks.Trace.SerilogBenchmark - Same speed :heavy_check_mark: Same allocations :heavy_check_mark:

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master EnrichedLog net6.0 2.78μs 0.831ns 3.22ns 0.022 0 0 1.6 KB
master EnrichedLog netcoreapp3.1 3.8μs 1.96ns 7.58ns 0.0212 0 0 1.65 KB
master EnrichedLog net472 4.28μs 1.76ns 6.83ns 0.322 0 0 2.04 KB
#5550 EnrichedLog net6.0 2.84μs 0.776ns 3.01ns 0.0225 0 0 1.6 KB
#5550 EnrichedLog netcoreapp3.1 3.77μs 1.73ns 6.71ns 0.0207 0 0 1.65 KB
#5550 EnrichedLog net472 4.45μs 1.55ns 5.79ns 0.323 0 0 2.04 KB
Benchmarks.Trace.SpanBenchmark - Slower :warning: Same allocations :heavy_check_mark:

Slower :warning: in #5550

Benchmark diff/base Base Median (ns) Diff Median (ns) Modality
Benchmarks.Trace.SpanBenchmark.StartFinishScope‑net6.0 1.190 486.49 578.84

Faster :tada: in #5550

Benchmark base/diff Base Median (ns) Diff Median (ns) Modality
Benchmarks.Trace.SpanBenchmark.StartFinishSpan‑net472 1.186 661.96 558.25

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master StartFinishSpan net6.0 409ns 0.175ns 0.656ns 0.00803 0 0 576 B
master StartFinishSpan netcoreapp3.1 616ns 0.747ns 2.69ns 0.00768 0 0 576 B
master StartFinishSpan net472 661ns 0.524ns 2.03ns 0.0915 0 0 578 B
master StartFinishScope net6.0 486ns 0.257ns 0.995ns 0.00975 0 0 696 B
master StartFinishScope netcoreapp3.1 672ns 0.21ns 0.814ns 0.00945 0 0 696 B
master StartFinishScope net472 843ns 0.357ns 1.38ns 0.104 0 0 658 B
#5550 StartFinishSpan net6.0 454ns 0.165ns 0.64ns 0.00798 0 0 576 B
#5550 StartFinishSpan netcoreapp3.1 584ns 0.154ns 0.574ns 0.00762 0 0 576 B
#5550 StartFinishSpan net472 558ns 0.251ns 0.97ns 0.0917 0 0 578 B
#5550 StartFinishScope net6.0 579ns 0.343ns 1.33ns 0.00966 0 0 696 B
#5550 StartFinishScope netcoreapp3.1 670ns 0.212ns 0.822ns 0.00939 0 0 696 B
#5550 StartFinishScope net472 888ns 0.516ns 2ns 0.104 0 0 658 B
Benchmarks.Trace.TraceAnnotationsBenchmark - Same speed :heavy_check_mark: Same allocations :heavy_check_mark:

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master RunOnMethodBegin net6.0 576ns 0.141ns 0.528ns 0.00982 0 0 696 B
master RunOnMethodBegin netcoreapp3.1 903ns 0.562ns 2.1ns 0.00949 0 0 696 B
master RunOnMethodBegin net472 1.11μs 0.378ns 1.36ns 0.105 0 0 658 B
#5550 RunOnMethodBegin net6.0 598ns 0.176ns 0.657ns 0.00988 0 0 696 B
#5550 RunOnMethodBegin netcoreapp3.1 900ns 3.22ns 12.5ns 0.00958 0 0 696 B
#5550 RunOnMethodBegin net472 1.04μs 0.452ns 1.75ns 0.104 0 0 658 B

andrewlock avatar May 10 '24 10:05 andrewlock

Throughput/Crank Report :zap:

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 (5550) (11.961M)   : 0, 11960596
    master (12.005M)   : 0, 12005408
    benchmarks/2.9.0 (11.959M)   : 0, 11959218

    section Automatic
    This PR (5550) (8.114M)   : 0, 8114311
    master (7.900M)   : 0, 7899864
    benchmarks/2.9.0 (8.424M)   : 0, 8423539

    section Trace stats
    master (8.325M)   : 0, 8324730

    section Manual
    master (10.145M)   : 0, 10144798

    section Manual + Automatic
    This PR (5550) (7.541M)   : 0, 7541138
    master (7.557M)   : 0, 7557199

gantt
    title Throughput Linux arm64 (Total requests) 
    dateFormat  X
    axisFormat %s
    section Baseline
    This PR (5550) (9.452M)   : 0, 9451604
    master (9.437M)   : 0, 9437489
    benchmarks/2.9.0 (9.647M)   : 0, 9646678

    section Automatic
    This PR (5550) (6.649M)   : 0, 6649034
    master (6.453M)   : 0, 6452908

    section Trace stats
    master (6.876M)   : 0, 6876442

    section Manual
    master (8.301M)   : 0, 8301349

    section Manual + Automatic
    This PR (5550) (6.047M)   : 0, 6046702
    master (6.254M)   : 0, 6253738

gantt
    title Throughput Windows x64 (Total requests) 
    dateFormat  X
    axisFormat %s
    section Baseline
    This PR (5550) (10.121M)   : 0, 10120590
    master (10.198M)   : 0, 10198493
    benchmarks/2.9.0 (10.154M)   : 0, 10153990

    section Automatic
    This PR (5550) (7.183M)   : 0, 7183161
    master (7.162M)   : 0, 7162091
    benchmarks/2.9.0 (7.563M)   : 0, 7562893

    section Trace stats
    master (7.487M)   : 0, 7487136

    section Manual
    master (8.988M)   : 0, 8988317

    section Manual + Automatic
    This PR (5550) (6.656M)   : crit ,0, 6655818
    master (7.057M)   : 0, 7056634

andrewlock avatar May 14 '24 15:05 andrewlock

Datadog Report

Branch report: gleocadie/universal-native-loader Commit report: 0ad7a8b Test service: dd-trace-dotnet

:white_check_mark: 0 Failed, 5879 Passed, 5 Skipped, 33m 17.46s Total Time :hourglass: 1 Performance Regression

:hourglass: Performance Regressions vs Default Branch (1)

  • Profiler_contention_cpu_walltime - scenarios 2.5s (+196.13ms, +9%) - Details

datadog-ddstaging[bot] avatar Jun 18 '24 13:06 datadog-ddstaging[bot]

Benchmarks Report for appsec :snail:

Benchmarks for #5550 compared to master:

  • 1 benchmarks are slower, with geometric mean 1.157
  • 1 benchmarks have fewer 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.Asm.AppSecBodyBenchmark - Same speed :heavy_check_mark: Same allocations :heavy_check_mark:

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master AllCycleSimpleBody net6.0 70.3μs 94.4ns 353ns 0.0715 0 0 6 KB
master AllCycleSimpleBody netcoreapp3.1 61.7μs 64.6ns 242ns 0.0923 0 0 6.95 KB
master AllCycleSimpleBody net472 47μs 53.7ns 208ns 1.3 0 0 8.34 KB
master AllCycleMoreComplexBody net6.0 76.5μs 73.8ns 286ns 0.114 0 0 9.51 KB
master AllCycleMoreComplexBody netcoreapp3.1 68.6μs 54.1ns 202ns 0.138 0 0 10.36 KB
master AllCycleMoreComplexBody net472 53.5μs 39.8ns 154ns 1.87 0.0267 0 11.85 KB
master ObjectExtractorSimpleBody net6.0 155ns 0.177ns 0.663ns 0.00394 0 0 280 B
master ObjectExtractorSimpleBody netcoreapp3.1 243ns 0.593ns 2.3ns 0.00373 0 0 272 B
master ObjectExtractorSimpleBody net472 171ns 0.213ns 0.825ns 0.0446 0 0 281 B
master ObjectExtractorMoreComplexBody net6.0 3.07μs 1.89ns 7.3ns 0.0536 0 0 3.78 KB
master ObjectExtractorMoreComplexBody netcoreapp3.1 3.9μs 1.73ns 6.24ns 0.0508 0 0 3.69 KB
master ObjectExtractorMoreComplexBody net472 3.8μs 2.91ns 11.3ns 0.602 0.00566 0 3.8 KB
#5550 AllCycleSimpleBody net6.0 72.3μs 112ns 435ns 0.0721 0 0 6.01 KB
#5550 AllCycleSimpleBody netcoreapp3.1 63.1μs 95ns 368ns 0.0631 0 0 6.95 KB
#5550 AllCycleSimpleBody net472 47μs 46.3ns 179ns 1.31 0 0 8.34 KB
#5550 AllCycleMoreComplexBody net6.0 78.7μs 241ns 933ns 0.117 0 0 9.51 KB
#5550 AllCycleMoreComplexBody netcoreapp3.1 69.1μs 75.2ns 271ns 0.138 0 0 10.36 KB
#5550 AllCycleMoreComplexBody net472 54.6μs 39.6ns 153ns 1.86 0.0273 0 11.85 KB
#5550 ObjectExtractorSimpleBody net6.0 145ns 0.143ns 0.553ns 0.00391 0 0 280 B
#5550 ObjectExtractorSimpleBody netcoreapp3.1 224ns 0.138ns 0.517ns 0.00377 0 0 272 B
#5550 ObjectExtractorSimpleBody net472 172ns 0.126ns 0.49ns 0.0446 0 0 281 B
#5550 ObjectExtractorMoreComplexBody net6.0 3.03μs 1.59ns 6.17ns 0.0529 0 0 3.78 KB
#5550 ObjectExtractorMoreComplexBody netcoreapp3.1 3.95μs 2ns 7.47ns 0.0496 0 0 3.69 KB
#5550 ObjectExtractorMoreComplexBody net472 3.84μs 2.2ns 8.53ns 0.602 0.00575 0 3.8 KB
Benchmarks.Trace.Asm.AppSecEncoderBenchmark - Same speed :heavy_check_mark: Same allocations :heavy_check_mark:

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master EncodeArgs net6.0 37.5μs 20.3ns 76.1ns 0.447 0 0 32.4 KB
master EncodeArgs netcoreapp3.1 54.1μs 6.67ns 24ns 0.431 0 0 32.4 KB
master EncodeArgs net472 66.4μs 38.8ns 145ns 5.15 0.066 0 32.5 KB
master EncodeLegacyArgs net6.0 74.1μs 202ns 700ns 0 0 0 2.14 KB
master EncodeLegacyArgs netcoreapp3.1 106μs 81.4ns 315ns 0 0 0 2.14 KB
master EncodeLegacyArgs net472 156μs 52.8ns 183ns 0.316 0 0 2.15 KB
#5550 EncodeArgs net6.0 36.9μs 23.1ns 86.3ns 0.456 0 0 32.4 KB
#5550 EncodeArgs netcoreapp3.1 54.7μs 26ns 101ns 0.436 0 0 32.4 KB
#5550 EncodeArgs net472 67.1μs 40.6ns 152ns 5.14 0.0672 0 32.5 KB
#5550 EncodeLegacyArgs net6.0 74.5μs 51.1ns 198ns 0 0 0 2.14 KB
#5550 EncodeLegacyArgs netcoreapp3.1 106μs 347ns 1.34μs 0 0 0 2.14 KB
#5550 EncodeLegacyArgs net472 155μs 69.5ns 269ns 0.31 0 0 2.15 KB
Benchmarks.Trace.Asm.AppSecWafBenchmark - Same speed :heavy_check_mark: Same allocations :heavy_check_mark:

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master RunWafRealisticBenchmark net6.0 185μs 319ns 1.19μs 0 0 0 2.42 KB
master RunWafRealisticBenchmark netcoreapp3.1 193μs 118ns 457ns 0 0 0 2.37 KB
master RunWafRealisticBenchmark net472 210μs 259ns 1μs 0.315 0 0 2.43 KB
master RunWafRealisticBenchmarkWithAttack net6.0 122μs 80.6ns 312ns 0 0 0 1.46 KB
master RunWafRealisticBenchmarkWithAttack netcoreapp3.1 128μs 99.6ns 386ns 0 0 0 1.45 KB
master RunWafRealisticBenchmarkWithAttack net472 140μs 81.7ns 316ns 0.209 0 0 1.48 KB
#5550 RunWafRealisticBenchmark net6.0 181μs 88.2ns 342ns 0 0 0 2.42 KB
#5550 RunWafRealisticBenchmark netcoreapp3.1 195μs 265ns 1.03μs 0 0 0 2.37 KB
#5550 RunWafRealisticBenchmark net472 209μs 38.6ns 149ns 0.313 0 0 2.43 KB
#5550 RunWafRealisticBenchmarkWithAttack net6.0 121μs 59.8ns 207ns 0 0 0 1.46 KB
#5550 RunWafRealisticBenchmarkWithAttack netcoreapp3.1 129μs 85.2ns 330ns 0 0 0 1.45 KB
#5550 RunWafRealisticBenchmarkWithAttack net472 140μs 147ns 569ns 0.209 0 0 1.48 KB
Benchmarks.Trace.Iast.StringAspectsBenchmark - Slower :warning: Fewer allocations :tada:

Slower :warning: in #5550

Benchmark diff/base Base Median (ns) Diff Median (ns) Modality
Benchmarks.Trace.Iast.StringAspectsBenchmark.StringConcatBenchmark‑net6.0 1.157 52,450.00 60,700.00 several?

Fewer allocations :tada: in #5550

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.Iast.StringAspectsBenchmark.StringConcatBenchmark‑net472 59.04 KB 57.9 KB -1.14 KB -1.94%

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master StringConcatBenchmark net6.0 52.6μs 283ns 1.6μs 0 0 0 43.44 KB
master StringConcatBenchmark netcoreapp3.1 62.5μs 875ns 8.67μs 0 0 0 42.64 KB
master StringConcatBenchmark net472 38.2μs 113ns 421ns 0 0 0 59.04 KB
master StringConcatAspectBenchmark net6.0 286μs 5.17μs 51.5μs 0 0 0 256.15 KB
master StringConcatAspectBenchmark netcoreapp3.1 337μs 1.58μs 6.53μs 0 0 0 253.26 KB
master StringConcatAspectBenchmark net472 296μs 5.54μs 53.5μs 0 0 0 278.53 KB
#5550 StringConcatBenchmark net6.0 59.6μs 597ns 5.63μs 0 0 0 43.44 KB
#5550 StringConcatBenchmark netcoreapp3.1 53μs 267ns 1.13μs 0 0 0 42.64 KB
#5550 StringConcatBenchmark net472 39.5μs 206ns 1.07μs 0 0 0 57.9 KB
#5550 StringConcatAspectBenchmark net6.0 311μs 1.76μs 11.6μs 0 0 0 256.23 KB
#5550 StringConcatAspectBenchmark netcoreapp3.1 311μs 4.79μs 47.7μs 0 0 0 253.39 KB
#5550 StringConcatAspectBenchmark net472 300μs 6.39μs 62.2μs 0 0 0 278.53 KB

andrewlock avatar Jun 27 '24 17:06 andrewlock