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

[Profiler] override native call for wrapped functions #5749

Open gleocadie opened 4 days ago

gleocadie commented 4 days ago

Summary of changes

Reason for change

Implementation details

Test coverage

Other details

github-actions[bot] commented 4 days ago

Snapshots difference summary

The following differences have been observed in committed snapshots. It is meant to help the reviewer. The diff is simplistic, so please check some files anyway while we improve it.

2 occurrences of :

+        "language": "dotnet",

5947 occurrences of :

+      language: dotnet,

1 occurrences of :

-  {
-    TraceId: Id_1,
-    SpanId: Id_2,
-    Name: Manual-1.Initial,
-    Resource: Manual-1.Initial,
-    Service: Samples.ManualInstrumentation,
-    Tags: {
-      env: integration_tests,
-      language: dotnet,
-      runtime-id: Guid_1
-    },
-    Metrics: {
-      process_id: 0,
-      _dd.top_level: 1.0,
-      _dd.tracer_kr: 1.0,
-      _sampling_priority_v1: 1.0
-    }
-  },
-  {
-    TraceId: Id_1,
-    SpanId: Id_3,
-    Name: Manual-1.Initial.HttpClient,
-    Resource: Manual-1.Initial.HttpClient,
-    Service: Samples.ManualInstrumentation,
-    ParentId: Id_2,
-    Tags: {
-      env: integration_tests,
-      language: dotnet
-    }
-  },
-  {
-    TraceId: Id_4,
-    SpanId: Id_5,
-    Name: Manual-1.Initial.HttpListener,
-    Resource: Manual-1.Initial.HttpListener,
-    Service: Samples.ManualInstrumentation,
-    Tags: {
-      content: PONG,
-      env: integration_tests,
-      language: dotnet,
-      runtime-id: Guid_1
-    },
-    Metrics: {
-      process_id: 0,
-      _dd.top_level: 1.0,
-      _dd.tracer_kr: 1.0,
-      _sampling_priority_v1: 1.0
-    }
-  },
-  {
-    TraceId: Id_6,
-    SpanId: Id_7,
-    Name: Manual-2.Reconfigured,
-    Resource: Manual-2.Reconfigured,
-    Service: updated-name,
-    Tags: {
-      env: updated-env,
-      language: dotnet,
-      runtime-id: Guid_1,
-      Updated-key: Updated Value
-    },
-    Metrics: {
-      process_id: 0,
-      _dd.top_level: 1.0,
-      _dd.tracer_kr: 1.0,
-      _sampling_priority_v1: 1.0
-    }
-  },
-  {
-    TraceId: Id_6,
-    SpanId: Id_8,
-    Name: Manual-2.Reconfigured.HttpClient,
-    Resource: Manual-2.Reconfigured.HttpClient,
-    Service: updated-name,
-    ParentId: Id_7,
-    Tags: {
-      env: updated-env,
-      language: dotnet,
-      Updated-key: Updated Value
-    }
-  },
-  {
-    TraceId: Id_9,
-    SpanId: Id_10,
-    Name: Manual-2.Reconfigured.HttpListener,
-    Resource: Manual-2.Reconfigured.HttpListener,
-    Service: updated-name,
-    Tags: {
-      content: PONG,
-      env: updated-env,
-      language: dotnet,
-      runtime-id: Guid_1,
-      Updated-key: Updated Value
-    },
-    Metrics: {
-      process_id: 0,
-      _dd.top_level: 1.0,
-      _dd.tracer_kr: 1.0,
-      _sampling_priority_v1: 1.0
-    }
-  },
-  {
-    TraceId: Id_11,
-    SpanId: Id_12,
-    Name: Manual-3.HttpDisabled,
-    Resource: Manual-3.HttpDisabled,
-    Service: Samples.ManualInstrumentation,
-    Tags: {
-      env: integration_tests,
-      language: dotnet,
-      runtime-id: Guid_1
-    },
-    Metrics: {
-      process_id: 0,
-      _dd.top_level: 1.0,
-      _dd.tracer_kr: 1.0,
-      _sampling_priority_v1: 1.0
-    }
-  },
-  {
-    TraceId: Id_11,
-    SpanId: Id_13,
-    Name: Manual-3.HttpDisabled.HttpClient,
-    Resource: Manual-3.HttpDisabled.HttpClient,
-    Service: Samples.ManualInstrumentation,
-    ParentId: Id_12,
-    Tags: {
-      env: integration_tests,
-      language: dotnet
-    }
-  },
-  {
-    TraceId: Id_14,
-    SpanId: Id_15,
-    Name: Manual-3.HttpDisabled.HttpListener,
-    Resource: Manual-3.HttpDisabled.HttpListener,
-    Service: Samples.ManualInstrumentation,
-    Tags: {
-      content: PONG,
-      env: integration_tests,
-      language: dotnet,
-      runtime-id: Guid_1
-    },
-    Metrics: {
-      process_id: 0,
-      _dd.top_level: 1.0,
-      _dd.tracer_kr: 1.0,
-      _sampling_priority_v1: 1.0
-    }
-  },
-  {
-    TraceId: Id_16,
-    SpanId: Id_17,
-    Name: Manual-4.DefaultsReinstated,
-    Resource: Manual-4.DefaultsReinstated,
-    Service: Samples.ManualInstrumentation,
-    Tags: {
-      env: integration_tests,
-      language: dotnet,
-      runtime-id: Guid_1
-    },
-    Metrics: {
-      process_id: 0,
-      _dd.top_level: 1.0,
-      _dd.tracer_kr: 1.0,
-      _sampling_priority_v1: 1.0
-    }
-  },
-  {
-    TraceId: Id_16,
-    SpanId: Id_18,
-    Name: Manual-4.DefaultsReinstated.HttpClient,
-    Resource: Manual-4.DefaultsReinstated.HttpClient,
-    Service: Samples.ManualInstrumentation,
-    ParentId: Id_17,
-    Tags: {
-      env: integration_tests,
-      language: dotnet
-    }
-  },
-  {
-    TraceId: Id_19,
-    SpanId: Id_20,
-    Name: Manual-4.DefaultsReinstated.HttpListener,
-    Resource: Manual-4.DefaultsReinstated.HttpListener,
-    Service: Samples.ManualInstrumentation,
-    Tags: {
-      content: PONG,
-      env: integration_tests,
-      language: dotnet,
-      runtime-id: Guid_1
-    },
-    Metrics: {
-      process_id: 0,
-      _dd.top_level: 1.0,
-      _dd.tracer_kr: 1.0,
-      _sampling_priority_v1: 1.0
-    }
-  },
-  {
-    TraceId: Id_21,
-    SpanId: Id_22,
-    Name: Manual-5.Ext.HttpListener,
-    Resource: Manual-5.Ext.HttpListener,
-    Service: Samples.ManualInstrumentation,
-    Tags: {
-      content: PONG,
-      env: integration_tests,
-      language: dotnet,
-      runtime-id: Guid_1
-    },
-    Metrics: {
-      process_id: 0,
-      _dd.top_level: 1.0,
-      _dd.tracer_kr: 1.0,
-      _sampling_priority_v1: 1.0
-    }
-  },
-  {
-    TraceId: Id_23,
-    SpanId: Id_24,
-    Name: Manual-5.Ext.Outer,
-    Resource: Manual-5.Ext.Outer,
-    Service: Samples.ManualInstrumentation,
-    Tags: {
-      env: integration_tests,
-      language: dotnet,
-      runtime-id: Guid_1,
-      usr.email: test@example.com,
-      usr.id: my-id,
-      usr.name: Bits,
-      usr.role: Mascot,
-      usr.scope: test-scope,
-      usr.session_id: abc123
-    },
-    Metrics: {
-      process_id: 0,
-      _dd.top_level: 1.0,
-      _dd.tracer_kr: 1.0,
-      _sampling_priority_v1: 2.0
-    }
-  },
-  {
-    TraceId: Id_23,
-    SpanId: Id_25,
-    Name: Manual-5.Ext.Inner,
-    Resource: Manual-5.Ext.Inner,
-    Service: Samples.ManualInstrumentation,
-    ParentId: Id_24,
-    Error: 1,
-    Tags: {
-      Custom: Some-Value,
-      env: integration_tests,
-      error.msg: Exception of type 'CustomException' was thrown.,
-      error.stack:
[...]
-      error.type: CustomException,
-      language: dotnet
-    },
-    Metrics: {
-      Some-Number: 123.0
-    }
-  },
-  {
-    TraceId: Id_23,
-    SpanId: Id_26,
-    Name: Manual-5.Ext.HttpClient,
-    Resource: Manual-5.Ext.HttpClient,
-    Service: Samples.ManualInstrumentation,
-    ParentId: Id_25,
-    Tags: {
-      env: integration_tests,
-      language: dotnet
-    }
-  },
-  {
-    TraceId: Id_27,
-    SpanId: Id_28,
-    Name: Manual-6.EventSdk.Custom.Outer,
-    Resource: Manual-6.EventSdk.Custom.Outer,
-    Service: Samples.ManualInstrumentation,
-    Tags: {
-      appsec.events.custom-event-meta.key-1: val-1,
-      appsec.events.custom-event-meta.key-2: val-2,
-      appsec.events.custom-event-meta.track: true,
-      appsec.events.custom-event.track: true,
-      env: integration_tests,
-      language: dotnet,
-      runtime-id: Guid_1,
-      _dd.appsec.events.custom-event-meta.sdk: true,
-      _dd.appsec.events.custom-event.sdk: true
-    },
-    Metrics: {
-      process_id: 0,
-      _dd.top_level: 1.0,
-      _dd.tracer_kr: 1.0,
-      _sampling_priority_v1: 1.0
-    }
-  },
-  {
-    TraceId: Id_27,
-    SpanId: Id_29,
-    Name: Manual-6.EventSdk.Custom.Inner,
-    Resource: Manual-6.EventSdk.Custom.Inner,
-    Service: Samples.ManualInstrumentation,
-    ParentId: Id_28,
-    Tags: {
-      env: integration_tests,
-      language: dotnet
-    }
-  },
-  {
-    TraceId: Id_27,
-    SpanId: Id_30,
-    Name: Manual-6.Ext.HttpClient,
-    Resource: Manual-6.Ext.HttpClient,
-    Service: Samples.ManualInstrumentation,
-    ParentId: Id_29,
-    Tags: {
-      env: integration_tests,
-      language: dotnet
-    }
-  },
-  {
-    TraceId: Id_31,
-    SpanId: Id_32,
-    Name: Manual-6.Ext.HttpListener,
-    Resource: Manual-6.Ext.HttpListener,
-    Service: Samples.ManualInstrumentation,
-    Tags: {
-      content: PONG,
-      env: integration_tests,
-      language: dotnet,
-      runtime-id: Guid_1
-    },
-    Metrics: {
-      process_id: 0,
-      _dd.top_level: 1.0,
-      _dd.tracer_kr: 1.0,
-      _sampling_priority_v1: 1.0
-    }
-  },
-  {
-    TraceId: Id_33,
-    SpanId: Id_34,
-    Name: Manual-7.EventSdk.Success.Outer,
-    Resource: Manual-7.EventSdk.Success.Outer,
-    Service: Samples.ManualInstrumentation,
-    Tags: {
-      appsec.events.users.login.success.key-1: val-1,
-      appsec.events.users.login.success.key-2: val-2,
-      appsec.events.users.login.success.track: true,
-      env: integration_tests,
-      language: dotnet,
-      runtime-id: Guid_1,
-      usr.id: my-id,
-      _dd.appsec.events.users.login.success.sdk: true
-    },
-    Metrics: {
-      process_id: 0,
-      _dd.top_level: 1.0,
-      _dd.tracer_kr: 1.0,
-      _sampling_priority_v1: 1.0
-    }
-  },
-  {
-    TraceId: Id_33,
-    SpanId: Id_35,
-    Name: Manual-7.EventSdk.Success.Inner,
-    Resource: Manual-7.EventSdk.Success.Inner,
-    Service: Samples.ManualInstrumentation,
-    ParentId: Id_34,
-    Tags: {
-      env: integration_tests,
-      language: dotnet
-    }
-  },
-  {
-    TraceId: Id_33,
-    SpanId: Id_36,
-    Name: Manual-7.Ext.HttpClient,
-    Resource: Manual-7.Ext.HttpClient,
-    Service: Samples.ManualInstrumentation,
-    ParentId: Id_35,
-    Tags: {
-      env: integration_tests,
-      language: dotnet
-    }
-  },
-  {
-    TraceId: Id_37,
-    SpanId: Id_38,
-    Name: Manual-7.Ext.HttpListener,
-    Resource: Manual-7.Ext.HttpListener,
-    Service: Samples.ManualInstrumentation,
-    Tags: {
-      content: PONG,
-      env: integration_tests,
-      language: dotnet,
-      runtime-id: Guid_1
-    },
-    Metrics: {
-      process_id: 0,
-      _dd.top_level: 1.0,
-      _dd.tracer_kr: 1.0,
-      _sampling_priority_v1: 1.0
-    }
-  },
-  {
-    TraceId: Id_39,
-    SpanId: Id_40,
-    Name: Manual-8.EventSdk.Failure.Outer,
-    Resource: Manual-8.EventSdk.Failure.Outer,
-    Service: Samples.ManualInstrumentation,
-    Tags: {
-      appsec.events.users.login.failure.key-1: val-1,
-      appsec.events.users.login.failure.key-2: val-2,
-      appsec.events.users.login.failure.track: true,
-      appsec.events.users.login.failure.usr.exists: true,
-      appsec.events.users.login.failure.usr.id: my-id,
-      env: integration_tests,
-      language: dotnet,
-      runtime-id: Guid_1,
-      _dd.appsec.events.users.login.failure.sdk: true
-    },
-    Metrics: {
-      process_id: 0,
-      _dd.top_level: 1.0,
-      _dd.tracer_kr: 1.0,
-      _sampling_priority_v1: 1.0
-    }
-  },
-  {
-    TraceId: Id_39,
-    SpanId: Id_41,
-    Name: Manual-8.EventSdk.Failure.Inner,
-    Resource: Manual-8.EventSdk.Failure.Inner,
-    Service: Samples.ManualInstrumentation,
-    ParentId: Id_40,
-    Tags: {
-      env: integration_tests,
-      language: dotnet
-    }
-  },
-  {
-    TraceId: Id_39,
-    SpanId: Id_42,
-    Name: Manual-8.Ext.HttpClient,
-    Resource: Manual-8.Ext.HttpClient,
-    Service: Samples.ManualInstrumentation,
-    ParentId: Id_41,
-    Tags: {
-      env: integration_tests,
-      language: dotnet
-    }
-  },
-  {
-    TraceId: Id_43,
-    SpanId: Id_44,
-    Name: Manual-8.Ext.HttpListener,
-    Resource: Manual-8.Ext.HttpListener,
-    Service: Samples.ManualInstrumentation,
-    Tags: {
-      content: PONG,
-      env: integration_tests,
-      language: dotnet,
-      runtime-id: Guid_1
-    },
-    Metrics: {
-      process_id: 0,
-      _dd.top_level: 1.0,
-      _dd.tracer_kr: 1.0,
-      _sampling_priority_v1: 1.0
-    }
-  },
-  {
-    TraceId: Id_45,
-    SpanId: Id_46,
-    Name: Manual-9.CustomContext.HttpListener,
-    Resource: Manual-9.CustomContext.HttpListener,
-    Service: Samples.ManualInstrumentation,
-    Tags: {
-      content: PONG,
-      env: integration_tests,
-      language: dotnet,
-      runtime-id: Guid_1
-    },
-    Metrics: {
-      process_id: 0,
-      _dd.top_level: 1.0,
-      _dd.tracer_kr: 1.0,
-      _sampling_priority_v1: 1.0
-    }
-  }
datadog-ddstaging[bot] commented 4 days ago

Datadog Report

Branch report: gleocadie/override-native-call-for-wrapped-functions Commit report: 2930bfd Test service: dd-trace-dotnet

:x: 11 Failed (0 Known Flaky), 259476 Passed, 1294 Skipped, 12h 14m 44.36s Total Time

:x: Failed Tests (11)

This report shows up to 5 failed tests.

  • CheckCpuLimit - Datadog.Profiler.IntegrationTests.SmokeTests.CpuLimitTest - Details
<details>
<summary>Expand for error</summary>

```
Expected agent.NbCallsOnProfilingEndpoint to be greater than 0, but found 0.
```
</details>
andrewlock commented 4 days 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 (5749) - mean (73ms)  : 65, 81
     .   : milestone, 73,
    master - mean (73ms)  : 65, 82
     .   : milestone, 73,

    section CallTarget+Inlining+NGEN
    This PR (5749) - mean (903ms)  : 879, 928
     .   : milestone, 903,
    master - mean (992ms)  : 971, 1012
     .   : milestone, 992,
gantt
    title Execution time (ms) FakeDbCommand (.NET Core 3.1) 
    dateFormat  X
    axisFormat %s
    todayMarker off
    section Baseline
    This PR (5749) - mean (110ms)  : 106, 114
     .   : milestone, 110,
    master - mean (110ms)  : 106, 113
     .   : milestone, 110,

    section CallTarget+Inlining+NGEN
    This PR (5749) - mean (636ms)  : 614, 658
     .   : milestone, 636,
    master - mean (706ms)  : 681, 731
     .   : milestone, 706,
gantt
    title Execution time (ms) FakeDbCommand (.NET 6) 
    dateFormat  X
    axisFormat %s
    todayMarker off
    section Baseline
    This PR (5749) - mean (93ms)  : 91, 96
     .   : milestone, 93,
    master - mean (93ms)  : 90, 96
     .   : milestone, 93,

    section CallTarget+Inlining+NGEN
    This PR (5749) - mean (592ms)  : 575, 610
     .   : milestone, 592,
    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 (5749) - mean (191ms)  : 186, 195
     .   : milestone, 191,
    master - mean (192ms)  : 187, 197
     .   : milestone, 192,

    section CallTarget+Inlining+NGEN
    This PR (5749) - mean (1,000ms)  : 976, 1024
     .   : milestone, 1000,
    master - mean (1,090ms)  : 1061, 1118
     .   : milestone, 1090,
gantt
    title Execution time (ms) HttpMessageHandler (.NET Core 3.1) 
    dateFormat  X
    axisFormat %s
    todayMarker off
    section Baseline
    This PR (5749) - mean (276ms)  : 270, 282
     .   : milestone, 276,
    master - mean (278ms)  : 273, 283
     .   : milestone, 278,

    section CallTarget+Inlining+NGEN
    This PR (5749) - mean (829ms)  : 800, 858
     .   : milestone, 829,
    master - mean (878ms)  : 854, 901
     .   : milestone, 878,
gantt
    title Execution time (ms) HttpMessageHandler (.NET 6) 
    dateFormat  X
    axisFormat %s
    todayMarker off
    section Baseline
    This PR (5749) - mean (265ms)  : 261, 269
     .   : milestone, 265,
    master - mean (266ms)  : 262, 270
     .   : milestone, 266,

    section CallTarget+Inlining+NGEN
    This PR (5749) - mean (811ms)  : 782, 841
     .   : milestone, 811,
    master - mean (862ms)  : 838, 886
     .   : milestone, 862,
andrewlock commented 4 days ago

Benchmarks Report for tracer :snail:

Benchmarks for #5749 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/8cbbb4b3cfd23bd87e18ec944251fe0395d65061)|`StartStopWithChild`|net6.0|7.62μs|41.2ns|237ns|0.0111| 0.00369|0|5.43 KB| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/8cbbb4b3cfd23bd87e18ec944251fe0395d65061)|`StartStopWithChild`|netcoreapp3.1|10.1μs|51.5ns|242ns|0.02| 0.00999|0|5.62 KB| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/8cbbb4b3cfd23bd87e18ec944251fe0395d65061)|`StartStopWithChild`|net472|16.3μs|40.9ns|153ns|1.03| 0.319|0.09|6.08 KB| |#5749|`StartStopWithChild`|net6.0|7.62μs|42.5ns|275ns|0.0163| 0.00814|0|5.43 KB| |#5749|`StartStopWithChild`|netcoreapp3.1|9.9μs|54.4ns|331ns|0.0196| 0.00981|0|5.62 KB| |#5749|`StartStopWithChild`|net472|15.8μs|62.6ns|243ns|1.03| 0.305|0.0962|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/8cbbb4b3cfd23bd87e18ec944251fe0395d65061)|`WriteAndFlushEnrichedTraces`|net6.0|466μs|109ns|393ns|0| 0|0|2.7 KB| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/8cbbb4b3cfd23bd87e18ec944251fe0395d65061)|`WriteAndFlushEnrichedTraces`|netcoreapp3.1|640μs|367ns|1.42μs|0| 0|0|2.7 KB| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/8cbbb4b3cfd23bd87e18ec944251fe0395d65061)|`WriteAndFlushEnrichedTraces`|net472|835μs|245ns|916ns|0.417| 0|0|3.3 KB| |#5749|`WriteAndFlushEnrichedTraces`|net6.0|460μs|86.9ns|301ns|0| 0|0|2.7 KB| |#5749|`WriteAndFlushEnrichedTraces`|netcoreapp3.1|636μs|150ns|562ns|0| 0|0|2.7 KB| |#5749|`WriteAndFlushEnrichedTraces`|net472|811μs|315ns|1.22μs|0.406| 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/8cbbb4b3cfd23bd87e18ec944251fe0395d65061)|`SendRequest`|net6.0|172μs|269ns|1.04μs|0.17| 0|0|18.44 KB| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/8cbbb4b3cfd23bd87e18ec944251fe0395d65061)|`SendRequest`|netcoreapp3.1|193μs|138ns|497ns|0.192| 0|0|20.6 KB| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/8cbbb4b3cfd23bd87e18ec944251fe0395d65061)|`SendRequest`|net472|0.000224ns|0.000166ns|0.000599ns|0| 0|0|0 b| |#5749|`SendRequest`|net6.0|170μs|180ns|697ns|0.257| 0|0|18.44 KB| |#5749|`SendRequest`|netcoreapp3.1|192μs|235ns|912ns|0.192| 0|0|20.6 KB| |#5749|`SendRequest`|net472|9.77E‑05ns|5.43E‑05ns|0.000203ns|0| 0|0|0 b|
Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark - Same speed :heavy_check_mark: More allocations :warning: #### More allocations :warning: in #5749 | Benchmark | Base Allocated | Diff Allocated | Change | Change % | |:----------|-----------:|-----------:|--------:|--------:| | Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark.WriteAndFlushEnrichedTraces‑netcoreapp3.1 | 41.59 KB | 42.11 KB | 525 B | 1.26% ### Raw results | Branch | Method | Toolchain | Mean | StdError | StdDev | Gen 0 | Gen 1 | Gen 2 | Allocated | |---------|---------------------------- |-------------- |---------:|---------:|--------:|-------:|------:|------:|----------:| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/8cbbb4b3cfd23bd87e18ec944251fe0395d65061)|`WriteAndFlushEnrichedTraces`|net6.0|556μs|437ns|1.69μs|0.558| 0|0|41.75 KB| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/8cbbb4b3cfd23bd87e18ec944251fe0395d65061)|`WriteAndFlushEnrichedTraces`|netcoreapp3.1|650μs|1.99μs|7.72μs|0.327| 0|0|41.59 KB| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/8cbbb4b3cfd23bd87e18ec944251fe0395d65061)|`WriteAndFlushEnrichedTraces`|net472|840μs|2.8μs|10.5μs|8.45| 2.53|0.422|53.26 KB| |#5749|`WriteAndFlushEnrichedTraces`|net6.0|544μs|297ns|1.15μs|0.563| 0|0|41.74 KB| |#5749|`WriteAndFlushEnrichedTraces`|netcoreapp3.1|661μs|1.04μs|4.04μs|0.322| 0|0|42.11 KB| |#5749|`WriteAndFlushEnrichedTraces`|net472|861μs|3.38μs|13.1μs|8.28| 2.48|0.414|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/8cbbb4b3cfd23bd87e18ec944251fe0395d65061)|`ExecuteNonQuery`|net6.0|1.14μs|0.695ns|2.69ns|0.0113| 0|0|808 B| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/8cbbb4b3cfd23bd87e18ec944251fe0395d65061)|`ExecuteNonQuery`|netcoreapp3.1|1.48μs|1.08ns|4.2ns|0.0111| 0|0|808 B| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/8cbbb4b3cfd23bd87e18ec944251fe0395d65061)|`ExecuteNonQuery`|net472|1.78μs|2.54ns|9.82ns|0.122| 0|0|770 B| |#5749|`ExecuteNonQuery`|net6.0|1.12μs|0.502ns|1.95ns|0.0113| 0|0|808 B| |#5749|`ExecuteNonQuery`|netcoreapp3.1|1.53μs|1.19ns|4.61ns|0.0107| 0|0|808 B| |#5749|`ExecuteNonQuery`|net472|1.71μs|1.3ns|4.68ns|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/8cbbb4b3cfd23bd87e18ec944251fe0395d65061)|`CallElasticsearch`|net6.0|1.15μs|0.542ns|2.1ns|0.0133| 0|0|976 B| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/8cbbb4b3cfd23bd87e18ec944251fe0395d65061)|`CallElasticsearch`|netcoreapp3.1|1.52μs|1.08ns|4.05ns|0.0137| 0|0|976 B| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/8cbbb4b3cfd23bd87e18ec944251fe0395d65061)|`CallElasticsearch`|net472|2.55μs|0.664ns|2.57ns|0.157| 0|0|995 B| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/8cbbb4b3cfd23bd87e18ec944251fe0395d65061)|`CallElasticsearchAsync`|net6.0|1.31μs|0.519ns|1.94ns|0.013| 0|0|952 B| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/8cbbb4b3cfd23bd87e18ec944251fe0395d65061)|`CallElasticsearchAsync`|netcoreapp3.1|1.69μs|0.722ns|2.6ns|0.0135| 0|0|1.02 KB| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/8cbbb4b3cfd23bd87e18ec944251fe0395d65061)|`CallElasticsearchAsync`|net472|2.6μs|2.59ns|9.7ns|0.166| 0|0|1.05 KB| |#5749|`CallElasticsearch`|net6.0|1.12μs|0.357ns|1.33ns|0.0136| 0|0|976 B| |#5749|`CallElasticsearch`|netcoreapp3.1|1.53μs|0.884ns|3.31ns|0.0131| 0|0|976 B| |#5749|`CallElasticsearch`|net472|2.63μs|1.26ns|4.87ns|0.157| 0|0|995 B| |#5749|`CallElasticsearchAsync`|net6.0|1.24μs|0.66ns|2.47ns|0.0136| 0|0|952 B| |#5749|`CallElasticsearchAsync`|netcoreapp3.1|1.63μs|0.795ns|2.75ns|0.0136| 0|0|1.02 KB| |#5749|`CallElasticsearchAsync`|net472|2.65μs|1.57ns|5.68ns|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/8cbbb4b3cfd23bd87e18ec944251fe0395d65061)|`ExecuteAsync`|net6.0|1.2μs|0.73ns|2.73ns|0.0132| 0|0|952 B| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/8cbbb4b3cfd23bd87e18ec944251fe0395d65061)|`ExecuteAsync`|netcoreapp3.1|1.63μs|0.647ns|2.51ns|0.013| 0|0|952 B| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/8cbbb4b3cfd23bd87e18ec944251fe0395d65061)|`ExecuteAsync`|net472|1.92μs|0.938ns|3.63ns|0.145| 0|0|915 B| |#5749|`ExecuteAsync`|net6.0|1.21μs|0.394ns|1.42ns|0.0133| 0|0|952 B| |#5749|`ExecuteAsync`|netcoreapp3.1|1.67μs|0.955ns|3.57ns|0.0126| 0|0|952 B| |#5749|`ExecuteAsync`|net472|1.74μs|1.27ns|4.9ns|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/8cbbb4b3cfd23bd87e18ec944251fe0395d65061)|`SendAsync`|net6.0|4.07μs|1.54ns|5.75ns|0.0307| 0|0|2.22 KB| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/8cbbb4b3cfd23bd87e18ec944251fe0395d65061)|`SendAsync`|netcoreapp3.1|5.08μs|1.54ns|5.75ns|0.0382| 0|0|2.76 KB| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/8cbbb4b3cfd23bd87e18ec944251fe0395d65061)|`SendAsync`|net472|7.57μs|2.51ns|9.74ns|0.498| 0|0|3.15 KB| |#5749|`SendAsync`|net6.0|4.21μs|4.97ns|19.3ns|0.0294| 0|0|2.22 KB| |#5749|`SendAsync`|netcoreapp3.1|5.12μs|2.56ns|9.91ns|0.0361| 0|0|2.76 KB| |#5749|`SendAsync`|net472|7.73μs|3.56ns|13.8ns|0.499| 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/8cbbb4b3cfd23bd87e18ec944251fe0395d65061)|`EnrichedLog`|net6.0|1.53μs|0.508ns|1.83ns|0.0228| 0|0|1.64 KB| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/8cbbb4b3cfd23bd87e18ec944251fe0395d65061)|`EnrichedLog`|netcoreapp3.1|2.29μs|0.581ns|2.17ns|0.023| 0|0|1.64 KB| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/8cbbb4b3cfd23bd87e18ec944251fe0395d65061)|`EnrichedLog`|net472|2.59μs|1.29ns|4.84ns|0.25| 0|0|1.57 KB| |#5749|`EnrichedLog`|net6.0|1.61μs|0.517ns|1.93ns|0.0231| 0|0|1.64 KB| |#5749|`EnrichedLog`|netcoreapp3.1|2.1μs|0.857ns|3.21ns|0.022| 0|0|1.64 KB| |#5749|`EnrichedLog`|net472|2.46μs|1.12ns|4.36ns|0.25| 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/8cbbb4b3cfd23bd87e18ec944251fe0395d65061)|`EnrichedLog`|net6.0|116μs|38.5ns|144ns|0| 0|0|4.28 KB| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/8cbbb4b3cfd23bd87e18ec944251fe0395d65061)|`EnrichedLog`|netcoreapp3.1|121μs|195ns|755ns|0| 0|0|4.28 KB| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/8cbbb4b3cfd23bd87e18ec944251fe0395d65061)|`EnrichedLog`|net472|147μs|78.2ns|292ns|0.662| 0.221|0|4.46 KB| |#5749|`EnrichedLog`|net6.0|114μs|136ns|525ns|0.0566| 0|0|4.28 KB| |#5749|`EnrichedLog`|netcoreapp3.1|118μs|115ns|446ns|0| 0|0|4.28 KB| |#5749|`EnrichedLog`|net472|147μs|56.4ns|211ns|0.66| 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/8cbbb4b3cfd23bd87e18ec944251fe0395d65061)|`EnrichedLog`|net6.0|2.99μs|0.963ns|3.73ns|0.0311| 0|0|2.2 KB| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/8cbbb4b3cfd23bd87e18ec944251fe0395d65061)|`EnrichedLog`|netcoreapp3.1|4.18μs|1.14ns|4.42ns|0.0291| 0|0|2.2 KB| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/8cbbb4b3cfd23bd87e18ec944251fe0395d65061)|`EnrichedLog`|net472|4.97μs|2.11ns|8.17ns|0.32| 0|0|2.02 KB| |#5749|`EnrichedLog`|net6.0|3.17μs|0.794ns|2.97ns|0.0298| 0|0|2.2 KB| |#5749|`EnrichedLog`|netcoreapp3.1|4.12μs|0.997ns|3.86ns|0.0288| 0|0|2.2 KB| |#5749|`EnrichedLog`|net472|4.9μs|1.5ns|5.82ns|0.321| 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/8cbbb4b3cfd23bd87e18ec944251fe0395d65061)|`SendReceive`|net6.0|1.35μs|2.27ns|8.79ns|0.0156| 0|0|1.14 KB| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/8cbbb4b3cfd23bd87e18ec944251fe0395d65061)|`SendReceive`|netcoreapp3.1|1.73μs|0.847ns|3.17ns|0.0156| 0|0|1.14 KB| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/8cbbb4b3cfd23bd87e18ec944251fe0395d65061)|`SendReceive`|net472|2.18μs|0.79ns|3.06ns|0.183| 0.00109|0|1.16 KB| |#5749|`SendReceive`|net6.0|1.4μs|0.914ns|3.54ns|0.0161| 0|0|1.14 KB| |#5749|`SendReceive`|netcoreapp3.1|1.67μs|0.7ns|2.71ns|0.0151| 0|0|1.14 KB| |#5749|`SendReceive`|net472|2.13μs|0.718ns|2.69ns|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/8cbbb4b3cfd23bd87e18ec944251fe0395d65061)|`EnrichedLog`|net6.0|2.84μs|0.824ns|3.19ns|0.0216| 0|0|1.6 KB| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/8cbbb4b3cfd23bd87e18ec944251fe0395d65061)|`EnrichedLog`|netcoreapp3.1|3.86μs|1.29ns|5ns|0.0212| 0|0|1.65 KB| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/8cbbb4b3cfd23bd87e18ec944251fe0395d65061)|`EnrichedLog`|net472|4.33μs|1.73ns|6.69ns|0.323| 0|0|2.04 KB| |#5749|`EnrichedLog`|net6.0|2.7μs|0.971ns|3.5ns|0.0216| 0|0|1.6 KB| |#5749|`EnrichedLog`|netcoreapp3.1|3.84μs|1.96ns|7.61ns|0.0213| 0|0|1.65 KB| |#5749|`EnrichedLog`|net472|4.37μs|1.73ns|6.68ns|0.322| 0|0|2.04 KB|
Benchmarks.Trace.SpanBenchmark - Faster :tada: Same allocations :heavy_check_mark: #### Faster :tada: in #5749 | Benchmark | base/diff | Base Median (ns) | Diff Median (ns) | Modality | |:----------|-----------:|-----------:|--------:|--------:| | Benchmarks.Trace.SpanBenchmark.StartFinishSpan‑netcoreapp3.1 | 1.167 | 623.92 | 534.83 | ### Raw results | Branch | Method | Toolchain | Mean | StdError | StdDev | Gen 0 | Gen 1 | Gen 2 | Allocated | |---------|---------------------------- |-------------- |---------:|---------:|--------:|-------:|------:|------:|----------:| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/8cbbb4b3cfd23bd87e18ec944251fe0395d65061)|`StartFinishSpan`|net6.0|392ns|0.137ns|0.532ns|0.00812| 0|0|576 B| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/8cbbb4b3cfd23bd87e18ec944251fe0395d65061)|`StartFinishSpan`|netcoreapp3.1|624ns|0.49ns|1.9ns|0.0078| 0|0|576 B| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/8cbbb4b3cfd23bd87e18ec944251fe0395d65061)|`StartFinishSpan`|net472|669ns|0.177ns|0.687ns|0.0915| 0|0|578 B| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/8cbbb4b3cfd23bd87e18ec944251fe0395d65061)|`StartFinishScope`|net6.0|496ns|0.241ns|0.932ns|0.00964| 0|0|696 B| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/8cbbb4b3cfd23bd87e18ec944251fe0395d65061)|`StartFinishScope`|netcoreapp3.1|768ns|0.381ns|1.47ns|0.00956| 0|0|696 B| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/8cbbb4b3cfd23bd87e18ec944251fe0395d65061)|`StartFinishScope`|net472|850ns|1.69ns|6.54ns|0.104| 0|0|658 B| |#5749|`StartFinishSpan`|net6.0|394ns|0.205ns|0.794ns|0.00812| 0|0|576 B| |#5749|`StartFinishSpan`|netcoreapp3.1|535ns|0.356ns|1.38ns|0.00802| 0|0|576 B| |#5749|`StartFinishSpan`|net472|663ns|0.557ns|2.16ns|0.0915| 0|0|578 B| |#5749|`StartFinishScope`|net6.0|530ns|0.272ns|1.05ns|0.00967| 0|0|696 B| |#5749|`StartFinishScope`|netcoreapp3.1|726ns|0.532ns|2.06ns|0.00946| 0|0|696 B| |#5749|`StartFinishScope`|net472|835ns|2.35ns|9.1ns|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](https://github.com/DataDog/dd-trace-dotnet/tree/8cbbb4b3cfd23bd87e18ec944251fe0395d65061)|`RunOnMethodBegin`|net6.0|645ns|0.563ns|2.18ns|0.00962| 0|0|696 B| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/8cbbb4b3cfd23bd87e18ec944251fe0395d65061)|`RunOnMethodBegin`|netcoreapp3.1|936ns|0.676ns|2.62ns|0.00942| 0|0|696 B| |[master](https://github.com/DataDog/dd-trace-dotnet/tree/8cbbb4b3cfd23bd87e18ec944251fe0395d65061)|`RunOnMethodBegin`|net472|1.13μs|0.453ns|1.69ns|0.104| 0|0|658 B| |#5749|`RunOnMethodBegin`|net6.0|656ns|0.287ns|1.07ns|0.00958| 0|0|696 B| |#5749|`RunOnMethodBegin`|netcoreapp3.1|933ns|2.41ns|9.34ns|0.00938| 0|0|696 B| |#5749|`RunOnMethodBegin`|net472|1.12μs|0.615ns|2.38ns|0.104| 0|0|658 B|