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

Add new tag `_dd.integration` to be used for a metric on integration usage

Open vandonr opened this issue 5 months ago • 3 comments

Summary of changes

Add a new tag to spans at serialization time, that copies the value of the component tag, EXCEPT if it was set before, which should be done for all code paths that are not DD instrumentations. The goal is to capture the instrumentation name, or "otel" or "opentracing". This data is then read in our ingestion pipeline to send a metric representing the number of spans ingested for a particular instrumentation.

Reason for change

https://docs.google.com/document/d/1N5EpaBy7aywnFoBVXs5E7M2-6oeQWOBKDNf67Yvxhpo is the original RFC. Overall, the benefit of this over the span_created data is that:

  • since it's sent from the backend, we can categorize it, and make changes to that categorization
  • it measures the spans that actually reach datadog
  • it doesn't require adding a manual line of code every time a new instrumentation is created (there is something to do if we add new ways to create manual spans, but that's a lot rarer)

Implementation details

Since I'm going to access the component tag, and I noticed pretty much all integrations need to set it, I pulled it up from the individual Tag classes to the parent one (InstrumentationTags) to be able to query it efficiently. Some instrumentations set it to a constant, others set it dynamically, so I went for a get; set;, which is removing the "readonlyness" from some Tag classes, but I think it's not a big deal.

Test coverage

added tests on Spans and edited the serialization test to make sure the custom tag is written.

Other details

vandonr avatar Jun 11 '25 15:06 vandonr

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.8) 
    dateFormat  X
    axisFormat %s
    todayMarker off
    section Baseline
    This PR (7093) - mean (68ms)  : 64, 72
     .   : milestone, 68,
    master - mean (69ms)  : 65, 73
     .   : milestone, 69,

    section CallTarget+Inlining+NGEN
    This PR (7093) - mean (1,009ms)  : 981, 1038
     .   : milestone, 1009,
    master - mean (1,011ms)  : 983, 1038
     .   : milestone, 1011,

gantt
    title Execution time (ms) FakeDbCommand (.NET Core 3.1) 
    dateFormat  X
    axisFormat %s
    todayMarker off
    section Baseline
    This PR (7093) - mean (102ms)  : 100, 104
     .   : milestone, 102,
    master - mean (103ms)  : 101, 105
     .   : milestone, 103,

    section CallTarget+Inlining+NGEN
    This PR (7093) - mean (693ms)  : 677, 709
     .   : milestone, 693,
    master - mean (740ms)  : 625, 854
     .   : milestone, 740,

gantt
    title Execution time (ms) FakeDbCommand (.NET 6) 
    dateFormat  X
    axisFormat %s
    todayMarker off
    section Baseline
    This PR (7093) - mean (89ms)  : 87, 91
     .   : milestone, 89,
    master - mean (99ms)  : 69, 129
     .   : milestone, 99,

    section CallTarget+Inlining+NGEN
    This PR (7093) - mean (652ms)  : 633, 671
     .   : milestone, 652,
    master - mean (676ms)  : 640, 713
     .   : milestone, 676,

gantt
    title Execution time (ms) HttpMessageHandler (.NET Framework 4.8) 
    dateFormat  X
    axisFormat %s
    todayMarker off
    section Baseline
    This PR (7093) - mean (189ms)  : 184, 195
     .   : milestone, 189,
    master - mean (189ms)  : 185, 193
     .   : milestone, 189,

    section CallTarget+Inlining+NGEN
    This PR (7093) - mean (1,111ms)  : 1087, 1136
     .   : milestone, 1111,
    master - mean (1,108ms)  : 1078, 1138
     .   : milestone, 1108,

gantt
    title Execution time (ms) HttpMessageHandler (.NET Core 3.1) 
    dateFormat  X
    axisFormat %s
    todayMarker off
    section Baseline
    This PR (7093) - mean (267ms)  : 263, 271
     .   : milestone, 267,
    master - mean (267ms)  : 264, 270
     .   : milestone, 267,

    section CallTarget+Inlining+NGEN
    This PR (7093) - mean (880ms)  : 845, 915
     .   : milestone, 880,
    master - mean (888ms)  : 844, 931
     .   : milestone, 888,

gantt
    title Execution time (ms) HttpMessageHandler (.NET 6) 
    dateFormat  X
    axisFormat %s
    todayMarker off
    section Baseline
    This PR (7093) - mean (261ms)  : 257, 264
     .   : milestone, 261,
    master - mean (260ms)  : 257, 264
     .   : milestone, 260,

    section CallTarget+Inlining+NGEN
    This PR (7093) - mean (870ms)  : 833, 908
     .   : milestone, 870,
    master - mean (873ms)  : 843, 902
     .   : milestone, 873,

andrewlock avatar Jun 11 '25 16:06 andrewlock

Datadog Report

All test runs b0351c6 :link:

:x: 2 Total Test Services: 1 Failed, 1 Passed

Test Services
Service Name Failed Known Flaky New Flaky Passed Skipped Total Time Test Service View
dd-trace-dotnet 5775 2 0 517779 1952 13h 26m 9.74s Link
exploration_tests 0 0 0 22085 3 2m 13.21s Link

:x: Failed Tests (5775)

This report shows up to 5 failed tests.

  • AzureFunctionsTests+InProcessRuntimeV4.SubmitsTraces - Datadog.Trace.ClrProfiler.IntegrationTests - Details

    Expand for error
    xpected collection to contain at least 21 item(s) because we want to ensure that we don't timeout while waiting for spans from the mock tracer agent, but found 0: {empty}.
    
  • AzureFunctionsTests+IsolatedRuntimeV4AspNetCore.SubmitsTraces - Datadog.Trace.ClrProfiler.IntegrationTests - Details

    Expand for error
    xpected collection to contain at least 26 item(s) because we want to ensure that we don't timeout while waiting for spans from the mock tracer agent, but found 16: {{TraceId: 14681459865736090942, SpanId: 293325275150099530, Name: Manual inside Simple, Resource: Manual inside Simple, Service: AzureFunctionsAllTriggers}, {TraceId: 14681459865736090942, SpanId: 2315497484318020635, Name: azure-functions.invoke, Resource: Http SimpleHttpTrigger, Service: AzureFunctionsAllTriggers}, {TraceId: 14681459865736090942, SpanId: 4782739184198581944, Name: Manual inside Exception, Resource: Manual inside Exception, Service: AzureFunctionsAllTriggers}, {TraceId: 14681459865736090942, SpanId: 6476427925862849123, Name: azure-functions.invoke, Resource: Http Exception, Service: AzureFunctionsAllTriggers}, {TraceId: 14681459865736090942, SpanId: 5227506164194599712, Name: Manual inside ServerError, Resource: Manual inside ServerError, Service: AzureFunctionsAllTriggers}, {TraceId: 14681459865736090942, SpanId: 12354146683232543361, Name: azure-functions.invoke, Resource: Http ServerError, Service: AzureFunctionsAllTriggers}, {TraceId: 14681459865736090942, SpanId: 946440476764343114, Name: Manual inside BadRequest, Resource: Manual inside BadRequest, Service: AzureFunctionsAllTriggers}, {TraceId: 14681459865736090942, SpanId: 9084379478925042149, Name: azure-functions.invoke, Resource: Http BadRequest, Service: AzureFunctionsAllTriggers}, {TraceId: 14681459865736090942, SpanId: 14894205588582006189, Name: http.request, Resource: GET localhost:7071/api/simple, Service: AzureFunctionsAllTriggers-http-client}, {TraceId: 14681459865736090942, SpanId: 6466959654466073017, Name: http.request, Resource: GET localhost:7071/api/exception, Service: AzureFunctionsAllTriggers-http-client}, {TraceId: 14681459865736090942, SpanId: 658287176192047638, Name: http.request, Resource: GET localhost:7071/api/error, Service: AzureFunctionsAllTriggers-http-client}, {TraceId: 14681459865736090942, SpanId: 15381722453965392338, Name: http.request, Resource: GET localhost:7071/api/badrequest, Service: AzureFunctionsAllTriggers-http-client}, {TraceId: 14681459865736090942, SpanId: 13015852407388433012, Name: Manual inside Trigger, Resource: Manual inside Trigger, Service: AzureFunctionsAllTriggers}, {TraceId: 14681459865736090942, SpanId: 15354976262049529265, Name: azure-functions.invoke, Resource: Http TriggerCaller, Service: AzureFunctionsAllTriggers}, {TraceId: 14681459865736090942, SpanId: 13172174800148529322, Name: http.request, Resource: GET localhost:7071/api/trigger, Service: AzureFunctionsAllTriggers-http-client}, {TraceId: 14681459865736090942, SpanId: 7081138634132757560, Name: azure-functions.invoke, Resource: Timer TriggerAllTimer, Service: AzureFunctionsAllTriggers}}.
    
  • AzureFunctionsTests+IsolatedRuntimeV4AspNetCore.SubmitsTraces - Datadog.Trace.ClrProfiler.IntegrationTests - Details

    Expand for error
    xpected collection to contain at least 26 item(s) because we want to ensure that we don't timeout while waiting for spans from the mock tracer agent, but found 16: {{TraceId: 17579511855130361045, SpanId: 16291967793705564891, Name: Manual inside Simple, Resource: Manual inside Simple, Service: AzureFunctionsAllTriggers}, {TraceId: 17579511855130361045, SpanId: 6935401999581531355, Name: azure-functions.invoke, Resource: Http SimpleHttpTrigger, Service: AzureFunctionsAllTriggers}, {TraceId: 17579511855130361045, SpanId: 17146346915729464283, Name: Manual inside Exception, Resource: Manual inside Exception, Service: AzureFunctionsAllTriggers}, {TraceId: 17579511855130361045, SpanId: 14241868268888835585, Name: azure-functions.invoke, Resource: Http Exception, Service: AzureFunctionsAllTriggers}, {TraceId: 17579511855130361045, SpanId: 11213630328442475244, Name: Manual inside ServerError, Resource: Manual inside ServerError, Service: AzureFunctionsAllTriggers}, {TraceId: 17579511855130361045, SpanId: 13983223048711039254, Name: azure-functions.invoke, Resource: Http ServerError, Service: AzureFunctionsAllTriggers}, {TraceId: 17579511855130361045, SpanId: 2304323170101041346, Name: Manual inside BadRequest, Resource: Manual inside BadRequest, Service: AzureFunctionsAllTriggers}, {TraceId: 17579511855130361045, SpanId: 4397028327964524268, Name: azure-functions.invoke, Resource: Http BadRequest, Service: AzureFunctionsAllTriggers}, {TraceId: 17579511855130361045, SpanId: 12143207127721240814, Name: http.request, Resource: GET localhost:7071/api/simple, Service: AzureFunctionsAllTriggers-http-client}, {TraceId: 17579511855130361045, SpanId: 5315119683911832100, Name: http.request, Resource: GET localhost:7071/api/exception, Service: AzureFunctionsAllTriggers-http-client}, {TraceId: 17579511855130361045, SpanId: 10286054611552353784, Name: http.request, Resource: GET localhost:7071/api/error, Service: AzureFunctionsAllTriggers-http-client}, {TraceId: 17579511855130361045, SpanId: 15420856463421183426, Name: http.request, Resource: GET localhost:7071/api/badrequest, Service: AzureFunctionsAllTriggers-http-client}, {TraceId: 17579511855130361045, SpanId: 6536518149899579348, Name: Manual inside Trigger, Resource: Manual inside Trigger, Service: AzureFunctionsAllTriggers}, {TraceId: 17579511855130361045, SpanId: 6788543391641972793, Name: azure-functions.invoke, Resource: Http TriggerCaller, Service: AzureFunctionsAllTriggers}, {TraceId: 17579511855130361045, SpanId: 3710164293599037852, Name: http.request, Resource: GET localhost:7071/api/trigger, Service: AzureFunctionsAllTriggers-http-client}, {TraceId: 17579511855130361045, SpanId: 8815073927985662402, Name: azure-functions.invoke, Resource: Timer TriggerAllTimer, Service: AzureFunctionsAllTriggers}}.
    
  • AzureFunctionsTests+IsolatedRuntimeV4AspNetCore.SubmitsTraces - Datadog.Trace.ClrProfiler.IntegrationTests - Details

    Expand for error
    xpected collection to contain at least 26 item(s) because we want to ensure that we don't timeout while waiting for spans from the mock tracer agent, but found 16: {{TraceId: 15187003303684686506, SpanId: 10215066021210877687, Name: Manual inside Simple, Resource: Manual inside Simple, Service: AzureFunctionsAllTriggers}, {TraceId: 15187003303684686506, SpanId: 4387255121460735329, Name: azure-functions.invoke, Resource: Http SimpleHttpTrigger, Service: AzureFunctionsAllTriggers}, {TraceId: 15187003303684686506, SpanId: 8127473496689335427, Name: Manual inside Exception, Resource: Manual inside Exception, Service: AzureFunctionsAllTriggers}, {TraceId: 15187003303684686506, SpanId: 367059843654099338, Name: azure-functions.invoke, Resource: Http Exception, Service: AzureFunctionsAllTriggers}, {TraceId: 15187003303684686506, SpanId: 3707225868289971992, Name: Manual inside ServerError, Resource: Manual inside ServerError, Service: AzureFunctionsAllTriggers}, {TraceId: 15187003303684686506, SpanId: 5227620789208374213, Name: azure-functions.invoke, Resource: Http ServerError, Service: AzureFunctionsAllTriggers}, {TraceId: 15187003303684686506, SpanId: 5054474409867888615, Name: Manual inside BadRequest, Resource: Manual inside BadRequest, Service: AzureFunctionsAllTriggers}, {TraceId: 15187003303684686506, SpanId: 13662505353300628414, Name: azure-functions.invoke, Resource: Http BadRequest, Service: AzureFunctionsAllTriggers}, {TraceId: 15187003303684686506, SpanId: 4143765572734166007, Name: http.request, Resource: GET localhost:7071/api/simple, Service: AzureFunctionsAllTriggers-http-client}, {TraceId: 15187003303684686506, SpanId: 925466673794075775, Name: http.request, Resource: GET localhost:7071/api/exception, Service: AzureFunctionsAllTriggers-http-client}, {TraceId: 15187003303684686506, SpanId: 27149915882997139, Name: http.request, Resource: GET localhost:7071/api/error, Service: AzureFunctionsAllTriggers-http-client}, {TraceId: 15187003303684686506, SpanId: 8393894956325400015, Name: http.request, Resource: GET localhost:7071/api/badrequest, Service: AzureFunctionsAllTriggers-http-client}, {TraceId: 15187003303684686506, SpanId: 18363572522073279399, Name: Manual inside Trigger, Resource: Manual inside Trigger, Service: AzureFunctionsAllTriggers}, {TraceId: 15187003303684686506, SpanId: 18269348299389385792, Name: azure-functions.invoke, Resource: Http TriggerCaller, Service: AzureFunctionsAllTriggers}, {TraceId: 15187003303684686506, SpanId: 10464652417487292079, Name: http.request, Resource: GET localhost:7071/api/trigger, Service: AzureFunctionsAllTriggers-http-client}, {TraceId: 15187003303684686506, SpanId: 3021069876220751610, Name: azure-functions.invoke, Resource: Timer TriggerAllTimer, Service: AzureFunctionsAllTriggers}}.
    
  • AzureFunctionsTests+IsolatedRuntimeV4AspNetCore.SubmitsTraces - Datadog.Trace.ClrProfiler.IntegrationTests - Details

    Expand for error
    xpected collection to contain at least 26 item(s) because we want to ensure that we don't timeout while waiting for spans from the mock tracer agent, but found 16: {{TraceId: 12251501615237115360, SpanId: 11451275710685268220, Name: Manual inside Simple, Resource: Manual inside Simple, Service: AzureFunctionsAllTriggers}, {TraceId: 12251501615237115360, SpanId: 4225763545179473716, Name: azure-functions.invoke, Resource: Http SimpleHttpTrigger, Service: AzureFunctionsAllTriggers}, {TraceId: 12251501615237115360, SpanId: 15427890550673640471, Name: Manual inside Exception, Resource: Manual inside Exception, Service: AzureFunctionsAllTriggers}, {TraceId: 12251501615237115360, SpanId: 16587682041664947369, Name: azure-functions.invoke, Resource: Http Exception, Service: AzureFunctionsAllTriggers}, {TraceId: 12251501615237115360, SpanId: 8060764269504943680, Name: Manual inside ServerError, Resource: Manual inside ServerError, Service: AzureFunctionsAllTriggers}, {TraceId: 12251501615237115360, SpanId: 9847004037498691250, Name: azure-functions.invoke, Resource: Http ServerError, Service: AzureFunctionsAllTriggers}, {TraceId: 12251501615237115360, SpanId: 15305157841915211496, Name: Manual inside BadRequest, Resource: Manual inside BadRequest, Service: AzureFunctionsAllTriggers}, {TraceId: 12251501615237115360, SpanId: 4734754628095050062, Name: azure-functions.invoke, Resource: Http BadRequest, Service: AzureFunctionsAllTriggers}, {TraceId: 12251501615237115360, SpanId: 12866402090226607793, Name: http.request, Resource: GET localhost:7071/api/simple, Service: AzureFunctionsAllTriggers-http-client}, {TraceId: 12251501615237115360, SpanId: 15546919199823617309, Name: http.request, Resource: GET localhost:7071/api/exception, Service: AzureFunctionsAllTriggers-http-client}, {TraceId: 12251501615237115360, SpanId: 12254294558211539471, Name: http.request, Resource: GET localhost:7071/api/error, Service: AzureFunctionsAllTriggers-http-client}, {TraceId: 12251501615237115360, SpanId: 16103856434560651149, Name: http.request, Resource: GET localhost:7071/api/badrequest, Service: AzureFunctionsAllTriggers-http-client}, {TraceId: 12251501615237115360, SpanId: 780070677036928188, Name: Manual inside Trigger, Resource: Manual inside Trigger, Service: AzureFunctionsAllTriggers}, {TraceId: 12251501615237115360, SpanId: 636148695673941894, Name: azure-functions.invoke, Resource: Http TriggerCaller, Service: AzureFunctionsAllTriggers}, {TraceId: 12251501615237115360, SpanId: 5423891996826498764, Name: http.request, Resource: GET localhost:7071/api/trigger, Service: AzureFunctionsAllTriggers-http-client}, {TraceId: 12251501615237115360, SpanId: 11644549605996437281, Name: azure-functions.invoke, Resource: Timer TriggerAllTimer, Service: AzureFunctionsAllTriggers}}.
    

Benchmarks

Benchmarks Report for benchmark platform :snail:

Benchmarks for #7093 compared to master:

  • All benchmarks have the same speed
  • 21 benchmarks have fewer allocations
  • 10 benchmarks have more allocations

The following thresholds were used for comparing the benchmark speeds:

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

Allocation changes below 0.5% are ignored.

Benchmark details

Benchmarks.Trace.ActivityBenchmark - Same speed :heavy_check_mark: Fewer allocations :tada:

Fewer allocations :tada: in #7093

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.ActivityBenchmark.StartStopWithChild‑netcoreapp3.1 5.75 KB 5.72 KB -32 B -0.56%
Benchmarks.Trace.ActivityBenchmark.StartStopWithChild‑net6.0 5.58 KB 5.51 KB -64 B -1.15%
Benchmarks.Trace.ActivityBenchmark.StartStopWithChild‑net472 6.09 KB 6.01 KB -75 B -1.23%

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master StartStopWithChild net6.0 11.2μs 59.7ns 322ns 0 0 0 5.58 KB
master StartStopWithChild netcoreapp3.1 14.1μs 67.5ns 286ns 0 0 0 5.75 KB
master StartStopWithChild net472 22.1μs 119ns 651ns 1.03 0.411 0.103 6.09 KB
#7093 StartStopWithChild net6.0 10.3μs 55.7ns 325ns 0 0 0 5.51 KB
#7093 StartStopWithChild netcoreapp3.1 13.8μs 57.3ns 222ns 0 0 0 5.72 KB
#7093 StartStopWithChild net472 22.2μs 111ns 510ns 0.997 0.443 0.111 6.01 KB
Benchmarks.Trace.AgentWriterBenchmark - Same speed :heavy_check_mark: Fewer allocations :tada:

Fewer allocations :tada: in #7093

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.AgentWriterBenchmark.WriteAndFlushEnrichedTraces‑net472 3.33 KB 3.31 KB -23 B -0.69%

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master WriteAndFlushEnrichedTraces net6.0 927μs 26.6ns 103ns 0 0 0 2.71 KB
master WriteAndFlushEnrichedTraces netcoreapp3.1 1.04ms 404ns 1.56μs 0 0 0 2.7 KB
master WriteAndFlushEnrichedTraces net472 1.25ms 357ns 1.38μs 0 0 0 3.33 KB
#7093 WriteAndFlushEnrichedTraces net6.0 944μs 65.9ns 247ns 0 0 0 2.7 KB
#7093 WriteAndFlushEnrichedTraces netcoreapp3.1 1.05ms 1.58μs 6.13μs 0 0 0 2.7 KB
#7093 WriteAndFlushEnrichedTraces net472 1.23ms 72.2ns 280ns 0 0 0 3.31 KB
Benchmarks.Trace.Asm.AppSecBodyBenchmark - Same speed :heavy_check_mark: More allocations :warning:

More allocations :warning: in #7093

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.Asm.AppSecBodyBenchmark.AllCycleSimpleBody‑net472 236.35 KB 239.64 KB 3.29 KB 1.39%
Benchmarks.Trace.Asm.AppSecBodyBenchmark.AllCycleMoreComplexBody‑net472 239.87 KB 243.15 KB 3.28 KB 1.37%

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master AllCycleSimpleBody net6.0 331μs 1.76μs 8.42μs 0 0 0 197.06 KB
master AllCycleSimpleBody netcoreapp3.1 510μs 1.45μs 5.61μs 0 0 0 204.77 KB
master AllCycleSimpleBody net472 436μs 119ns 460ns 36.6 2.16 0 236.35 KB
master AllCycleMoreComplexBody net6.0 338μs 1.76μs 8.8μs 0 0 0 200.56 KB
master AllCycleMoreComplexBody netcoreapp3.1 495μs 987ns 3.56μs 0 0 0 208.18 KB
master AllCycleMoreComplexBody net472 446μs 106ns 412ns 36.6 2.16 0 239.87 KB
master ObjectExtractorSimpleBody net6.0 311ns 1.77ns 12.3ns 0 0 0 280 B
master ObjectExtractorSimpleBody netcoreapp3.1 409ns 1.93ns 8.2ns 0 0 0 272 B
master ObjectExtractorSimpleBody net472 303ns 0.175ns 0.676ns 0.0442 0 0 281 B
master ObjectExtractorMoreComplexBody net6.0 6.52μs 29.5ns 110ns 0 0 0 3.78 KB
master ObjectExtractorMoreComplexBody netcoreapp3.1 7.76μs 36.2ns 140ns 0 0 0 3.69 KB
master ObjectExtractorMoreComplexBody net472 6.66μs 0.89ns 3.33ns 0.599 0 0 3.8 KB
#7093 AllCycleSimpleBody net6.0 330μs 1.39μs 5.39μs 0 0 0 197.59 KB
#7093 AllCycleSimpleBody netcoreapp3.1 480μs 1.88μs 6.76μs 0 0 0 205.34 KB
#7093 AllCycleSimpleBody net472 448μs 536ns 2.08μs 37.9 2.23 0 239.64 KB
#7093 AllCycleMoreComplexBody net6.0 338μs 1.61μs 6.24μs 0 0 0 201.09 KB
#7093 AllCycleMoreComplexBody netcoreapp3.1 495μs 2.1μs 8.13μs 0 0 0 208.76 KB
#7093 AllCycleMoreComplexBody net472 451μs 137ns 530ns 37.9 2.23 0 243.15 KB
#7093 ObjectExtractorSimpleBody net6.0 321ns 1.78ns 11.3ns 0 0 0 280 B
#7093 ObjectExtractorSimpleBody netcoreapp3.1 403ns 2.06ns 9.67ns 0 0 0 272 B
#7093 ObjectExtractorSimpleBody net472 304ns 0.0332ns 0.124ns 0.0443 0 0 281 B
#7093 ObjectExtractorMoreComplexBody net6.0 6.25μs 5.31ns 20.6ns 0 0 0 3.78 KB
#7093 ObjectExtractorMoreComplexBody netcoreapp3.1 7.8μs 30.1ns 109ns 0 0 0 3.69 KB
#7093 ObjectExtractorMoreComplexBody net472 6.83μs 1ns 3.61ns 0.583 0 0 3.8 KB
Benchmarks.Trace.Asm.AppSecEncoderBenchmark - Same speed :heavy_check_mark: Fewer allocations :tada:

Fewer allocations :tada: in #7093

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.Asm.AppSecEncoderBenchmark.EncodeLegacyArgs‑net6.0 2.16 KB 2.14 KB -12 B -0.56%

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master EncodeArgs net6.0 73.3μs 263ns 984ns 0 0 0 32.41 KB
master EncodeArgs netcoreapp3.1 95.7μs 36.2ns 130ns 0 0 0 32.4 KB
master EncodeArgs net472 107μs 17.6ns 65.8ns 4.82 0 0 32.51 KB
master EncodeLegacyArgs net6.0 143μs 122ns 472ns 0 0 0 2.16 KB
master EncodeLegacyArgs netcoreapp3.1 197μs 42.5ns 147ns 0 0 0 2.14 KB
master EncodeLegacyArgs net472 261μs 66.8ns 250ns 0 0 0 2.16 KB
#7093 EncodeArgs net6.0 73.5μs 29.4ns 114ns 0 0 0 32.4 KB
#7093 EncodeArgs netcoreapp3.1 94.3μs 278ns 1.04μs 0 0 0 32.4 KB
#7093 EncodeArgs net472 107μs 7.21ns 27ns 4.78 0 0 32.51 KB
#7093 EncodeLegacyArgs net6.0 147μs 176ns 683ns 0 0 0 2.14 KB
#7093 EncodeLegacyArgs netcoreapp3.1 197μs 576ns 2.23μs 0 0 0 2.14 KB
#7093 EncodeLegacyArgs net472 261μs 47.3ns 183ns 0 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 271μs 133ns 499ns 0 0 0 4.55 KB
master RunWafRealisticBenchmark netcoreapp3.1 294μs 264ns 989ns 0 0 0 4.48 KB
master RunWafRealisticBenchmark net472 307μs 38.1ns 147ns 0 0 0 4.66 KB
master RunWafRealisticBenchmarkWithAttack net6.0 181μs 80.1ns 300ns 0 0 0 2.24 KB
master RunWafRealisticBenchmarkWithAttack netcoreapp3.1 198μs 104ns 404ns 0 0 0 2.22 KB
master RunWafRealisticBenchmarkWithAttack net472 207μs 45.3ns 169ns 0 0 0 2.28 KB
#7093 RunWafRealisticBenchmark net6.0 271μs 67.2ns 251ns 0 0 0 4.55 KB
#7093 RunWafRealisticBenchmark netcoreapp3.1 292μs 52.5ns 189ns 0 0 0 4.48 KB
#7093 RunWafRealisticBenchmark net472 307μs 59.9ns 232ns 0 0 0 4.66 KB
#7093 RunWafRealisticBenchmarkWithAttack net6.0 181μs 62.1ns 232ns 0 0 0 2.24 KB
#7093 RunWafRealisticBenchmarkWithAttack netcoreapp3.1 195μs 40.4ns 151ns 0 0 0 2.22 KB
#7093 RunWafRealisticBenchmarkWithAttack net472 206μs 44.6ns 173ns 0 0 0 2.28 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 61.1μs 29ns 104ns 0 0 0 14.53 KB
master SendRequest netcoreapp3.1 69.9μs 118ns 440ns 0 0 0 17.42 KB
master SendRequest net472 0.0171ns 0.00147ns 0.00551ns 0 0 0 0 b
#7093 SendRequest net6.0 61.2μs 35.5ns 128ns 0 0 0 14.53 KB
#7093 SendRequest netcoreapp3.1 72.1μs 160ns 598ns 0 0 0 17.42 KB
#7093 SendRequest net472 0.0144ns 0.00157ns 0.00609ns 0 0 0 0 b
Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark - Same speed :heavy_check_mark: More allocations :warning:

More allocations :warning: in #7093

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark.WriteAndFlushEnrichedTraces‑net472 55.75 KB 56.22 KB 466 B 0.84%
Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark.WriteAndFlushEnrichedTraces‑netcoreapp3.1 41.89 KB 42.15 KB 263 B 0.63%

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master WriteAndFlushEnrichedTraces net6.0 645μs 512ns 1.98μs 0 0 0 41.73 KB
master WriteAndFlushEnrichedTraces netcoreapp3.1 631μs 1.67μs 6.67μs 0 0 0 41.89 KB
master WriteAndFlushEnrichedTraces net472 923μs 1.93μs 7.2μs 4.46 0 0 55.75 KB
#7093 WriteAndFlushEnrichedTraces net6.0 642μs 293ns 1.1μs 0 0 0 41.59 KB
#7093 WriteAndFlushEnrichedTraces netcoreapp3.1 679μs 2.54μs 9.82μs 0 0 0 42.15 KB
#7093 WriteAndFlushEnrichedTraces net472 868μs 3.02μs 11.7μs 8.33 0 0 56.22 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.99μs 10.2ns 46.8ns 0 0 0 1.03 KB
master ExecuteNonQuery netcoreapp3.1 2.53μs 3.43ns 13.3ns 0 0 0 1.02 KB
master ExecuteNonQuery net472 2.7μs 2.41ns 9.34ns 0.147 0.0134 0 995 B
#7093 ExecuteNonQuery net6.0 1.9μs 8.86ns 34.3ns 0 0 0 1.03 KB
#7093 ExecuteNonQuery netcoreapp3.1 2.63μs 9.45ns 36.6ns 0 0 0 1.02 KB
#7093 ExecuteNonQuery net472 2.88μs 5.87ns 22.7ns 0.158 0.0143 0 995 B
Benchmarks.Trace.ElasticsearchBenchmark - Same speed :heavy_check_mark: More allocations :warning:

More allocations :warning: in #7093

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.ElasticsearchBenchmark.CallElasticsearchAsync‑net472 1.11 KB 1.12 KB 9 B 0.81%
Benchmarks.Trace.ElasticsearchBenchmark.CallElasticsearchAsync‑net6.0 1.02 KB 1.02 KB 8 B 0.79%
Benchmarks.Trace.ElasticsearchBenchmark.CallElasticsearch‑net6.0 1.04 KB 1.05 KB 8 B 0.77%
Benchmarks.Trace.ElasticsearchBenchmark.CallElasticsearch‑netcoreapp3.1 1.04 KB 1.05 KB 8 B 0.77%
Benchmarks.Trace.ElasticsearchBenchmark.CallElasticsearch‑net472 1.05 KB 1.06 KB 8 B 0.76%
Benchmarks.Trace.ElasticsearchBenchmark.CallElasticsearchAsync‑netcoreapp3.1 1.09 KB 1.1 KB 8 B 0.74%

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master CallElasticsearch net6.0 1.83μs 5.85ns 22.7ns 0 0 0 1.04 KB
master CallElasticsearch netcoreapp3.1 2.3μs 11.8ns 56.6ns 0 0 0 1.04 KB
master CallElasticsearch net472 3.55μs 3.05ns 11.8ns 0.159 0 0 1.05 KB
master CallElasticsearchAsync net6.0 1.81μs 3.89ns 14.5ns 0 0 0 1.02 KB
master CallElasticsearchAsync netcoreapp3.1 2.35μs 7.26ns 28.1ns 0 0 0 1.09 KB
master CallElasticsearchAsync net472 3.84μs 3.19ns 12.4ns 0.169 0 0 1.11 KB
#7093 CallElasticsearch net6.0 1.74μs 0.55ns 2.13ns 0 0 0 1.05 KB
#7093 CallElasticsearch netcoreapp3.1 2.45μs 3.14ns 12.2ns 0 0 0 1.05 KB
#7093 CallElasticsearch net472 3.55μs 4.15ns 16.1ns 0.159 0 0 1.06 KB
#7093 CallElasticsearchAsync net6.0 1.82μs 4.62ns 17.9ns 0 0 0 1.02 KB
#7093 CallElasticsearchAsync netcoreapp3.1 2.55μs 8.58ns 32.1ns 0 0 0 1.1 KB
#7093 CallElasticsearchAsync net472 3.77μs 2.03ns 7.88ns 0.169 0 0 1.12 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.78μs 9.27ns 43.5ns 0 0 0 960 B
master ExecuteAsync netcoreapp3.1 2.29μs 7.45ns 25.8ns 0 0 0 960 B
master ExecuteAsync net472 2.58μs 1.78ns 6.88ns 0.143 0 0 923 B
#7093 ExecuteAsync net6.0 1.89μs 2.45ns 9.49ns 0 0 0 960 B
#7093 ExecuteAsync netcoreapp3.1 2.37μs 11.1ns 45.9ns 0 0 0 960 B
#7093 ExecuteAsync net472 2.57μs 1.25ns 4.69ns 0.142 0 0 923 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 7.1μs 10.4ns 39ns 0 0 0 2.37 KB
master SendAsync netcoreapp3.1 8.69μs 14.1ns 54.6ns 0 0 0 2.9 KB
master SendAsync net472 12.5μs 10.3ns 38.5ns 0.498 0 0 3.19 KB
#7093 SendAsync net6.0 7.09μs 3.83ns 14.3ns 0 0 0 2.37 KB
#7093 SendAsync netcoreapp3.1 8.17μs 23.7ns 91.8ns 0 0 0 2.9 KB
#7093 SendAsync net472 12.2μs 8.1ns 31.4ns 0.484 0 0 3.19 KB
Benchmarks.Trace.Iast.StringAspectsBenchmark - Same speed :heavy_check_mark: Fewer allocations :tada:

Fewer allocations :tada: in #7093

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.Iast.StringAspectsBenchmark.StringConcatAspectBenchmark‑net6.0 259.96 KB 258.59 KB -1.37 KB -0.53%
Benchmarks.Trace.Iast.StringAspectsBenchmark.StringConcatAspectBenchmark‑netcoreapp3.1 274.93 KB 273.35 KB -1.58 KB -0.57%
Benchmarks.Trace.Iast.StringAspectsBenchmark.StringConcatBenchmark‑net6.0 43.83 KB 43.2 KB -632 B -1.44%
Benchmarks.Trace.Iast.StringAspectsBenchmark.StringConcatAspectBenchmark‑net472 286.72 KB 275.38 KB -11.34 KB -3.95%

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master StringConcatBenchmark net6.0 44.6μs 212ns 1.6μs 0 0 0 43.83 KB
master StringConcatBenchmark netcoreapp3.1 47.2μs 224ns 838ns 0 0 0 42.64 KB
master StringConcatBenchmark net472 56.8μs 259ns 968ns 0 0 0 57.34 KB
master StringConcatAspectBenchmark net6.0 458μs 1.08μs 3.89μs 0 0 0 259.96 KB
master StringConcatAspectBenchmark netcoreapp3.1 447μs 6.44μs 63.7μs 0 0 0 274.93 KB
master StringConcatAspectBenchmark net472 410μs 2.07μs 9.27μs 0 0 0 286.72 KB
#7093 StringConcatBenchmark net6.0 47.7μs 524ns 5.13μs 0 0 0 43.2 KB
#7093 StringConcatBenchmark netcoreapp3.1 47.6μs 199ns 689ns 0 0 0 42.71 KB
#7093 StringConcatBenchmark net472 56.5μs 244ns 911ns 0 0 0 57.34 KB
#7093 StringConcatAspectBenchmark net6.0 450μs 1.5μs 5.2μs 0 0 0 258.59 KB
#7093 StringConcatAspectBenchmark netcoreapp3.1 475μs 5.33μs 52.3μs 0 0 0 273.35 KB
#7093 StringConcatAspectBenchmark net472 407μs 2.34μs 18.1μs 0 0 0 275.38 KB
Benchmarks.Trace.ILoggerBenchmark - Same speed :heavy_check_mark: Fewer allocations :tada:

Fewer allocations :tada: in #7093

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.ILoggerBenchmark.EnrichedLog‑net6.0 1.76 KB 1.72 KB -40 B -2.27%
Benchmarks.Trace.ILoggerBenchmark.EnrichedLog‑netcoreapp3.1 1.76 KB 1.72 KB -40 B -2.27%
Benchmarks.Trace.ILoggerBenchmark.EnrichedLog‑net472 1.69 KB 1.65 KB -40 B -2.36%

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master EnrichedLog net6.0 2.63μs 2.6ns 10.1ns 0 0 0 1.76 KB
master EnrichedLog netcoreapp3.1 3.44μs 4.38ns 17ns 0 0 0 1.76 KB
master EnrichedLog net472 4.05μs 4.83ns 18.7ns 0.265 0 0 1.69 KB
#7093 EnrichedLog net6.0 2.58μs 1.11ns 3.99ns 0 0 0 1.72 KB
#7093 EnrichedLog netcoreapp3.1 3.55μs 14.9ns 57.9ns 0 0 0 1.72 KB
#7093 EnrichedLog net472 3.99μs 3.11ns 12ns 0.258 0 0 1.65 KB
Benchmarks.Trace.Log4netBenchmark - Same speed :heavy_check_mark: Fewer allocations :tada:

Fewer allocations :tada: in #7093

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.Log4netBenchmark.EnrichedLog‑net472 4.57 KB 4.53 KB -41 B -0.90%
Benchmarks.Trace.Log4netBenchmark.EnrichedLog‑net6.0 4.37 KB 4.33 KB -40 B -0.92%
Benchmarks.Trace.Log4netBenchmark.EnrichedLog‑netcoreapp3.1 4.37 KB 4.33 KB -40 B -0.92%

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master EnrichedLog net6.0 123μs 145ns 563ns 0 0 0 4.37 KB
master EnrichedLog netcoreapp3.1 126μs 330ns 1.24μs 0 0 0 4.37 KB
master EnrichedLog net472 167μs 161ns 603ns 0 0 0 4.57 KB
#7093 EnrichedLog net6.0 123μs 94.6ns 341ns 0 0 0 4.33 KB
#7093 EnrichedLog netcoreapp3.1 127μs 208ns 749ns 0 0 0 4.33 KB
#7093 EnrichedLog net472 168μs 209ns 808ns 0 0 0 4.53 KB
Benchmarks.Trace.NLogBenchmark - Same speed :heavy_check_mark: Fewer allocations :tada:

Fewer allocations :tada: in #7093

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.NLogBenchmark.EnrichedLog‑net6.0 2.32 KB 2.28 KB -40 B -1.72%
Benchmarks.Trace.NLogBenchmark.EnrichedLog‑netcoreapp3.1 2.32 KB 2.28 KB -40 B -1.72%
Benchmarks.Trace.NLogBenchmark.EnrichedLog‑net472 2.14 KB 2.1 KB -40 B -1.87%

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master EnrichedLog net6.0 4.94μs 19.3ns 74.6ns 0 0 0 2.32 KB
master EnrichedLog netcoreapp3.1 6.77μs 22.2ns 79.9ns 0 0 0 2.32 KB
master EnrichedLog net472 7.45μs 8.04ns 31.1ns 0.335 0 0 2.14 KB
#7093 EnrichedLog net6.0 5μs 3.1ns 11.6ns 0 0 0 2.28 KB
#7093 EnrichedLog netcoreapp3.1 6.87μs 29.2ns 113ns 0 0 0 2.28 KB
#7093 EnrichedLog net472 7.49μs 10.6ns 41.2ns 0.3 0 0 2.1 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 2.04μs 10.5ns 49.4ns 0 0 0 1.21 KB
master SendReceive netcoreapp3.1 2.53μs 11.8ns 47.4ns 0 0 0 1.21 KB
master SendReceive net472 3.28μs 2.71ns 10.5ns 0.178 0 0 1.21 KB
#7093 SendReceive net6.0 2.01μs 10.9ns 63.4ns 0 0 0 1.21 KB
#7093 SendReceive netcoreapp3.1 2.63μs 8.96ns 34.7ns 0 0 0 1.21 KB
#7093 SendReceive net472 3.13μs 2.61ns 9.77ns 0.187 0 0 1.21 KB
Benchmarks.Trace.SerilogBenchmark - Same speed :heavy_check_mark: Fewer allocations :tada:

Fewer allocations :tada: in #7093

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.SerilogBenchmark.EnrichedLog‑net472 2.08 KB 2.04 KB -40 B -1.92%
Benchmarks.Trace.SerilogBenchmark.EnrichedLog‑netcoreapp3.1 1.69 KB 1.65 KB -40 B -2.37%
Benchmarks.Trace.SerilogBenchmark.EnrichedLog‑net6.0 1.64 KB 1.6 KB -40 B -2.44%

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master EnrichedLog net6.0 4.18μs 0.92ns 3.44ns 0 0 0 1.64 KB
master EnrichedLog netcoreapp3.1 5.64μs 23ns 89.3ns 0 0 0 1.69 KB
master EnrichedLog net472 6.67μs 7.28ns 27.3ns 0.298 0 0 2.08 KB
#7093 EnrichedLog net6.0 4.38μs 11.4ns 44.2ns 0 0 0 1.6 KB
#7093 EnrichedLog netcoreapp3.1 5.65μs 16.1ns 62.4ns 0 0 0 1.65 KB
#7093 EnrichedLog net472 6.55μs 6.44ns 25ns 0.295 0 0 2.04 KB
Benchmarks.Trace.SpanBenchmark - 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 StartFinishSpan net6.0 751ns 3.97ns 22.4ns 0 0 0 584 B
master StartFinishSpan netcoreapp3.1 953ns 4.42ns 17.7ns 0 0 0 584 B
master StartFinishSpan net472 914ns 0.809ns 3.13ns 0.0912 0 0 586 B
master StartFinishScope net6.0 918ns 0.479ns 1.73ns 0 0 0 704 B
master StartFinishScope netcoreapp3.1 1.15μs 6.24ns 34.2ns 0 0 0 704 B
master StartFinishScope net472 1.09μs 0.174ns 0.652ns 0.104 0 0 666 B
#7093 StartFinishSpan net6.0 771ns 0.139ns 0.539ns 0 0 0 584 B
#7093 StartFinishSpan netcoreapp3.1 1.01μs 0.257ns 0.889ns 0 0 0 584 B
#7093 StartFinishSpan net472 954ns 0.148ns 0.555ns 0.0907 0 0 586 B
#7093 StartFinishScope net6.0 927ns 0.459ns 1.65ns 0 0 0 704 B
#7093 StartFinishScope netcoreapp3.1 1.21μs 5.83ns 23.3ns 0 0 0 704 B
#7093 StartFinishScope net472 1.12μs 0.486ns 1.88ns 0.101 0 0 666 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 1.02μs 5.36ns 26.8ns 0 0 0 704 B
master RunOnMethodBegin netcoreapp3.1 1.38μs 2.28ns 8.82ns 0 0 0 704 B
master RunOnMethodBegin net472 1.36μs 0.141ns 0.544ns 0.102 0 0 666 B
#7093 RunOnMethodBegin net6.0 1.07μs 0.821ns 3.18ns 0 0 0 704 B
#7093 RunOnMethodBegin netcoreapp3.1 1.44μs 1.46ns 5.64ns 0 0 0 704 B
#7093 RunOnMethodBegin net472 1.44μs 2.08ns 8.06ns 0.1 0 0 666 B

pr-commenter[bot] avatar Jun 11 '25 16:06 pr-commenter[bot]