[Profiler] Provide the thread id that blocked another thread#5959
Conversation
Datadog ReportBranch report: ✅ 0 Failed, 362436 Passed, 2328 Skipped, 15h 56m 53.4s Total Time ⌛ Performance Regressions vs Default Branch (1)
|
Execution-Time Benchmarks Report ⏱️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). |
f4cfa4f to
5551ad1
Compare
Benchmarks Report for tracer 🐌Benchmarks for #5959 compared to master:
The following thresholds were used for comparing the benchmark speeds:
Allocation changes below 0.5% are ignored. Benchmark detailsBenchmarks.Trace.ActivityBenchmark - Same speed ✔️ Same allocations ✔️Raw results
Benchmarks.Trace.AgentWriterBenchmark - Same speed ✔️ Same allocations ✔️Raw results
Benchmarks.Trace.AspNetCoreBenchmark - Same speed ✔️ Same allocations ✔️Raw results
Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark - Same speed ✔️ Same allocations ✔️Raw results
Benchmarks.Trace.DbCommandBenchmark - Same speed ✔️ Same allocations ✔️Raw results
Benchmarks.Trace.ElasticsearchBenchmark - Slower
|
| Benchmark | diff/base | Base Median (ns) | Diff Median (ns) | Modality |
|---|---|---|---|---|
| Benchmarks.Trace.ElasticsearchBenchmark.CallElasticsearchAsync‑net6.0 | 1.125 | 1,204.81 | 1,355.79 |
Raw results
| Branch | Method | Toolchain | Mean | StdError | StdDev | Gen 0 | Gen 1 | Gen 2 | Allocated |
|---|---|---|---|---|---|---|---|---|---|
| master | CallElasticsearch |
net6.0 | 1.26μs | 0.869ns | 3.25ns | 0.0136 | 0 | 0 | 976 B |
| master | CallElasticsearch |
netcoreapp3.1 | 1.59μs | 0.634ns | 2.37ns | 0.0134 | 0 | 0 | 976 B |
| master | CallElasticsearch |
net472 | 2.53μs | 1.04ns | 3.91ns | 0.157 | 0 | 0 | 995 B |
| master | CallElasticsearchAsync |
net6.0 | 1.2μs | 1.24ns | 4.82ns | 0.0133 | 0 | 0 | 952 B |
| master | CallElasticsearchAsync |
netcoreapp3.1 | 1.67μs | 0.639ns | 2.39ns | 0.0133 | 0 | 0 | 1.02 KB |
| master | CallElasticsearchAsync |
net472 | 2.56μs | 1.61ns | 6.03ns | 0.166 | 0 | 0 | 1.05 KB |
| #5959 | CallElasticsearch |
net6.0 | 1.19μs | 1.27ns | 4.92ns | 0.0137 | 0 | 0 | 976 B |
| #5959 | CallElasticsearch |
netcoreapp3.1 | 1.59μs | 4.32ns | 16.7ns | 0.0134 | 0 | 0 | 976 B |
| #5959 | CallElasticsearch |
net472 | 2.45μs | 1.47ns | 5.71ns | 0.158 | 0 | 0 | 995 B |
| #5959 | CallElasticsearchAsync |
net6.0 | 1.36μs | 0.577ns | 2.23ns | 0.0132 | 0 | 0 | 952 B |
| #5959 | CallElasticsearchAsync |
netcoreapp3.1 | 1.57μs | 0.558ns | 2.09ns | 0.0135 | 0 | 0 | 1.02 KB |
| #5959 | CallElasticsearchAsync |
net472 | 2.47μs | 1.63ns | 6.08ns | 0.166 | 0 | 0 | 1.05 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.16μs | 0.568ns | 2.2ns | 0.0133 | 0 | 0 | 952 B |
| master | ExecuteAsync |
netcoreapp3.1 | 1.58μs | 1.29ns | 4.83ns | 0.0125 | 0 | 0 | 952 B |
| master | ExecuteAsync |
net472 | 1.81μs | 0.756ns | 2.93ns | 0.145 | 0 | 0 | 915 B |
| #5959 | ExecuteAsync |
net6.0 | 1.25μs | 2.66ns | 10.3ns | 0.0134 | 0 | 0 | 952 B |
| #5959 | ExecuteAsync |
netcoreapp3.1 | 1.72μs | 0.916ns | 3.3ns | 0.0129 | 0 | 0 | 952 B |
| #5959 | ExecuteAsync |
net472 | 1.81μs | 1.25ns | 4.86ns | 0.145 | 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 | 4.09μs | 1.5ns | 5.63ns | 0.0307 | 0 | 0 | 2.22 KB |
| master | SendAsync |
netcoreapp3.1 | 5.21μs | 2.29ns | 8.87ns | 0.0364 | 0 | 0 | 2.76 KB |
| master | SendAsync |
net472 | 7.76μs | 2.74ns | 10.6ns | 0.498 | 0 | 0 | 3.15 KB |
| #5959 | SendAsync |
net6.0 | 4.04μs | 4.12ns | 14.9ns | 0.0303 | 0 | 0 | 2.22 KB |
| #5959 | SendAsync |
netcoreapp3.1 | 5.25μs | 2.98ns | 11.5ns | 0.0367 | 0 | 0 | 2.76 KB |
| #5959 | SendAsync |
net472 | 7.84μs | 2.45ns | 9.49ns | 0.499 | 0 | 0 | 3.15 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 | 1.52μs | 0.877ns | 3.4ns | 0.0229 | 0 | 0 | 1.64 KB |
| master | EnrichedLog |
netcoreapp3.1 | 2.32μs | 2.43ns | 9.1ns | 0.0219 | 0 | 0 | 1.64 KB |
| master | EnrichedLog |
net472 | 2.79μs | 1.91ns | 7.41ns | 0.25 | 0 | 0 | 1.57 KB |
| #5959 | EnrichedLog |
net6.0 | 1.47μs | 0.881ns | 3.3ns | 0.0228 | 0 | 0 | 1.64 KB |
| #5959 | EnrichedLog |
netcoreapp3.1 | 2.14μs | 1.9ns | 7.38ns | 0.0221 | 0 | 0 | 1.64 KB |
| #5959 | EnrichedLog |
net472 | 2.62μs | 2.42ns | 9.38ns | 0.249 | 0 | 0 | 1.57 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 | 113μs | 104ns | 389ns | 0.0568 | 0 | 0 | 4.28 KB |
| master | EnrichedLog |
netcoreapp3.1 | 120μs | 425ns | 1.53μs | 0 | 0 | 0 | 4.28 KB |
| master | EnrichedLog |
net472 | 148μs | 218ns | 815ns | 0.667 | 0.222 | 0 | 4.46 KB |
| #5959 | EnrichedLog |
net6.0 | 115μs | 289ns | 1.12μs | 0 | 0 | 0 | 4.28 KB |
| #5959 | EnrichedLog |
netcoreapp3.1 | 122μs | 126ns | 487ns | 0 | 0 | 0 | 4.28 KB |
| #5959 | EnrichedLog |
net472 | 150μs | 379ns | 1.47μs | 0.681 | 0.227 | 0 | 4.46 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 | 3.06μs | 1.08ns | 3.89ns | 0.0306 | 0 | 0 | 2.2 KB |
| master | EnrichedLog |
netcoreapp3.1 | 4.17μs | 3.12ns | 11.2ns | 0.0291 | 0 | 0 | 2.2 KB |
| master | EnrichedLog |
net472 | 4.87μs | 2.96ns | 11.1ns | 0.32 | 0 | 0 | 2.02 KB |
| #5959 | EnrichedLog |
net6.0 | 3.07μs | 1.08ns | 4.18ns | 0.0305 | 0 | 0 | 2.2 KB |
| #5959 | EnrichedLog |
netcoreapp3.1 | 4.22μs | 1.54ns | 5.78ns | 0.0295 | 0 | 0 | 2.2 KB |
| #5959 | EnrichedLog |
net472 | 4.89μs | 1.06ns | 4.12ns | 0.32 | 0 | 0 | 2.02 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 | 1.37μs | 1.09ns | 4.08ns | 0.0157 | 0 | 0 | 1.14 KB |
| master | SendReceive |
netcoreapp3.1 | 1.75μs | 0.826ns | 3.2ns | 0.0157 | 0 | 0 | 1.14 KB |
| master | SendReceive |
net472 | 2.12μs | 1.14ns | 4.42ns | 0.183 | 0 | 0 | 1.16 KB |
| #5959 | SendReceive |
net6.0 | 1.38μs | 0.814ns | 3.15ns | 0.0158 | 0 | 0 | 1.14 KB |
| #5959 | SendReceive |
netcoreapp3.1 | 1.81μs | 0.386ns | 1.39ns | 0.0154 | 0 | 0 | 1.14 KB |
| #5959 | SendReceive |
net472 | 2.16μs | 1.61ns | 6.22ns | 0.183 | 0 | 0 | 1.16 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 | 2.73μs | 3.94ns | 15.3ns | 0.0218 | 0 | 0 | 1.6 KB |
| master | EnrichedLog |
netcoreapp3.1 | 3.98μs | 1.24ns | 4.82ns | 0.0218 | 0 | 0 | 1.65 KB |
| master | EnrichedLog |
net472 | 4.29μs | 2.53ns | 9.82ns | 0.322 | 0 | 0 | 2.04 KB |
| #5959 | EnrichedLog |
net6.0 | 2.8μs | 1ns | 3.88ns | 0.0224 | 0 | 0 | 1.6 KB |
| #5959 | EnrichedLog |
netcoreapp3.1 | 3.97μs | 2.59ns | 10ns | 0.022 | 0 | 0 | 1.65 KB |
| #5959 | EnrichedLog |
net472 | 4.33μs | 1.45ns | 5.61ns | 0.323 | 0 | 0 | 2.04 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 | 400ns | 0.304ns | 1.18ns | 0.00802 | 0 | 0 | 576 B |
| master | StartFinishSpan |
netcoreapp3.1 | 607ns | 0.444ns | 1.72ns | 0.00789 | 0 | 0 | 576 B |
| master | StartFinishSpan |
net472 | 633ns | 0.405ns | 1.57ns | 0.0916 | 0 | 0 | 578 B |
| master | StartFinishScope |
net6.0 | 478ns | 0.375ns | 1.45ns | 0.00979 | 0 | 0 | 696 B |
| master | StartFinishScope |
netcoreapp3.1 | 774ns | 0.694ns | 2.6ns | 0.00932 | 0 | 0 | 696 B |
| master | StartFinishScope |
net472 | 774ns | 1.28ns | 4.97ns | 0.104 | 0 | 0 | 658 B |
| #5959 | StartFinishSpan |
net6.0 | 394ns | 0.334ns | 1.25ns | 0.0081 | 0 | 0 | 576 B |
| #5959 | StartFinishSpan |
netcoreapp3.1 | 549ns | 0.452ns | 1.75ns | 0.00771 | 0 | 0 | 576 B |
| #5959 | StartFinishSpan |
net472 | 584ns | 0.596ns | 2.31ns | 0.0916 | 0 | 0 | 578 B |
| #5959 | StartFinishScope |
net6.0 | 478ns | 0.564ns | 2.18ns | 0.0098 | 0 | 0 | 696 B |
| #5959 | StartFinishScope |
netcoreapp3.1 | 758ns | 0.845ns | 3.05ns | 0.00924 | 0 | 0 | 696 B |
| #5959 | StartFinishScope |
net472 | 752ns | 0.909ns | 3.52ns | 0.104 | 0 | 0 | 658 B |
Benchmarks.Trace.TraceAnnotationsBenchmark - Faster 🎉 Same allocations ✔️
Faster 🎉 in #5959
Benchmark
base/diff
Base Median (ns)
Diff Median (ns)
Modality
Benchmarks.Trace.TraceAnnotationsBenchmark.RunOnMethodBegin‑netcoreapp3.1
1.127
1,050.73
932.68
| Benchmark | base/diff | Base Median (ns) | Diff Median (ns) | Modality |
|---|---|---|---|---|
| Benchmarks.Trace.TraceAnnotationsBenchmark.RunOnMethodBegin‑netcoreapp3.1 | 1.127 | 1,050.73 | 932.68 |
Raw results
| Branch | Method | Toolchain | Mean | StdError | StdDev | Gen 0 | Gen 1 | Gen 2 | Allocated |
|---|---|---|---|---|---|---|---|---|---|
| master | RunOnMethodBegin |
net6.0 | 638ns | 0.489ns | 1.89ns | 0.00993 | 0 | 0 | 696 B |
| master | RunOnMethodBegin |
netcoreapp3.1 | 1.05μs | 0.533ns | 2.07ns | 0.00946 | 0 | 0 | 696 B |
| master | RunOnMethodBegin |
net472 | 1.03μs | 1.74ns | 6.72ns | 0.105 | 0 | 0 | 658 B |
| #5959 | RunOnMethodBegin |
net6.0 | 663ns | 0.452ns | 1.75ns | 0.00989 | 0 | 0 | 696 B |
| #5959 | RunOnMethodBegin |
netcoreapp3.1 | 932ns | 0.608ns | 2.35ns | 0.00935 | 0 | 0 | 696 B |
| #5959 | RunOnMethodBegin |
net472 | 1.14μs | 0.858ns | 3.21ns | 0.105 | 0 | 0 | 658 B |
5551ad1 to
0469c3b
Compare
0469c3b to
34254f1
Compare
34254f1 to
e723bbb
Compare
Summary of changes
Provides the thread id of that owns a lock object.
Reason for change
New feature.
Implementation details
The ContentionStart event contains information about the contented lock and the thread that owns it. Remember the OS Thread Id of the thread that owns the lock object and use it when creating a sample.
Test coverage
Add asserts on the existing tests.
Other details