Universal binaries: `Datadog.Trace.ClrProfiler` & `Datadog.Linux.ApiWrapper`
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
libddwafDocker 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
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)
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,
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 |
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
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-scenarios2.5s (+196.13ms, +9%) - Details
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 |