Skip to content

Conversation

@vandonr
Copy link
Contributor

@vandonr vandonr commented Nov 5, 2025

Summary of changes

add processtags to the body of telemetry requests, as part of the application data.

equivalent of DataDog/dd-trace-java#8837

Reason for change

AIDM-195

Implementation details

pretty straightforward.

Test coverage

relies on snapshots

Other details

@vandonr vandonr requested a review from a team as a code owner November 5, 2025 11:34
chatgpt-codex-connector[bot]

This comment was marked as resolved.

Copy link
Member

@andrewlock andrewlock left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think that has the same problem as #7775 - i.e. it will immediately cause us to grab the process tags, and these will "lock in" the wrong values in IIS

@vandonr
Copy link
Contributor Author

vandonr commented Nov 5, 2025

I think that has the same problem as #7775 - i.e. it will immediately cause us to grab the process tags, and these will "lock in" the wrong values in IIS

less so though, no ? Because it'd only grab them when the first telemetry payload is sent, which is not right as the app/tracer starts

@andrewlock
Copy link
Member

andrewlock commented Nov 5, 2025

which is not right as the app/tracer starts

No, it's right as the app/tracer starts 😅 i.e. the app-started request

@vandonr
Copy link
Contributor Author

vandonr commented Nov 5, 2025

No, it's right as the app/tracer starts 😅 i.e. the app-started request

ah yes, so we are even more f*cked with this, which is exactly what I said in the other PR, every new place where I add them makes the problem worse ^^

@dd-trace-dotnet-ci-bot
Copy link

Execution-Time Benchmarks Report ⏱️

Execution-time results for samples comparing This PR (7780) and master.

✅ No regressions detected - check the details below

Full Metrics Comparison

FakeDbCommand

Metric Master (Mean ± 95% CI) Current (Mean ± 95% CI) Change Status
.NET Framework 4.8 - Baseline
duration68.18 ± (68.19 - 68.45) ms67.89 ± (67.92 - 68.16) ms-0.4%
.NET Framework 4.8 - Bailout
duration71.96 ± (71.83 - 72.08) ms71.73 ± (71.64 - 71.93) ms-0.3%
.NET Framework 4.8 - CallTarget+Inlining+NGEN
duration1042.85 ± (1044.00 - 1049.22) ms1044.12 ± (1043.00 - 1048.99) ms+0.1%✅⬆️
.NET Core 3.1 - Baseline
process.internal_duration_ms22.04 ± (22.00 - 22.08) ms21.92 ± (21.89 - 21.95) ms-0.5%
process.time_to_main_ms79.05 ± (78.89 - 79.21) ms79.06 ± (78.90 - 79.22) ms+0.0%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed10.94 ± (10.93 - 10.94) MB10.89 ± (10.88 - 10.89) MB-0.5%
runtime.dotnet.threads.count12 ± (12 - 12)12 ± (12 - 12)+0.0%
.NET Core 3.1 - Bailout
process.internal_duration_ms21.90 ± (21.87 - 21.92) ms21.81 ± (21.79 - 21.83) ms-0.4%
process.time_to_main_ms80.20 ± (80.11 - 80.29) ms79.75 ± (79.66 - 79.84) ms-0.6%
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed10.96 ± (10.95 - 10.96) MB10.93 ± (10.93 - 10.94) MB-0.2%
runtime.dotnet.threads.count13 ± (13 - 13)13 ± (13 - 13)+0.0%
.NET Core 3.1 - CallTarget+Inlining+NGEN
process.internal_duration_ms209.64 ± (208.34 - 210.93) ms206.19 ± (204.73 - 207.64) ms-1.6%
process.time_to_main_ms513.71 ± (513.19 - 514.23) ms513.95 ± (513.31 - 514.60) ms+0.0%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed52.64 ± (52.62 - 52.66) MB52.58 ± (52.55 - 52.61) MB-0.1%
runtime.dotnet.threads.count28 ± (28 - 28)28 ± (28 - 28)+0.0%
.NET 6 - Baseline
process.internal_duration_ms20.78 ± (20.75 - 20.81) ms20.67 ± (20.65 - 20.70) ms-0.5%
process.time_to_main_ms68.50 ± (68.38 - 68.62) ms68.08 ± (67.96 - 68.21) ms-0.6%
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed10.60 ± (10.60 - 10.61) MB10.58 ± (10.57 - 10.58) MB-0.2%
runtime.dotnet.threads.count10 ± (10 - 10)10 ± (10 - 10)+0.0%
.NET 6 - Bailout
process.internal_duration_ms20.79 ± (20.76 - 20.81) ms20.57 ± (20.56 - 20.59) ms-1.0%
process.time_to_main_ms69.53 ± (69.45 - 69.60) ms68.80 ± (68.73 - 68.87) ms-1.0%
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed10.64 ± (10.63 - 10.64) MB10.63 ± (10.63 - 10.63) MB-0.1%
runtime.dotnet.threads.count11 ± (11 - 11)11 ± (11 - 11)+0.0%
.NET 6 - CallTarget+Inlining+NGEN
process.internal_duration_ms199.26 ± (196.98 - 201.55) ms204.03 ± (201.09 - 206.97) ms+2.4%✅⬆️
process.time_to_main_ms483.49 ± (482.91 - 484.06) ms483.26 ± (482.70 - 483.82) ms-0.0%
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed51.60 ± (51.53 - 51.66) MB51.45 ± (51.38 - 51.51) MB-0.3%
runtime.dotnet.threads.count28 ± (28 - 28)28 ± (28 - 28)-0.0%
.NET 8 - Baseline
process.internal_duration_ms18.97 ± (18.94 - 19.00) ms18.91 ± (18.89 - 18.93) ms-0.3%
process.time_to_main_ms67.53 ± (67.42 - 67.64) ms67.18 ± (67.08 - 67.28) ms-0.5%
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed7.66 ± (7.66 - 7.67) MB7.62 ± (7.61 - 7.63) MB-0.5%
runtime.dotnet.threads.count10 ± (10 - 10)10 ± (10 - 10)+0.0%
.NET 8 - Bailout
process.internal_duration_ms18.95 ± (18.92 - 18.98) ms18.82 ± (18.79 - 18.85) ms-0.7%
process.time_to_main_ms68.51 ± (68.44 - 68.58) ms68.06 ± (68.00 - 68.11) ms-0.7%
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed7.70 ± (7.70 - 7.71) MB7.68 ± (7.67 - 7.69) MB-0.3%
runtime.dotnet.threads.count11 ± (11 - 11)11 ± (11 - 11)+0.0%
.NET 8 - CallTarget+Inlining+NGEN
process.internal_duration_ms177.42 ± (176.49 - 178.34) ms178.21 ± (177.22 - 179.20) ms+0.4%✅⬆️
process.time_to_main_ms458.64 ± (458.17 - 459.10) ms455.51 ± (454.97 - 456.05) ms-0.7%
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed38.74 ± (38.71 - 38.76) MB38.65 ± (38.62 - 38.69) MB-0.2%
runtime.dotnet.threads.count27 ± (27 - 27)27 ± (27 - 27)+0.3%✅⬆️

HttpMessageHandler

Metric Master (Mean ± 95% CI) Current (Mean ± 95% CI) Change Status
.NET Framework 4.8 - Baseline
duration192.37 ± (192.36 - 193.23) ms191.47 ± (191.40 - 192.23) ms-0.5%
.NET Framework 4.8 - Bailout
duration195.65 ± (195.54 - 196.06) ms195.66 ± (195.64 - 196.31) ms+0.0%✅⬆️
.NET Framework 4.8 - CallTarget+Inlining+NGEN
duration1160.64 ± (1167.14 - 1177.47) ms1154.64 ± (1157.65 - 1166.16) ms-0.5%
.NET Core 3.1 - Baseline
process.internal_duration_ms187.77 ± (187.46 - 188.08) ms187.57 ± (187.23 - 187.92) ms-0.1%
process.time_to_main_ms81.15 ± (80.89 - 81.40) ms80.73 ± (80.51 - 80.94) ms-0.5%
runtime.dotnet.exceptions.count3 ± (3 - 3)3 ± (3 - 3)+0.0%
runtime.dotnet.mem.committed16.09 ± (16.07 - 16.12) MB16.10 ± (16.07 - 16.13) MB+0.0%✅⬆️
runtime.dotnet.threads.count20 ± (19 - 20)20 ± (19 - 20)+0.3%✅⬆️
.NET Core 3.1 - Bailout
process.internal_duration_ms187.16 ± (186.79 - 187.52) ms187.02 ± (186.64 - 187.40) ms-0.1%
process.time_to_main_ms82.20 ± (82.02 - 82.39) ms82.34 ± (82.14 - 82.53) ms+0.2%✅⬆️
runtime.dotnet.exceptions.count3 ± (3 - 3)3 ± (3 - 3)+0.0%
runtime.dotnet.mem.committed16.17 ± (16.14 - 16.20) MB16.14 ± (16.12 - 16.17) MB-0.1%
runtime.dotnet.threads.count21 ± (20 - 21)21 ± (21 - 21)+0.4%✅⬆️
.NET Core 3.1 - CallTarget+Inlining+NGEN
process.internal_duration_ms394.45 ± (392.01 - 396.90) ms393.12 ± (390.72 - 395.53) ms-0.3%
process.time_to_main_ms517.10 ± (516.48 - 517.72) ms515.69 ± (515.02 - 516.35) ms-0.3%
runtime.dotnet.exceptions.count3 ± (3 - 3)3 ± (3 - 3)+0.0%
runtime.dotnet.mem.committed63.13 ± (62.98 - 63.28) MB62.95 ± (62.79 - 63.11) MB-0.3%
runtime.dotnet.threads.count29 ± (29 - 29)29 ± (29 - 29)-0.0%
.NET 6 - Baseline
process.internal_duration_ms192.10 ± (191.74 - 192.46) ms191.27 ± (191.00 - 191.55) ms-0.4%
process.time_to_main_ms70.20 ± (70.01 - 70.38) ms69.68 ± (69.54 - 69.82) ms-0.7%
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed16.16 ± (16.04 - 16.28) MB16.09 ± (15.94 - 16.24) MB-0.4%
runtime.dotnet.threads.count19 ± (19 - 19)18 ± (18 - 18)-3.4%
.NET 6 - Bailout
process.internal_duration_ms190.71 ± (190.42 - 191.00) ms189.86 ± (189.64 - 190.08) ms-0.4%
process.time_to_main_ms70.74 ± (70.63 - 70.85) ms70.42 ± (70.34 - 70.51) ms-0.4%
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed16.03 ± (15.88 - 16.18) MB15.70 ± (15.53 - 15.87) MB-2.0%
runtime.dotnet.threads.count19 ± (19 - 19)19 ± (19 - 19)-1.1%
.NET 6 - CallTarget+Inlining+NGEN
process.internal_duration_ms409.80 ± (406.92 - 412.67) ms408.51 ± (405.45 - 411.58) ms-0.3%
process.time_to_main_ms487.42 ± (486.86 - 487.98) ms485.77 ± (485.23 - 486.31) ms-0.3%
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed62.40 ± (62.27 - 62.54) MB62.10 ± (61.95 - 62.24) MB-0.5%
runtime.dotnet.threads.count29 ± (29 - 30)29 ± (29 - 30)+0.0%✅⬆️
.NET 8 - Baseline
process.internal_duration_ms189.36 ± (189.03 - 189.69) ms190.04 ± (189.59 - 190.50) ms+0.4%✅⬆️
process.time_to_main_ms69.26 ± (69.10 - 69.43) ms69.50 ± (69.33 - 69.67) ms+0.3%✅⬆️
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed11.81 ± (11.78 - 11.83) MB11.71 ± (11.69 - 11.74) MB-0.8%
runtime.dotnet.threads.count18 ± (18 - 18)18 ± (18 - 18)+0.2%✅⬆️
.NET 8 - Bailout
process.internal_duration_ms188.42 ± (188.14 - 188.70) ms191.27 ± (190.83 - 191.72) ms+1.5%✅⬆️
process.time_to_main_ms70.29 ± (70.21 - 70.38) ms70.93 ± (70.75 - 71.10) ms+0.9%✅⬆️
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed11.89 ± (11.84 - 11.94) MB11.78 ± (11.74 - 11.81) MB-0.9%
runtime.dotnet.threads.count19 ± (19 - 19)19 ± (19 - 19)+0.5%✅⬆️
.NET 8 - CallTarget+Inlining+NGEN
process.internal_duration_ms360.10 ± (358.56 - 361.63) ms357.25 ± (355.77 - 358.72) ms-0.8%
process.time_to_main_ms465.13 ± (464.41 - 465.85) ms460.00 ± (459.39 - 460.60) ms-1.1%
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed50.32 ± (50.27 - 50.36) MB50.46 ± (50.42 - 50.49) MB+0.3%✅⬆️
runtime.dotnet.threads.count29 ± (29 - 29)29 ± (29 - 29)+0.4%✅⬆️
Comparison explanation

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

Duration charts
FakeDbCommand (.NET Framework 4.8)
gantt
    title Execution time (ms) FakeDbCommand (.NET Framework 4.8)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (7780) - mean (68ms)  : 67, 70
    master - mean (68ms)  : 67, 70

    section Bailout
    This PR (7780) - mean (72ms)  : 70, 73
    master - mean (72ms)  : 71, 73

    section CallTarget+Inlining+NGEN
    This PR (7780) - mean (1,046ms)  : 1003, 1089
    master - mean (1,047ms)  : 1010, 1083

Loading
FakeDbCommand (.NET Core 3.1)
gantt
    title Execution time (ms) FakeDbCommand (.NET Core 3.1)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (7780) - mean (106ms)  : 103, 110
    master - mean (107ms)  : 104, 109

    section Bailout
    This PR (7780) - mean (107ms)  : 105, 108
    master - mean (107ms)  : 106, 109

    section CallTarget+Inlining+NGEN
    This PR (7780) - mean (747ms)  : 722, 771
    master - mean (759ms)  : 727, 790

Loading
FakeDbCommand (.NET 6)
gantt
    title Execution time (ms) FakeDbCommand (.NET 6)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (7780) - mean (94ms)  : 92, 95
    master - mean (94ms)  : 91, 97

    section Bailout
    This PR (7780) - mean (94ms)  : 93, 95
    master - mean (95ms)  : 94, 96

    section CallTarget+Inlining+NGEN
    This PR (7780) - mean (716ms)  : 671, 762
    master - mean (711ms)  : 674, 748

Loading
FakeDbCommand (.NET 8)
gantt
    title Execution time (ms) FakeDbCommand (.NET 8)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (7780) - mean (92ms)  : 90, 94
    master - mean (93ms)  : 91, 95

    section Bailout
    This PR (7780) - mean (93ms)  : 91, 94
    master - mean (93ms)  : 92, 95

    section CallTarget+Inlining+NGEN
    This PR (7780) - mean (662ms)  : 645, 678
    master - mean (664ms)  : 649, 678

Loading
HttpMessageHandler (.NET Framework 4.8)
gantt
    title Execution time (ms) HttpMessageHandler (.NET Framework 4.8)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (7780) - mean (192ms)  : 188, 196
    master - mean (193ms)  : 189, 197

    section Bailout
    This PR (7780) - mean (196ms)  : 193, 199
    master - mean (196ms)  : 193, 198

    section CallTarget+Inlining+NGEN
    This PR (7780) - mean (1,162ms)  : 1099, 1225
    master - mean (1,172ms)  : 1094, 1250

Loading
HttpMessageHandler (.NET Core 3.1)
gantt
    title Execution time (ms) HttpMessageHandler (.NET Core 3.1)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (7780) - mean (277ms)  : 272, 281
    master - mean (278ms)  : 272, 283

    section Bailout
    This PR (7780) - mean (277ms)  : 273, 282
    master - mean (278ms)  : 272, 284

    section CallTarget+Inlining+NGEN
    This PR (7780) - mean (941ms)  : 908, 974
    master - mean (954ms)  : 915, 992

Loading
HttpMessageHandler (.NET 6)
gantt
    title Execution time (ms) HttpMessageHandler (.NET 6)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (7780) - mean (269ms)  : 265, 273
    master - mean (270ms)  : 265, 276

    section Bailout
    This PR (7780) - mean (268ms)  : 266, 271
    master - mean (270ms)  : 266, 273

    section CallTarget+Inlining+NGEN
    This PR (7780) - mean (928ms)  : 869, 987
    master - mean (933ms)  : 885, 980

Loading
HttpMessageHandler (.NET 8)
gantt
    title Execution time (ms) HttpMessageHandler (.NET 8)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (7780) - mean (269ms)  : 263, 275
    master - mean (268ms)  : 264, 273

    section Bailout
    This PR (7780) - mean (271ms)  : 265, 278
    master - mean (268ms)  : 265, 272

    section CallTarget+Inlining+NGEN
    This PR (7780) - mean (849ms)  : 831, 866
    master - mean (858ms)  : 839, 876

Loading

@datadog-datadog-prod-us1

This comment has been minimized.

@pr-commenter
Copy link

pr-commenter bot commented Nov 5, 2025

Benchmarks

Benchmarks Report for benchmark platform 🐌

Benchmarks for #7780 compared to master:

  • 2 benchmarks are faster, with geometric mean 1.179
  • 1 benchmarks are slower, with geometric mean 2.110
  • 7 benchmarks have fewer allocations
  • 5 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 ✔️ More allocations ⚠️

More allocations ⚠️ in #7780

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.ActivityBenchmark.StartStopWithChild‑netcoreapp3.1 5.69 KB 5.72 KB 29 B 0.51%

Fewer allocations 🎉 in #7780

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.ActivityBenchmark.StartStopWithChild‑net472 6.09 KB 6 KB -86 B -1.41%

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master StartStopWithChild net6.0 10.4μs 58.2ns 368ns 0 0 0 5.5 KB
master StartStopWithChild netcoreapp3.1 15.2μs 55.5ns 215ns 0 0 0 5.69 KB
master StartStopWithChild net472 21.6μs 112ns 595ns 0.885 0.221 0 6.09 KB
#7780 StartStopWithChild net6.0 10.6μs 41.5ns 155ns 0 0 0 5.5 KB
#7780 StartStopWithChild netcoreapp3.1 13.9μs 67.4ns 286ns 0 0 0 5.72 KB
#7780 StartStopWithChild net472 22.4μs 122ns 712ns 1.06 0.424 0.106 6 KB
Benchmarks.Trace.AgentWriterBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master WriteAndFlushEnrichedTraces net6.0 945μs 73.5ns 255ns 0 0 0 2.71 KB
master WriteAndFlushEnrichedTraces netcoreapp3.1 1.03ms 172ns 643ns 0 0 0 2.7 KB
master WriteAndFlushEnrichedTraces net472 1.22ms 68.2ns 255ns 0 0 0 3.31 KB
#7780 WriteAndFlushEnrichedTraces net6.0 919μs 165ns 618ns 0 0 0 2.71 KB
#7780 WriteAndFlushEnrichedTraces netcoreapp3.1 1.05ms 443ns 1.72μs 0 0 0 2.7 KB
#7780 WriteAndFlushEnrichedTraces net472 1.19ms 209ns 811ns 0 0 0 3.31 KB
Benchmarks.Trace.Asm.AppSecBodyBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master AllCycleSimpleBody net6.0 1.09μs 5.52ns 25.3ns 0 0 0 1.22 KB
master AllCycleSimpleBody netcoreapp3.1 1.5μs 8.34ns 46.4ns 0 0 0 1.2 KB
master AllCycleSimpleBody net472 1.06μs 0.289ns 1.04ns 0.191 0 0 1.23 KB
master AllCycleMoreComplexBody net6.0 6.99μs 36.5ns 190ns 0 0 0 4.72 KB
master AllCycleMoreComplexBody netcoreapp3.1 10.1μs 18.6ns 72.2ns 0 0 0 4.62 KB
master AllCycleMoreComplexBody net472 7.59μs 2.32ns 8.98ns 0.722 0 0 4.74 KB
master ObjectExtractorSimpleBody net6.0 316ns 0.143ns 0.553ns 0 0 0 280 B
master ObjectExtractorSimpleBody netcoreapp3.1 399ns 1.91ns 7.88ns 0 0 0 272 B
master ObjectExtractorSimpleBody net472 316ns 1.5ns 6.02ns 0.0444 0 0 281 B
master ObjectExtractorMoreComplexBody net6.0 6.36μs 30.4ns 118ns 0 0 0 3.78 KB
master ObjectExtractorMoreComplexBody netcoreapp3.1 7.91μs 38ns 152ns 0 0 0 3.69 KB
master ObjectExtractorMoreComplexBody net472 6.71μs 4.63ns 17.9ns 0.572 0 0 3.8 KB
#7780 AllCycleSimpleBody net6.0 1.08μs 5.57ns 26.1ns 0 0 0 1.22 KB
#7780 AllCycleSimpleBody netcoreapp3.1 1.44μs 7.25ns 32.4ns 0 0 0 1.2 KB
#7780 AllCycleSimpleBody net472 1.05μs 3.01ns 11.7ns 0.193 0 0 1.23 KB
#7780 AllCycleMoreComplexBody net6.0 7.14μs 32.9ns 127ns 0 0 0 4.72 KB
#7780 AllCycleMoreComplexBody netcoreapp3.1 9.25μs 43.8ns 181ns 0 0 0 4.62 KB
#7780 AllCycleMoreComplexBody net472 7.79μs 5.53ns 21.4ns 0.738 0 0 4.74 KB
#7780 ObjectExtractorSimpleBody net6.0 319ns 1.68ns 8.41ns 0 0 0 280 B
#7780 ObjectExtractorSimpleBody netcoreapp3.1 397ns 2.15ns 12ns 0 0 0 272 B
#7780 ObjectExtractorSimpleBody net472 309ns 0.255ns 0.987ns 0.0431 0 0 281 B
#7780 ObjectExtractorMoreComplexBody net6.0 6.32μs 25.6ns 99.1ns 0 0 0 3.78 KB
#7780 ObjectExtractorMoreComplexBody netcoreapp3.1 7.92μs 7.93ns 30.7ns 0 0 0 3.69 KB
#7780 ObjectExtractorMoreComplexBody net472 6.89μs 9.15ns 35.4ns 0.583 0 0 3.8 KB
Benchmarks.Trace.Asm.AppSecEncoderBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master EncodeArgs net6.0 77.3μs 29.5ns 110ns 0 0 0 32.4 KB
master EncodeArgs netcoreapp3.1 97.5μs 222ns 859ns 0 0 0 32.4 KB
master EncodeArgs net472 112μs 6.17ns 21.4ns 5.04 0 0 32.51 KB
master EncodeLegacyArgs net6.0 141μs 369ns 1.43μs 0 0 0 2.15 KB
master EncodeLegacyArgs netcoreapp3.1 201μs 254ns 983ns 0 0 0 2.14 KB
master EncodeLegacyArgs net472 263μs 17.6ns 65.7ns 0 0 0 2.16 KB
#7780 EncodeArgs net6.0 76.7μs 361ns 1.45μs 0 0 0 32.4 KB
#7780 EncodeArgs netcoreapp3.1 97.2μs 33.9ns 127ns 0 0 0 32.4 KB
#7780 EncodeArgs net472 110μs 49.6ns 192ns 4.93 0 0 32.5 KB
#7780 EncodeLegacyArgs net6.0 146μs 17.9ns 67.1ns 0 0 0 2.14 KB
#7780 EncodeLegacyArgs netcoreapp3.1 199μs 262ns 909ns 0 0 0 2.15 KB
#7780 EncodeLegacyArgs net472 266μs 137ns 531ns 0 0 0 2.16 KB
Benchmarks.Trace.Asm.AppSecWafBenchmark - Slower ⚠️ Same allocations ✔️

Slower ⚠️ in #7780

Benchmark diff/base Base Median (ns) Diff Median (ns) Modality
Benchmarks.Trace.Asm.AppSecWafBenchmark.RunWafRealisticBenchmark‑netcoreapp3.1 2.110 408,813.12 862,794.90

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master RunWafRealisticBenchmark net6.0 392μs 134ns 521ns 0 0 0 4.56 KB
master RunWafRealisticBenchmark netcoreapp3.1 409μs 127ns 458ns 0 0 0 4.48 KB
master RunWafRealisticBenchmark net472 432μs 51.1ns 184ns 0 0 0 4.66 KB
master RunWafRealisticBenchmarkWithAttack net6.0 285μs 19.6ns 70.6ns 0 0 0 2.24 KB
master RunWafRealisticBenchmarkWithAttack netcoreapp3.1 683μs 11.9μs 119μs 0 0 0 2.22 KB
master RunWafRealisticBenchmarkWithAttack net472 310μs 29ns 112ns 0 0 0 2.29 KB
#7780 RunWafRealisticBenchmark net6.0 398μs 148ns 572ns 0 0 0 4.55 KB
#7780 RunWafRealisticBenchmark netcoreapp3.1 855μs 5.64μs 54.1μs 0 0 0 4.48 KB
#7780 RunWafRealisticBenchmark net472 432μs 69.8ns 270ns 0 0 0 4.66 KB
#7780 RunWafRealisticBenchmarkWithAttack net6.0 286μs 55.2ns 207ns 0 0 0 2.24 KB
#7780 RunWafRealisticBenchmarkWithAttack netcoreapp3.1 709μs 3.33μs 13.7μs 0 0 0 2.22 KB
#7780 RunWafRealisticBenchmarkWithAttack net472 313μs 32.5ns 122ns 0 0 0 2.29 KB
Benchmarks.Trace.AspNetCoreBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master SendRequest net6.0 61.8μs 57.4ns 207ns 0 0 0 14.52 KB
master SendRequest netcoreapp3.1 71.3μs 177ns 640ns 0 0 0 17.42 KB
master SendRequest net472 0.00521ns 0.00213ns 0.00823ns 0 0 0 0 b
#7780 SendRequest net6.0 61.3μs 58.3ns 226ns 0 0 0 14.52 KB
#7780 SendRequest netcoreapp3.1 71.5μs 132ns 477ns 0 0 0 17.42 KB
#7780 SendRequest net472 0.00638ns 0.0017ns 0.00657ns 0 0 0 0 b
Benchmarks.Trace.CharSliceBenchmark - Same speed ✔️ More allocations ⚠️

More allocations ⚠️ in #7780

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.CharSliceBenchmark.OptimizedCharSliceWithPool‑net6.0 3 B 5 B 2 B 66.67%

Fewer allocations 🎉 in #7780

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.CharSliceBenchmark.OptimizedCharSliceWithPool‑net472 48 B 47 B -1 B -2.08%
Benchmarks.Trace.CharSliceBenchmark.OptimizedCharSlice‑net6.0 4 B 2 B -2 B -50.00%

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master OriginalCharSlice net6.0 1.94ms 476ns 1.72μs 0 0 0 640.01 KB
master OriginalCharSlice netcoreapp3.1 2.07ms 2.89μs 10μs 0 0 0 640 KB
master OriginalCharSlice net472 2.62ms 187ns 674ns 100 0 0 641.95 KB
master OptimizedCharSlice net6.0 1.4ms 119ns 445ns 0 0 0 4 B
master OptimizedCharSlice netcoreapp3.1 1.77ms 340ns 1.32μs 0 0 0 1 B
master OptimizedCharSlice net472 1.9ms 290ns 1.12μs 0 0 0 73 B
master OptimizedCharSliceWithPool net6.0 931μs 39.9ns 155ns 0 0 0 3 B
master OptimizedCharSliceWithPool netcoreapp3.1 800μs 99.7ns 386ns 0 0 0 0 b
master OptimizedCharSliceWithPool net472 1.16ms 107ns 416ns 0 0 0 48 B
#7780 OriginalCharSlice net6.0 1.95ms 772ns 2.89μs 0 0 0 640.01 KB
#7780 OriginalCharSlice netcoreapp3.1 2.17ms 7.35μs 27.5μs 0 0 0 640 KB
#7780 OriginalCharSlice net472 2.64ms 283ns 1.02μs 100 0 0 641.95 KB
#7780 OptimizedCharSlice net6.0 1.34ms 207ns 801ns 0 0 0 2 B
#7780 OptimizedCharSlice netcoreapp3.1 1.76ms 346ns 1.34μs 0 0 0 1 B
#7780 OptimizedCharSlice net472 2.03ms 844ns 3.27μs 0 0 0 73 B
#7780 OptimizedCharSliceWithPool net6.0 866μs 15.6ns 60.3ns 0 0 0 5 B
#7780 OptimizedCharSliceWithPool netcoreapp3.1 852μs 32ns 124ns 0 0 0 0 b
#7780 OptimizedCharSliceWithPool net472 1.15ms 82.6ns 309ns 0 0 0 47 B
Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark - Faster 🎉 Fewer allocations 🎉

Faster 🎉 in #7780

Benchmark base/diff Base Median (ns) Diff Median (ns) Modality
Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark.WriteAndFlushEnrichedTraces‑net6.0 1.139 747,589.17 656,295.83

Fewer allocations 🎉 in #7780

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark.WriteAndFlushEnrichedTraces‑net472 56.11 KB 55.48 KB -632 B -1.13%

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master WriteAndFlushEnrichedTraces net6.0 748μs 782ns 3.03μs 0 0 0 41.8 KB
master WriteAndFlushEnrichedTraces netcoreapp3.1 715μs 2.18μs 8.17μs 0 0 0 41.88 KB
master WriteAndFlushEnrichedTraces net472 956μs 4.43μs 17.1μs 4.46 0 0 56.11 KB
#7780 WriteAndFlushEnrichedTraces net6.0 653μs 1.7μs 6.8μs 0 0 0 41.75 KB
#7780 WriteAndFlushEnrichedTraces netcoreapp3.1 755μs 4.36μs 37.3μs 0 0 0 41.72 KB
#7780 WriteAndFlushEnrichedTraces net472 914μs 4.26μs 16μs 4.46 0 0 55.48 KB
Benchmarks.Trace.DbCommandBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master ExecuteNonQuery net6.0 1.88μs 8.97ns 38ns 0 0 0 1.02 KB
master ExecuteNonQuery netcoreapp3.1 2.68μs 7.2ns 27.9ns 0 0 0 1.02 KB
master ExecuteNonQuery net472 2.91μs 2.98ns 11.6ns 0.146 0.0146 0 987 B
#7780 ExecuteNonQuery net6.0 1.86μs 9.06ns 38.4ns 0 0 0 1.02 KB
#7780 ExecuteNonQuery netcoreapp3.1 2.74μs 10.9ns 42ns 0 0 0 1.02 KB
#7780 ExecuteNonQuery net472 2.95μs 4.56ns 17.7ns 0.146 0.0146 0 987 B
Benchmarks.Trace.ElasticsearchBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master CallElasticsearch net6.0 1.7μs 8.23ns 35.9ns 0 0 0 1.03 KB
master CallElasticsearch netcoreapp3.1 2.22μs 11.3ns 49.1ns 0 0 0 1.03 KB
master CallElasticsearch net472 3.57μs 2.47ns 9.24ns 0.162 0 0 1.04 KB
master CallElasticsearchAsync net6.0 1.91μs 9.4ns 39.9ns 0 0 0 1.01 KB
master CallElasticsearchAsync netcoreapp3.1 2.33μs 6.48ns 25.1ns 0 0 0 1.08 KB
master CallElasticsearchAsync net472 3.64μs 3.14ns 11.7ns 0.161 0 0 1.1 KB
#7780 CallElasticsearch net6.0 1.68μs 7.35ns 32ns 0 0 0 1.03 KB
#7780 CallElasticsearch netcoreapp3.1 2.2μs 10.7ns 43ns 0 0 0 1.03 KB
#7780 CallElasticsearch net472 3.52μs 4.99ns 19.3ns 0.157 0 0 1.04 KB
#7780 CallElasticsearchAsync net6.0 1.83μs 0.933ns 3.61ns 0 0 0 1.01 KB
#7780 CallElasticsearchAsync netcoreapp3.1 2.43μs 11.9ns 46.3ns 0 0 0 1.08 KB
#7780 CallElasticsearchAsync net472 3.66μs 3.95ns 15.3ns 0.164 0 0 1.1 KB
Benchmarks.Trace.GraphQLBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master ExecuteAsync net6.0 1.86μs 1.98ns 7.66ns 0 0 0 952 B
master ExecuteAsync netcoreapp3.1 2.47μs 6.14ns 23.8ns 0 0 0 952 B
master ExecuteAsync net472 2.62μs 2.41ns 9.34ns 0.145 0 0 915 B
#7780 ExecuteAsync net6.0 1.91μs 2.34ns 9.06ns 0 0 0 952 B
#7780 ExecuteAsync netcoreapp3.1 2.38μs 11.4ns 45.6ns 0 0 0 952 B
#7780 ExecuteAsync net472 2.59μs 3.48ns 13.5ns 0.141 0 0 915 B
Benchmarks.Trace.HttpClientBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master SendAsync net6.0 6.93μs 11.6ns 43.5ns 0 0 0 2.36 KB
master SendAsync netcoreapp3.1 8.53μs 23.2ns 89.9ns 0 0 0 2.9 KB
master SendAsync net472 12.5μs 9.78ns 37.9ns 0.498 0 0 3.18 KB
#7780 SendAsync net6.0 7.05μs 10.3ns 39.9ns 0 0 0 2.36 KB
#7780 SendAsync netcoreapp3.1 8.51μs 10.5ns 40.5ns 0 0 0 2.9 KB
#7780 SendAsync net472 11.9μs 4.34ns 16.2ns 0.474 0 0 3.18 KB
Benchmarks.Trace.Iast.StringAspectsBenchmark - Faster 🎉 More allocations ⚠️

Faster 🎉 in #7780

Benchmark base/diff Base Median (ns) Diff Median (ns) Modality
Benchmarks.Trace.Iast.StringAspectsBenchmark.StringConcatBenchmark‑netcoreapp3.1 1.220 62,500.00 51,250.00 bimodal

More allocations ⚠️ in #7780

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.Iast.StringAspectsBenchmark.StringConcatAspectBenchmark‑net472 286.72 KB 353.73 KB 67.01 KB 23.37%
Benchmarks.Trace.Iast.StringAspectsBenchmark.StringConcatBenchmark‑net472 57.34 KB 65.54 KB 8.19 KB 14.29%
Benchmarks.Trace.Iast.StringAspectsBenchmark.StringConcatBenchmark‑net6.0 43.14 KB 44.04 KB 896 B 2.08%

Fewer allocations 🎉 in #7780

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.Iast.StringAspectsBenchmark.StringConcatBenchmark‑netcoreapp3.1 42.9 KB 42.64 KB -256 B -0.60%
Benchmarks.Trace.Iast.StringAspectsBenchmark.StringConcatAspectBenchmark‑net6.0 278.1 KB 256.88 KB -21.22 KB -7.63%
Benchmarks.Trace.Iast.StringAspectsBenchmark.StringConcatAspectBenchmark‑netcoreapp3.1 278.73 KB 255.66 KB -23.07 KB -8.28%

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master StringConcatBenchmark net6.0 48.6μs 205ns 709ns 0 0 0 43.14 KB
master StringConcatBenchmark netcoreapp3.1 61.3μs 776ns 7.68μs 0 0 0 42.9 KB
master StringConcatBenchmark net472 56.8μs 112ns 403ns 0 0 0 57.34 KB
master StringConcatAspectBenchmark net6.0 491μs 2.37μs 10.3μs 0 0 0 278.1 KB
master StringConcatAspectBenchmark netcoreapp3.1 546μs 2.15μs 8.31μs 0 0 0 278.73 KB
master StringConcatAspectBenchmark net472 399μs 1.41μs 5.45μs 0 0 0 286.72 KB
#7780 StringConcatBenchmark net6.0 52.3μs 956ns 9.51μs 0 0 0 44.04 KB
#7780 StringConcatBenchmark netcoreapp3.1 51.8μs 304ns 2.63μs 0 0 0 42.64 KB
#7780 StringConcatBenchmark net472 57.6μs 122ns 421ns 0 0 0 65.54 KB
#7780 StringConcatAspectBenchmark net6.0 440μs 2.04μs 7.92μs 0 0 0 256.88 KB
#7780 StringConcatAspectBenchmark netcoreapp3.1 495μs 2.25μs 8.71μs 0 0 0 255.66 KB
#7780 StringConcatAspectBenchmark net472 403μs 2.15μs 11.6μs 0 0 0 353.73 KB
Benchmarks.Trace.ILoggerBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master EnrichedLog net6.0 2.65μs 1.24ns 4.46ns 0 0 0 1.7 KB
master EnrichedLog netcoreapp3.1 3.64μs 13.7ns 52.9ns 0 0 0 1.7 KB
master EnrichedLog net472 4.19μs 4.74ns 18.4ns 0.252 0 0 1.64 KB
#7780 EnrichedLog net6.0 2.66μs 2.29ns 8.58ns 0 0 0 1.7 KB
#7780 EnrichedLog netcoreapp3.1 3.62μs 7.03ns 27.2ns 0 0 0 1.7 KB
#7780 EnrichedLog net472 4.01μs 1.98ns 7.69ns 0.241 0 0 1.64 KB
Benchmarks.Trace.Log4netBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master EnrichedLog net6.0 131μs 276ns 1.03μs 0 0 0 4.31 KB
master EnrichedLog netcoreapp3.1 134μs 720ns 3.88μs 0 0 0 4.31 KB
master EnrichedLog net472 169μs 142ns 549ns 0 0 0 4.52 KB
#7780 EnrichedLog net6.0 121μs 51.1ns 198ns 0 0 0 4.31 KB
#7780 EnrichedLog netcoreapp3.1 126μs 217ns 811ns 0 0 0 4.31 KB
#7780 EnrichedLog net472 167μs 224ns 809ns 0 0 0 4.52 KB
Benchmarks.Trace.NLogBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master EnrichedLog net6.0 4.9μs 6.17ns 23.1ns 0 0 0 2.26 KB
master EnrichedLog netcoreapp3.1 6.85μs 17.9ns 69.1ns 0 0 0 2.26 KB
master EnrichedLog net472 7.57μs 7.95ns 30.8ns 0.301 0 0 2.08 KB
#7780 EnrichedLog net6.0 5.03μs 7.64ns 29.6ns 0 0 0 2.26 KB
#7780 EnrichedLog netcoreapp3.1 7μs 24.8ns 96ns 0 0 0 2.26 KB
#7780 EnrichedLog net472 7.58μs 9.63ns 37.3ns 0.301 0 0 2.08 KB
Benchmarks.Trace.RedisBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master SendReceive net6.0 2.01μs 2.52ns 9.76ns 0 0 0 1.2 KB
master SendReceive netcoreapp3.1 2.7μs 6.98ns 27ns 0 0 0 1.2 KB
master SendReceive net472 3.04μs 1.86ns 6.95ns 0.182 0 0 1.2 KB
#7780 SendReceive net6.0 2.02μs 1.22ns 4.74ns 0 0 0 1.2 KB
#7780 SendReceive netcoreapp3.1 2.6μs 13.1ns 58.4ns 0 0 0 1.2 KB
#7780 SendReceive net472 3.01μs 1.31ns 5.06ns 0.179 0 0 1.2 KB
Benchmarks.Trace.SerilogBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master EnrichedLog net6.0 4.37μs 8.04ns 30.1ns 0 0 0 1.58 KB
master EnrichedLog netcoreapp3.1 5.65μs 13.7ns 49.3ns 0 0 0 1.63 KB
master EnrichedLog net472 6.73μs 8.19ns 31.7ns 0.302 0 0 2.03 KB
#7780 EnrichedLog net6.0 4.29μs 9.97ns 38.6ns 0 0 0 1.58 KB
#7780 EnrichedLog netcoreapp3.1 5.68μs 20.2ns 78.1ns 0 0 0 1.63 KB
#7780 EnrichedLog net472 6.79μs 8.55ns 33.1ns 0.305 0 0 2.03 KB
Benchmarks.Trace.SpanBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master StartFinishSpan net6.0 782ns 0.392ns 1.52ns 0 0 0 576 B
master StartFinishSpan netcoreapp3.1 952ns 5.02ns 26.1ns 0 0 0 576 B
master StartFinishSpan net472 929ns 0.577ns 2.23ns 0.0888 0 0 578 B
master StartFinishScope net6.0 935ns 3.34ns 12.9ns 0 0 0 696 B
master StartFinishScope netcoreapp3.1 1.22μs 5.91ns 25.7ns 0 0 0 696 B
master StartFinishScope net472 1.11μs 0.721ns 2.79ns 0.0993 0 0 658 B
#7780 StartFinishSpan net6.0 790ns 3.8ns 15.2ns 0 0 0 576 B
#7780 StartFinishSpan netcoreapp3.1 955ns 5.23ns 26.1ns 0 0 0 577 B
#7780 StartFinishSpan net472 928ns 0.801ns 3.1ns 0.0879 0 0 578 B
#7780 StartFinishScope net6.0 918ns 4.94ns 27.1ns 0 0 0 696 B
#7780 StartFinishScope netcoreapp3.1 1.18μs 5.9ns 25.7ns 0 0 0 696 B
#7780 StartFinishScope net472 1.11μs 1.12ns 4.34ns 0.1 0 0 658 B
Benchmarks.Trace.TraceAnnotationsBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master RunOnMethodBegin net6.0 1.06μs 5.42ns 24.2ns 0 0 0 696 B
master RunOnMethodBegin netcoreapp3.1 1.43μs 2.28ns 8.83ns 0 0 0 696 B
master RunOnMethodBegin net472 1.47μs 0.913ns 3.54ns 0.103 0 0 658 B
#7780 RunOnMethodBegin net6.0 1.05μs 5.44ns 25.5ns 0 0 0 696 B
#7780 RunOnMethodBegin netcoreapp3.1 1.42μs 7.38ns 34.6ns 0 0 0 696 B
#7780 RunOnMethodBegin net472 1.49μs 1.93ns 7.46ns 0.0973 0 0 658 B

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants