DataDog / dd-trace-dotnet

.NET Client Library for Datadog APM
https://docs.datadoghq.com/tracing/
Apache License 2.0
413 stars 132 forks source link

[Tracing] fix precedence of remote vs local sampling rules #5720

Closed lucaspimentel closed 1 week ago

lucaspimentel commented 1 week ago

Summary of changes

When sampling rules are configured remotely, we should ignore all local sampling rules instead of merging remote and local rules into a single list.

Note that as long as there is a catch-all remote rule (effectively a remote global sampling rate using DD_TRACE_SAMPLING_RULES instead of DD_TRACE_SAMPLE_RATE, as recommended) or if Adaptive Sampling is enabled, this will have no effect, since local rules will be ignored as long as a remote rule matches a trace. The edge case fixed in this PR only occurs if all of these are true:

In the above case, we were applying the sampling rate from the matching local rule instead of ignoring all local rules.

Reason for change

Consistency across the language ~tracers~ ~libraries~ SDKs. Allows us to "remove" local configuration without having to specify a catch-all remote rule.

Implementation details

In the tracer settings, remove RemoteSamplingRules and keep only CustomSamplingRulesInternal. Its value will have either remote rules or local rules, with the remote value overriding any local value (like we do with other remote settings). Also add a bool property CustomSamplingRulesIsRemote to determine if the setting's source was local or remote so we can deserialize them correctly (they have different schemas).

Test coverage

datadog-ddstaging[bot] commented 1 week ago

Datadog Report

Branch report: lpimentel/remote-sampling-rules-precedence Commit report: a5b7062 Test service: dd-trace-dotnet

:white_check_mark: 0 Failed, 336972 Passed, 1643 Skipped, 14h 10m 12.57s Total Time

andrewlock commented 1 week ago

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:

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 (5720) - mean (74ms)  : 65, 82
     .   : milestone, 74,
    master - mean (73ms)  : 64, 82
     .   : milestone, 73,

    section CallTarget+Inlining+NGEN
    This PR (5720) - mean (987ms)  : 962, 1012
     .   : milestone, 987,
    master - mean (983ms)  : 960, 1005
     .   : milestone, 983,
gantt
    title Execution time (ms) FakeDbCommand (.NET Core 3.1) 
    dateFormat  X
    axisFormat %s
    todayMarker off
    section Baseline
    This PR (5720) - mean (109ms)  : 106, 112
     .   : milestone, 109,
    master - mean (109ms)  : 106, 112
     .   : milestone, 109,

    section CallTarget+Inlining+NGEN
    This PR (5720) - mean (696ms)  : 677, 716
     .   : milestone, 696,
    master - mean (687ms)  : 668, 706
     .   : milestone, 687,
gantt
    title Execution time (ms) FakeDbCommand (.NET 6) 
    dateFormat  X
    axisFormat %s
    todayMarker off
    section Baseline
    This PR (5720) - mean (95ms)  : 81, 108
     .   : milestone, 95,
    master - mean (92ms)  : 89, 95
     .   : milestone, 92,

    section CallTarget+Inlining+NGEN
    This PR (5720) - mean (649ms)  : 632, 666
     .   : milestone, 649,
    master - mean (650ms)  : 629, 671
     .   : milestone, 650,
gantt
    title Execution time (ms) HttpMessageHandler (.NET Framework 4.6.2) 
    dateFormat  X
    axisFormat %s
    todayMarker off
    section Baseline
    This PR (5720) - mean (197ms)  : 193, 202
     .   : milestone, 197,
    master - mean (191ms)  : 188, 194
     .   : milestone, 191,

    section CallTarget+Inlining+NGEN
    This PR (5720) - mean (1,104ms)  : 1073, 1136
     .   : milestone, 1104,
    master - mean (1,075ms)  : 1051, 1098
     .   : milestone, 1075,
gantt
    title Execution time (ms) HttpMessageHandler (.NET Core 3.1) 
    dateFormat  X
    axisFormat %s
    todayMarker off
    section Baseline
    This PR (5720) - mean (282ms)  : 277, 286
     .   : milestone, 282,
    master - mean (276ms)  : 272, 280
     .   : milestone, 276,

    section CallTarget+Inlining+NGEN
    This PR (5720) - mean (885ms)  : 849, 921
     .   : milestone, 885,
    master - mean (869ms)  : 848, 891
     .   : milestone, 869,
gantt
    title Execution time (ms) HttpMessageHandler (.NET 6) 
    dateFormat  X
    axisFormat %s
    todayMarker off
    section Baseline
    This PR (5720) - mean (274ms)  : 267, 281
     .   : milestone, 274,
    master - mean (265ms)  : 261, 269
     .   : milestone, 265,

    section CallTarget+Inlining+NGEN
    This PR (5720) - mean (879ms)  : 850, 908
     .   : milestone, 879,
    master - mean (850ms)  : 828, 872
     .   : milestone, 850,
andrewlock commented 1 week ago

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 (5720) (11.510M)   : 0, 11509505
    master (11.532M)   : 0, 11532424
    benchmarks/2.9.0 (11.656M)   : 0, 11655894

    section Automatic
    This PR (5720) (7.852M)   : 0, 7851584
    master (7.718M)   : 0, 7717683
    benchmarks/2.9.0 (8.153M)   : 0, 8153210

    section Trace stats
    master (8.061M)   : 0, 8061054

    section Manual
    This PR (5720) (9.985M)   : 0, 9984750
    master (9.910M)   : 0, 9910287

    section Manual + Automatic
    This PR (5720) (7.377M)   : 0, 7376687
    master (7.349M)   : 0, 7348912

    section Version Conflict
    master (6.599M)   : 0, 6598956
gantt
    title Throughput Linux arm64 (Total requests) 
    dateFormat  X
    axisFormat %s
    section Baseline
    This PR (5720) (9.443M)   : 0, 9442554
    master (9.534M)   : 0, 9533553
    benchmarks/2.9.0 (9.505M)   : 0, 9504870

    section Automatic
    This PR (5720) (6.582M)   : 0, 6582108
    master (6.513M)   : 0, 6513135

    section Trace stats
    master (6.853M)   : 0, 6852602

    section Manual
    This PR (5720) (8.246M)   : 0, 8246380
    master (8.286M)   : 0, 8285867

    section Manual + Automatic
    This PR (5720) (6.153M)   : 0, 6153309
    master (6.156M)   : 0, 6155750

    section Version Conflict
    master (5.788M)   : 0, 5788056
gantt
    title Throughput Windows x64 (Total requests) 
    dateFormat  X
    axisFormat %s
    section Baseline
    This PR (5720) (9.993M)   : 0, 9993199
    master (10.234M)   : 0, 10233736
    benchmarks/2.9.0 (10.370M)   : 0, 10369822

    section Automatic
    This PR (5720) (6.997M)   : 0, 6997211
    master (7.108M)   : 0, 7107940
    benchmarks/2.9.0 (7.364M)   : 0, 7364262

    section Trace stats
    master (7.371M)   : 0, 7370591

    section Manual
    This PR (5720) (9.019M)   : 0, 9019463
    master (8.754M)   : 0, 8753769

    section Manual + Automatic
    This PR (5720) (6.833M)   : 0, 6833419
    master (6.808M)   : 0, 6807752

    section Version Conflict
    master (6.155M)   : 0, 6155424
andrewlock commented 1 week ago

Benchmarks Report for tracer :snail:

Benchmarks for #5720 compared to master:

The following thresholds were used for comparing the benchmark speeds:

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](https://github.com/DataDog/dd-trace-dotnet/tree/1c758ff043037583f6e6a7002f432ea3a52f4678)|`StartStopWithChild`|net6.0|7.62μs|43.4ns|316ns|0.0151| 0.00755|0|5.43 KB| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/1c758ff043037583f6e6a7002f432ea3a52f4678)|`StartStopWithChild`|netcoreapp3.1|9.93μs|55.3ns|350ns|0.0246| 0.00982|0|5.62 KB| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/1c758ff043037583f6e6a7002f432ea3a52f4678)|`StartStopWithChild`|net472|16.1μs|38.5ns|149ns|1| 0.281|0.0781|6.08 KB| |#5720|`StartStopWithChild`|net6.0|7.81μs|44.1ns|327ns|0.0224| 0.0112|0|5.42 KB| |#5720|`StartStopWithChild`|netcoreapp3.1|9.89μs|55.4ns|359ns|0.0142| 0.00474|0|5.61 KB| |#5720|`StartStopWithChild`|net472|16μs|28.2ns|97.5ns|1.02| 0.311|0.0958|6.06 KB|
Benchmarks.Trace.AgentWriterBenchmark - 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](https://github.com/DataDog/dd-trace-dotnet/tree/1c758ff043037583f6e6a7002f432ea3a52f4678)|`WriteAndFlushEnrichedTraces`|net6.0|466μs|254ns|983ns|0| 0|0|2.7 KB| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/1c758ff043037583f6e6a7002f432ea3a52f4678)|`WriteAndFlushEnrichedTraces`|netcoreapp3.1|631μs|356ns|1.23μs|0| 0|0|2.7 KB| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/1c758ff043037583f6e6a7002f432ea3a52f4678)|`WriteAndFlushEnrichedTraces`|net472|834μs|174ns|651ns|0.417| 0|0|3.3 KB| |#5720|`WriteAndFlushEnrichedTraces`|net6.0|472μs|274ns|1.06μs|0| 0|0|2.7 KB| |#5720|`WriteAndFlushEnrichedTraces`|netcoreapp3.1|631μs|210ns|787ns|0| 0|0|2.7 KB| |#5720|`WriteAndFlushEnrichedTraces`|net472|843μs|210ns|784ns|0.417| 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](https://github.com/DataDog/dd-trace-dotnet/tree/1c758ff043037583f6e6a7002f432ea3a52f4678)|`SendRequest`|net6.0|170μs|203ns|784ns|0.253| 0|0|18.45 KB| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/1c758ff043037583f6e6a7002f432ea3a52f4678)|`SendRequest`|netcoreapp3.1|193μs|163ns|609ns|0.192| 0|0|20.6 KB| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/1c758ff043037583f6e6a7002f432ea3a52f4678)|`SendRequest`|net472|0.00129ns|0.000451ns|0.00169ns|0| 0|0|0 b| |#5720|`SendRequest`|net6.0|172μs|215ns|833ns|0.254| 0|0|18.44 KB| |#5720|`SendRequest`|netcoreapp3.1|190μs|286ns|1.11μs|0.19| 0|0|20.6 KB| |#5720|`SendRequest`|net472|0ns|0ns|0ns|0| 0|0|0 b|
Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark - Same speed :heavy_check_mark: Fewer allocations :tada: #### Fewer allocations :tada: in #5720 | Benchmark | Base Allocated | Diff Allocated | Change | Change % | |:----------|-----------:|-----------:|--------:|--------:| | Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark.WriteAndFlushEnrichedTraces‑netcoreapp3.1 | 41.77 KB | 41.56 KB | -211 B | -0.51% ### Raw results | Branch | Method | Toolchain | Mean | StdError | StdDev | Gen 0 | Gen 1 | Gen 2 | Allocated | |---------|---------------------------- |-------------- |---------:|---------:|--------:|-------:|------:|------:|----------:| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/1c758ff043037583f6e6a7002f432ea3a52f4678)|`WriteAndFlushEnrichedTraces`|net6.0|544μs|331ns|1.28μs|0.553| 0|0|41.72 KB| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/1c758ff043037583f6e6a7002f432ea3a52f4678)|`WriteAndFlushEnrichedTraces`|netcoreapp3.1|642μs|1.6μs|6.2μs|0.322| 0|0|41.77 KB| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/1c758ff043037583f6e6a7002f432ea3a52f4678)|`WriteAndFlushEnrichedTraces`|net472|848μs|3.18μs|12.3μs|8.25| 2.6|0.434|53.22 KB| |#5720|`WriteAndFlushEnrichedTraces`|net6.0|545μs|700ns|2.71μs|0.539| 0|0|41.64 KB| |#5720|`WriteAndFlushEnrichedTraces`|netcoreapp3.1|644μs|1.76μs|6.81μs|0.319| 0|0|41.56 KB| |#5720|`WriteAndFlushEnrichedTraces`|net472|872μs|3.77μs|14.6μs|8.25| 2.6|0.434|53.28 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](https://github.com/DataDog/dd-trace-dotnet/tree/1c758ff043037583f6e6a7002f432ea3a52f4678)|`ExecuteNonQuery`|net6.0|1.12μs|0.754ns|2.92ns|0.0112| 0|0|808 B| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/1c758ff043037583f6e6a7002f432ea3a52f4678)|`ExecuteNonQuery`|netcoreapp3.1|1.4μs|0.66ns|2.56ns|0.0105| 0|0|808 B| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/1c758ff043037583f6e6a7002f432ea3a52f4678)|`ExecuteNonQuery`|net472|1.69μs|1.09ns|4.23ns|0.122| 0|0|770 B| |#5720|`ExecuteNonQuery`|net6.0|1.1μs|0.397ns|1.54ns|0.0114| 0|0|808 B| |#5720|`ExecuteNonQuery`|netcoreapp3.1|1.47μs|0.701ns|2.71ns|0.0111| 0|0|808 B| |#5720|`ExecuteNonQuery`|net472|1.74μs|4.91ns|19ns|0.122| 0|0|770 B|
Benchmarks.Trace.ElasticsearchBenchmark - 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](https://github.com/DataDog/dd-trace-dotnet/tree/1c758ff043037583f6e6a7002f432ea3a52f4678)|`CallElasticsearch`|net6.0|1.22μs|0.455ns|1.7ns|0.014| 0|0|976 B| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/1c758ff043037583f6e6a7002f432ea3a52f4678)|`CallElasticsearch`|netcoreapp3.1|1.63μs|1.02ns|3.81ns|0.0131| 0|0|976 B| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/1c758ff043037583f6e6a7002f432ea3a52f4678)|`CallElasticsearch`|net472|2.4μs|1.88ns|7.27ns|0.158| 0.0012|0|995 B| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/1c758ff043037583f6e6a7002f432ea3a52f4678)|`CallElasticsearchAsync`|net6.0|1.31μs|1.46ns|5.48ns|0.0136| 0|0|952 B| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/1c758ff043037583f6e6a7002f432ea3a52f4678)|`CallElasticsearchAsync`|netcoreapp3.1|1.68μs|1.11ns|4.29ns|0.0135| 0|0|1.02 KB| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/1c758ff043037583f6e6a7002f432ea3a52f4678)|`CallElasticsearchAsync`|net472|2.54μs|2.4ns|9.29ns|0.166| 0.00127|0|1.05 KB| |#5720|`CallElasticsearch`|net6.0|1.23μs|0.488ns|1.83ns|0.0135| 0|0|976 B| |#5720|`CallElasticsearch`|netcoreapp3.1|1.57μs|0.796ns|2.98ns|0.0131| 0|0|976 B| |#5720|`CallElasticsearch`|net472|2.48μs|2.44ns|9.14ns|0.157| 0|0|995 B| |#5720|`CallElasticsearchAsync`|net6.0|1.28μs|0.646ns|2.5ns|0.0129| 0|0|952 B| |#5720|`CallElasticsearchAsync`|netcoreapp3.1|1.57μs|0.994ns|3.85ns|0.0133| 0|0|1.02 KB| |#5720|`CallElasticsearchAsync`|net472|2.55μs|1.55ns|5.6ns|0.167| 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](https://github.com/DataDog/dd-trace-dotnet/tree/1c758ff043037583f6e6a7002f432ea3a52f4678)|`ExecuteAsync`|net6.0|1.31μs|0.647ns|2.42ns|0.0131| 0|0|952 B| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/1c758ff043037583f6e6a7002f432ea3a52f4678)|`ExecuteAsync`|netcoreapp3.1|1.59μs|0.837ns|3.13ns|0.0133| 0|0|952 B| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/1c758ff043037583f6e6a7002f432ea3a52f4678)|`ExecuteAsync`|net472|1.77μs|0.982ns|3.67ns|0.145| 0|0|915 B| |#5720|`ExecuteAsync`|net6.0|1.31μs|0.608ns|2.35ns|0.0131| 0|0|952 B| |#5720|`ExecuteAsync`|netcoreapp3.1|1.64μs|2.04ns|7.62ns|0.0129| 0|0|952 B| |#5720|`ExecuteAsync`|net472|1.79μs|1.32ns|5.13ns|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](https://github.com/DataDog/dd-trace-dotnet/tree/1c758ff043037583f6e6a7002f432ea3a52f4678)|`SendAsync`|net6.0|4.14μs|1.7ns|6.14ns|0.0311| 0|0|2.22 KB| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/1c758ff043037583f6e6a7002f432ea3a52f4678)|`SendAsync`|netcoreapp3.1|5.02μs|1.96ns|7.58ns|0.0377| 0|0|2.76 KB| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/1c758ff043037583f6e6a7002f432ea3a52f4678)|`SendAsync`|net472|7.48μs|2.87ns|11.1ns|0.496| 0|0|3.15 KB| |#5720|`SendAsync`|net6.0|4.13μs|1.48ns|5.33ns|0.031| 0|0|2.22 KB| |#5720|`SendAsync`|netcoreapp3.1|5.32μs|4.47ns|17.3ns|0.0362| 0|0|2.76 KB| |#5720|`SendAsync`|net472|7.83μs|3.28ns|12.7ns|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](https://github.com/DataDog/dd-trace-dotnet/tree/1c758ff043037583f6e6a7002f432ea3a52f4678)|`EnrichedLog`|net6.0|1.46μs|1.35ns|5.06ns|0.0225| 0|0|1.64 KB| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/1c758ff043037583f6e6a7002f432ea3a52f4678)|`EnrichedLog`|netcoreapp3.1|2.22μs|1.26ns|4.73ns|0.0222| 0|0|1.64 KB| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/1c758ff043037583f6e6a7002f432ea3a52f4678)|`EnrichedLog`|net472|2.51μs|1.14ns|4.42ns|0.249| 0|0|1.57 KB| |#5720|`EnrichedLog`|net6.0|1.56μs|1.18ns|4.42ns|0.0232| 0|0|1.64 KB| |#5720|`EnrichedLog`|netcoreapp3.1|2.2μs|1.36ns|4.9ns|0.0219| 0|0|1.64 KB| |#5720|`EnrichedLog`|net472|2.57μs|1.09ns|4.07ns|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](https://github.com/DataDog/dd-trace-dotnet/tree/1c758ff043037583f6e6a7002f432ea3a52f4678)|`EnrichedLog`|net6.0|113μs|87.1ns|326ns|0.0565| 0|0|4.28 KB| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/1c758ff043037583f6e6a7002f432ea3a52f4678)|`EnrichedLog`|netcoreapp3.1|118μs|134ns|501ns|0| 0|0|4.28 KB| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/1c758ff043037583f6e6a7002f432ea3a52f4678)|`EnrichedLog`|net472|148μs|273ns|1.06μs|0.671| 0.224|0|4.46 KB| |#5720|`EnrichedLog`|net6.0|113μs|84.5ns|316ns|0.0564| 0|0|4.28 KB| |#5720|`EnrichedLog`|netcoreapp3.1|120μs|203ns|784ns|0.0599| 0|0|4.28 KB| |#5720|`EnrichedLog`|net472|149μs|189ns|732ns|0.661| 0.22|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](https://github.com/DataDog/dd-trace-dotnet/tree/1c758ff043037583f6e6a7002f432ea3a52f4678)|`EnrichedLog`|net6.0|2.93μs|0.518ns|2.01ns|0.0307| 0|0|2.2 KB| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/1c758ff043037583f6e6a7002f432ea3a52f4678)|`EnrichedLog`|netcoreapp3.1|4.18μs|1.52ns|5.69ns|0.0293| 0|0|2.2 KB| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/1c758ff043037583f6e6a7002f432ea3a52f4678)|`EnrichedLog`|net472|4.81μs|1.48ns|5.75ns|0.32| 0|0|2.02 KB| |#5720|`EnrichedLog`|net6.0|3.05μs|1.64ns|6.36ns|0.0304| 0|0|2.2 KB| |#5720|`EnrichedLog`|netcoreapp3.1|4.21μs|1.15ns|4.45ns|0.0294| 0|0|2.2 KB| |#5720|`EnrichedLog`|net472|4.93μs|1.96ns|7.61ns|0.318| 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](https://github.com/DataDog/dd-trace-dotnet/tree/1c758ff043037583f6e6a7002f432ea3a52f4678)|`SendReceive`|net6.0|1.37μs|0.793ns|3.07ns|0.0157| 0|0|1.14 KB| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/1c758ff043037583f6e6a7002f432ea3a52f4678)|`SendReceive`|netcoreapp3.1|1.75μs|0.341ns|1.28ns|0.0149| 0|0|1.14 KB| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/1c758ff043037583f6e6a7002f432ea3a52f4678)|`SendReceive`|net472|1.99μs|0.806ns|3.02ns|0.183| 0.00101|0|1.16 KB| |#5720|`SendReceive`|net6.0|1.41μs|0.555ns|2.15ns|0.0163| 0|0|1.14 KB| |#5720|`SendReceive`|netcoreapp3.1|1.74μs|1.6ns|6.19ns|0.0151| 0|0|1.14 KB| |#5720|`SendReceive`|net472|1.99μs|0.297ns|1.07ns|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](https://github.com/DataDog/dd-trace-dotnet/tree/1c758ff043037583f6e6a7002f432ea3a52f4678)|`EnrichedLog`|net6.0|2.68μs|0.957ns|3.7ns|0.0227| 0|0|1.6 KB| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/1c758ff043037583f6e6a7002f432ea3a52f4678)|`EnrichedLog`|netcoreapp3.1|3.8μs|1.43ns|5.53ns|0.0228| 0|0|1.65 KB| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/1c758ff043037583f6e6a7002f432ea3a52f4678)|`EnrichedLog`|net472|4.4μs|1.74ns|6.26ns|0.323| 0|0|2.04 KB| |#5720|`EnrichedLog`|net6.0|2.75μs|0.53ns|1.91ns|0.022| 0|0|1.6 KB| |#5720|`EnrichedLog`|netcoreapp3.1|3.88μs|2.21ns|8.55ns|0.0215| 0|0|1.65 KB| |#5720|`EnrichedLog`|net472|4.47μs|3.27ns|12.7ns|0.323| 0|0|2.04 KB|
Benchmarks.Trace.SpanBenchmark - Slower :warning: Same allocations :heavy_check_mark: #### Slower :warning: in #5720 | Benchmark | diff/base | Base Median (ns) | Diff Median (ns) | Modality | |:----------|-----------:|-----------:|--------:|--------:| | Benchmarks.Trace.SpanBenchmark.StartFinishSpan‑net472 | 1.120 | 611.52 | 684.60 | ### Raw results | Branch | Method | Toolchain | Mean | StdError | StdDev | Gen 0 | Gen 1 | Gen 2 | Allocated | |---------|---------------------------- |-------------- |---------:|---------:|--------:|-------:|------:|------:|----------:| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/1c758ff043037583f6e6a7002f432ea3a52f4678)|`StartFinishSpan`|net6.0|466ns|0.254ns|0.986ns|0.00798| 0|0|576 B| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/1c758ff043037583f6e6a7002f432ea3a52f4678)|`StartFinishSpan`|netcoreapp3.1|563ns|0.672ns|2.6ns|0.00791| 0|0|576 B| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/1c758ff043037583f6e6a7002f432ea3a52f4678)|`StartFinishSpan`|net472|612ns|0.42ns|1.51ns|0.0917| 0|0|578 B| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/1c758ff043037583f6e6a7002f432ea3a52f4678)|`StartFinishScope`|net6.0|508ns|0.251ns|0.971ns|0.00964| 0|0|696 B| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/1c758ff043037583f6e6a7002f432ea3a52f4678)|`StartFinishScope`|netcoreapp3.1|719ns|0.457ns|1.71ns|0.00938| 0|0|696 B| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/1c758ff043037583f6e6a7002f432ea3a52f4678)|`StartFinishScope`|net472|791ns|0.365ns|1.41ns|0.104| 0|0|658 B| |#5720|`StartFinishSpan`|net6.0|432ns|0.236ns|0.914ns|0.00811| 0|0|576 B| |#5720|`StartFinishSpan`|netcoreapp3.1|561ns|0.319ns|1.23ns|0.00791| 0|0|576 B| |#5720|`StartFinishSpan`|net472|685ns|0.484ns|1.87ns|0.0915| 0|0|578 B| |#5720|`StartFinishScope`|net6.0|507ns|0.257ns|0.993ns|0.00977| 0|0|696 B| |#5720|`StartFinishScope`|netcoreapp3.1|673ns|0.589ns|2.2ns|0.00934| 0|0|696 B| |#5720|`StartFinishScope`|net472|829ns|0.736ns|2.85ns|0.104| 0|0|658 B|
Benchmarks.Trace.TraceAnnotationsBenchmark - Slower :warning: Same allocations :heavy_check_mark: #### Slower :warning: in #5720 | Benchmark | diff/base | Base Median (ns) | Diff Median (ns) | Modality | |:----------|-----------:|-----------:|--------:|--------:| | Benchmarks.Trace.TraceAnnotationsBenchmark.RunOnMethodBegin‑net6.0 | 1.157 | 599.65 | 693.90 | ### Raw results | Branch | Method | Toolchain | Mean | StdError | StdDev | Gen 0 | Gen 1 | Gen 2 | Allocated | |---------|---------------------------- |-------------- |---------:|---------:|--------:|-------:|------:|------:|----------:| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/1c758ff043037583f6e6a7002f432ea3a52f4678)|`RunOnMethodBegin`|net6.0|599ns|0.385ns|1.49ns|0.00999| 0|0|696 B| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/1c758ff043037583f6e6a7002f432ea3a52f4678)|`RunOnMethodBegin`|netcoreapp3.1|909ns|0.302ns|1.13ns|0.00954| 0|0|696 B| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/1c758ff043037583f6e6a7002f432ea3a52f4678)|`RunOnMethodBegin`|net472|1.11μs|0.354ns|1.37ns|0.104| 0|0|658 B| |#5720|`RunOnMethodBegin`|net6.0|694ns|0.395ns|1.53ns|0.00972| 0|0|696 B| |#5720|`RunOnMethodBegin`|netcoreapp3.1|894ns|0.648ns|2.51ns|0.00933| 0|0|696 B| |#5720|`RunOnMethodBegin`|net472|1.08μs|0.311ns|1.16ns|0.104| 0|0|658 B|