Fix dd-octo-sts policy used in SLO checks#8179
Conversation
BenchmarksBenchmark execution time: 2026-02-09 14:17:38 Comparing candidate commit 2496597 in PR branch Found 4 performance improvements and 5 performance regressions! Performance is the same for 162 metrics, 21 unstable metrics. scenario:Benchmarks.Trace.AgentWriterBenchmark.WriteAndFlushEnrichedTraces net6.0
scenario:Benchmarks.Trace.AgentWriterBenchmark.WriteAndFlushEnrichedTraces netcoreapp3.1
scenario:Benchmarks.Trace.Asm.AppSecBodyBenchmark.AllCycleSimpleBody netcoreapp3.1
scenario:Benchmarks.Trace.Asm.AppSecBodyBenchmark.ObjectExtractorSimpleBody netcoreapp3.1
scenario:Benchmarks.Trace.Asm.AppSecEncoderBenchmark.EncodeLegacyArgs net6.0
scenario:Benchmarks.Trace.Asm.AppSecEncoderBenchmark.EncodeLegacyArgs netcoreapp3.1
scenario:Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark.WriteAndFlushEnrichedTraces netcoreapp3.1
scenario:Benchmarks.Trace.ElasticsearchBenchmark.CallElasticsearchAsync netcoreapp3.1
scenario:Benchmarks.Trace.SpanBenchmark.StartFinishTwoScopes net6.0
|
Execution-Time Benchmarks Report ⏱️Execution-time results for samples comparing This PR (8179) and master.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Metric | Master (Mean ± 95% CI) | Current (Mean ± 95% CI) | Change | Status |
|---|---|---|---|---|
| .NET Framework 4.8 - Baseline | ||||
| duration | 68.37 ± (68.33 - 68.52) ms | 77.16 ± (77.16 - 77.56) ms | +12.9% | ❌⬆️ |
| .NET Framework 4.8 - Bailout | ||||
| duration | 72.29 ± (72.20 - 72.47) ms | 81.54 ± (81.39 - 81.80) ms | +12.8% | ❌⬆️ |
| .NET Framework 4.8 - CallTarget+Inlining+NGEN | ||||
| duration | 1030.72 ± (1030.40 - 1036.17) ms | 1108.84 ± (1108.17 - 1114.76) ms | +7.6% | ❌⬆️ |
Full Metrics Comparison
FakeDbCommand
| Metric | Master (Mean ± 95% CI) | Current (Mean ± 95% CI) | Change | Status |
|---|---|---|---|---|
| .NET Framework 4.8 - Baseline | ||||
| duration | 68.37 ± (68.33 - 68.52) ms | 77.16 ± (77.16 - 77.56) ms | +12.9% | ❌⬆️ |
| .NET Framework 4.8 - Bailout | ||||
| duration | 72.29 ± (72.20 - 72.47) ms | 81.54 ± (81.39 - 81.80) ms | +12.8% | ❌⬆️ |
| .NET Framework 4.8 - CallTarget+Inlining+NGEN | ||||
| duration | 1030.72 ± (1030.40 - 1036.17) ms | 1108.84 ± (1108.17 - 1114.76) ms | +7.6% | ❌⬆️ |
| .NET Core 3.1 - Baseline | ||||
| process.internal_duration_ms | 22.52 ± (22.49 - 22.55) ms | 24.20 ± (24.14 - 24.26) ms | +7.5% | ✅⬆️ |
| process.time_to_main_ms | 86.94 ± (86.79 - 87.08) ms | 99.45 ± (99.19 - 99.71) ms | +14.4% | ✅⬆️ |
| runtime.dotnet.exceptions.count | 0 ± (0 - 0) | 0 ± (0 - 0) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 15.51 ± (15.51 - 15.52) MB | 15.53 ± (15.52 - 15.53) MB | +0.1% | ✅⬆️ |
| runtime.dotnet.threads.count | 12 ± (12 - 12) | 12 ± (12 - 12) | +0.0% | ✅ |
| .NET Core 3.1 - Bailout | ||||
| process.internal_duration_ms | 22.40 ± (22.37 - 22.42) ms | 24.22 ± (24.14 - 24.30) ms | +8.1% | ✅⬆️ |
| process.time_to_main_ms | 87.91 ± (87.78 - 88.04) ms | 100.52 ± (100.31 - 100.74) ms | +14.3% | ✅⬆️ |
| runtime.dotnet.exceptions.count | 0 ± (0 - 0) | 0 ± (0 - 0) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 15.56 ± (15.55 - 15.56) MB | 15.56 ± (15.56 - 15.56) MB | +0.0% | ✅⬆️ |
| runtime.dotnet.threads.count | 13 ± (13 - 13) | 13 ± (13 - 13) | +0.0% | ✅ |
| .NET Core 3.1 - CallTarget+Inlining+NGEN | ||||
| process.internal_duration_ms | 261.82 ± (258.78 - 264.86) ms | 288.16 ± (285.89 - 290.42) ms | +10.1% | ✅⬆️ |
| process.time_to_main_ms | 506.91 ± (506.27 - 507.56) ms | 558.31 ± (557.39 - 559.24) ms | +10.1% | ✅⬆️ |
| runtime.dotnet.exceptions.count | 0 ± (0 - 0) | 0 ± (0 - 0) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 53.30 ± (53.27 - 53.32) MB | 53.22 ± (53.19 - 53.24) MB | -0.2% | ✅ |
| runtime.dotnet.threads.count | 28 ± (28 - 28) | 28 ± (28 - 28) | -0.0% | ✅ |
| .NET 6 - Baseline | ||||
| process.internal_duration_ms | 21.02 ± (21.00 - 21.05) ms | 23.02 ± (22.96 - 23.08) ms | +9.5% | ✅⬆️ |
| process.time_to_main_ms | 74.84 ± (74.73 - 74.96) ms | 87.73 ± (87.49 - 87.98) ms | +17.2% | ✅⬆️ |
| runtime.dotnet.exceptions.count | 0 ± (0 - 0) | 0 ± (0 - 0) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 15.23 ± (15.22 - 15.23) MB | 15.25 ± (15.24 - 15.25) MB | +0.1% | ✅⬆️ |
| runtime.dotnet.threads.count | 10 ± (10 - 10) | 10 ± (10 - 10) | +0.0% | ✅ |
| .NET 6 - Bailout | ||||
| process.internal_duration_ms | 20.95 ± (20.93 - 20.97) ms | 22.88 ± (22.81 - 22.94) ms | +9.2% | ✅⬆️ |
| process.time_to_main_ms | 75.79 ± (75.74 - 75.85) ms | 88.77 ± (88.54 - 89.00) ms | +17.1% | ✅⬆️ |
| runtime.dotnet.exceptions.count | 0 ± (0 - 0) | 0 ± (0 - 0) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 15.34 ± (15.34 - 15.34) MB | 15.30 ± (15.30 - 15.30) MB | -0.3% | ✅ |
| runtime.dotnet.threads.count | 11 ± (11 - 11) | 11 ± (11 - 11) | +0.0% | ✅ |
| .NET 6 - CallTarget+Inlining+NGEN | ||||
| process.internal_duration_ms | 253.97 ± (253.01 - 254.92) ms | 276.65 ± (275.32 - 277.97) ms | +8.9% | ✅⬆️ |
| process.time_to_main_ms | 481.17 ± (480.43 - 481.92) ms | 527.74 ± (526.70 - 528.79) ms | +9.7% | ✅⬆️ |
| runtime.dotnet.exceptions.count | 0 ± (0 - 0) | 0 ± (0 - 0) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 54.03 ± (54.00 - 54.06) MB | 53.94 ± (53.92 - 53.96) MB | -0.2% | ✅ |
| runtime.dotnet.threads.count | 28 ± (28 - 28) | 28 ± (28 - 28) | +0.2% | ✅⬆️ |
| .NET 8 - Baseline | ||||
| process.internal_duration_ms | 19.38 ± (19.35 - 19.41) ms | 21.00 ± (20.94 - 21.06) ms | +8.4% | ✅⬆️ |
| process.time_to_main_ms | 73.94 ± (73.81 - 74.08) ms | 85.46 ± (85.27 - 85.66) ms | +15.6% | ✅⬆️ |
| runtime.dotnet.exceptions.count | 0 ± (0 - 0) | 0 ± (0 - 0) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 12.26 ± (12.26 - 12.27) MB | 12.27 ± (12.27 - 12.28) MB | +0.1% | ✅⬆️ |
| runtime.dotnet.threads.count | 10 ± (10 - 10) | 10 ± (10 - 10) | +0.0% | ✅ |
| .NET 8 - Bailout | ||||
| process.internal_duration_ms | 19.37 ± (19.33 - 19.40) ms | 21.13 ± (21.07 - 21.20) ms | +9.1% | ✅⬆️ |
| process.time_to_main_ms | 75.12 ± (75.05 - 75.20) ms | 87.78 ± (87.56 - 88.00) ms | +16.8% | ✅⬆️ |
| runtime.dotnet.exceptions.count | 0 ± (0 - 0) | 0 ± (0 - 0) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 12.31 ± (12.30 - 12.31) MB | 12.33 ± (12.32 - 12.34) MB | +0.2% | ✅⬆️ |
| runtime.dotnet.threads.count | 11 ± (11 - 11) | 11 ± (11 - 11) | +0.0% | ✅ |
| .NET 8 - CallTarget+Inlining+NGEN | ||||
| process.internal_duration_ms | 184.10 ± (183.12 - 185.08) ms | 202.02 ± (201.15 - 202.89) ms | +9.7% | ✅⬆️ |
| process.time_to_main_ms | 463.28 ± (462.48 - 464.08) ms | 506.85 ± (505.82 - 507.87) ms | +9.4% | ✅⬆️ |
| runtime.dotnet.exceptions.count | 0 ± (0 - 0) | 0 ± (0 - 0) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 41.24 ± (41.21 - 41.27) MB | 41.65 ± (41.61 - 41.69) MB | +1.0% | ✅⬆️ |
| runtime.dotnet.threads.count | 27 ± (26 - 27) | 27 ± (27 - 27) | +0.5% | ✅⬆️ |
HttpMessageHandler
| Metric | Master (Mean ± 95% CI) | Current (Mean ± 95% CI) | Change | Status |
|---|---|---|---|---|
| .NET Framework 4.8 - Baseline | ||||
| duration | 198.40 ± (198.36 - 199.28) ms | 205.04 ± (205.42 - 206.89) ms | +3.3% | ✅⬆️ |
| .NET Framework 4.8 - Bailout | ||||
| duration | 200.11 ± (200.14 - 201.07) ms | 210.04 ± (210.39 - 212.05) ms | +5.0% | ✅⬆️ |
| .NET Framework 4.8 - CallTarget+Inlining+NGEN | ||||
| duration | 1156.34 ± (1157.63 - 1165.00) ms | 1217.69 ± (1215.32 - 1224.79) ms | +5.3% | ✅⬆️ |
| .NET Core 3.1 - Baseline | ||||
| process.internal_duration_ms | 196.80 ± (196.29 - 197.31) ms | 203.93 ± (203.15 - 204.72) ms | +3.6% | ✅⬆️ |
| process.time_to_main_ms | 91.58 ± (91.35 - 91.81) ms | 95.22 ± (94.82 - 95.61) ms | +4.0% | ✅⬆️ |
| runtime.dotnet.exceptions.count | 3 ± (3 - 3) | 3 ± (3 - 3) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 20.73 ± (20.71 - 20.75) MB | 20.52 ± (20.50 - 20.54) MB | -1.0% | ✅ |
| runtime.dotnet.threads.count | 20 ± (20 - 20) | 20 ± (20 - 20) | +0.1% | ✅⬆️ |
| .NET Core 3.1 - Bailout | ||||
| process.internal_duration_ms | 196.55 ± (196.01 - 197.08) ms | 203.70 ± (203.01 - 204.38) ms | +3.6% | ✅⬆️ |
| process.time_to_main_ms | 92.88 ± (92.66 - 93.10) ms | 96.50 ± (96.15 - 96.85) ms | +3.9% | ✅⬆️ |
| runtime.dotnet.exceptions.count | 3 ± (3 - 3) | 3 ± (3 - 3) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 20.65 ± (20.62 - 20.68) MB | 20.61 ± (20.59 - 20.63) MB | -0.2% | ✅ |
| runtime.dotnet.threads.count | 21 ± (21 - 21) | 21 ± (21 - 21) | +1.5% | ✅⬆️ |
| .NET Core 3.1 - CallTarget+Inlining+NGEN | ||||
| process.internal_duration_ms | 447.46 ± (444.49 - 450.42) ms | 462.22 ± (458.73 - 465.70) ms | +3.3% | ✅⬆️ |
| process.time_to_main_ms | 517.96 ± (517.03 - 518.90) ms | 543.56 ± (542.12 - 544.99) ms | +4.9% | ✅⬆️ |
| runtime.dotnet.exceptions.count | 3 ± (3 - 3) | 3 ± (3 - 3) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 63.37 ± (63.25 - 63.49) MB | 63.03 ± (62.86 - 63.20) MB | -0.5% | ✅ |
| runtime.dotnet.threads.count | 29 ± (29 - 29) | 29 ± (29 - 29) | +0.1% | ✅⬆️ |
| .NET 6 - Baseline | ||||
| process.internal_duration_ms | 201.15 ± (200.68 - 201.62) ms | 208.72 ± (208.05 - 209.39) ms | +3.8% | ✅⬆️ |
| process.time_to_main_ms | 78.92 ± (78.74 - 79.11) ms | 82.62 ± (82.21 - 83.03) ms | +4.7% | ✅⬆️ |
| runtime.dotnet.exceptions.count | 4 ± (4 - 4) | 4 ± (4 - 4) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 20.88 ± (20.86 - 20.90) MB | 20.79 ± (20.77 - 20.81) MB | -0.4% | ✅ |
| runtime.dotnet.threads.count | 19 ± (19 - 19) | 20 ± (20 - 20) | +0.8% | ✅⬆️ |
| .NET 6 - Bailout | ||||
| process.internal_duration_ms | 202.49 ± (201.99 - 202.98) ms | 208.75 ± (208.07 - 209.42) ms | +3.1% | ✅⬆️ |
| process.time_to_main_ms | 80.85 ± (80.61 - 81.10) ms | 83.62 ± (83.32 - 83.92) ms | +3.4% | ✅⬆️ |
| runtime.dotnet.exceptions.count | 4 ± (4 - 4) | 4 ± (4 - 4) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 20.93 ± (20.91 - 20.95) MB | 20.91 ± (20.89 - 20.93) MB | -0.1% | ✅ |
| runtime.dotnet.threads.count | 21 ± (20 - 21) | 21 ± (21 - 21) | +0.4% | ✅⬆️ |
| .NET 6 - CallTarget+Inlining+NGEN | ||||
| process.internal_duration_ms | 467.68 ± (465.21 - 470.15) ms | 479.54 ± (477.31 - 481.76) ms | +2.5% | ✅⬆️ |
| process.time_to_main_ms | 493.78 ± (493.14 - 494.42) ms | 510.44 ± (509.40 - 511.48) ms | +3.4% | ✅⬆️ |
| runtime.dotnet.exceptions.count | 4 ± (4 - 4) | 4 ± (4 - 4) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 62.87 ± (62.75 - 63.00) MB | 62.52 ± (62.43 - 62.61) MB | -0.6% | ✅ |
| runtime.dotnet.threads.count | 30 ± (30 - 30) | 30 ± (30 - 30) | +0.4% | ✅⬆️ |
| .NET 8 - Baseline | ||||
| process.internal_duration_ms | 201.12 ± (200.63 - 201.61) ms | 218.44 ± (217.82 - 219.06) ms | +8.6% | ✅⬆️ |
| process.time_to_main_ms | 78.72 ± (78.49 - 78.94) ms | 87.58 ± (87.22 - 87.93) ms | +11.3% | ✅⬆️ |
| runtime.dotnet.exceptions.count | 4 ± (4 - 4) | 4 ± (4 - 4) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 16.24 ± (16.22 - 16.25) MB | 16.10 ± (16.08 - 16.12) MB | -0.8% | ✅ |
| runtime.dotnet.threads.count | 19 ± (19 - 19) | 19 ± (19 - 19) | +1.0% | ✅⬆️ |
| .NET 8 - Bailout | ||||
| process.internal_duration_ms | 199.01 ± (198.57 - 199.45) ms | 217.34 ± (216.77 - 217.90) ms | +9.2% | ✅⬆️ |
| process.time_to_main_ms | 79.38 ± (79.17 - 79.58) ms | 88.35 ± (88.06 - 88.65) ms | +11.3% | ✅⬆️ |
| runtime.dotnet.exceptions.count | 4 ± (4 - 4) | 4 ± (4 - 4) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 16.33 ± (16.31 - 16.35) MB | 16.18 ± (16.17 - 16.20) MB | -0.9% | ✅ |
| runtime.dotnet.threads.count | 20 ± (20 - 20) | 20 ± (20 - 20) | +0.8% | ✅⬆️ |
| .NET 8 - CallTarget+Inlining+NGEN | ||||
| process.internal_duration_ms | 378.95 ± (377.41 - 380.48) ms | 480.72 ± (474.11 - 487.34) ms | +26.9% | ✅⬆️ |
| process.time_to_main_ms | 477.58 ± (476.87 - 478.29) ms | 517.32 ± (516.07 - 518.57) ms | +8.3% | ✅⬆️ |
| runtime.dotnet.exceptions.count | 4 ± (4 - 4) | 4 ± (4 - 4) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 53.21 ± (53.09 - 53.32) MB | 55.19 ± (55.16 - 55.22) MB | +3.7% | ✅⬆️ |
| runtime.dotnet.threads.count | 29 ± (29 - 29) | 29 ± (29 - 29) | -0.2% | ✅ |
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 (8179) - mean (77ms) : 75, 80
master - mean (68ms) : 67, 70
section Bailout
This PR (8179) - mean (82ms) : crit, 79, 84
master - mean (72ms) : 71, 74
section CallTarget+Inlining+NGEN
This PR (8179) - mean (1,111ms) : crit, 1063, 1160
master - mean (1,033ms) : 992, 1075
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 (8179) - mean (132ms) : 126, 137
master - mean (116ms) : 113, 118
section Bailout
This PR (8179) - mean (133ms) : crit, 130, 136
master - mean (116ms) : 114, 118
section CallTarget+Inlining+NGEN
This PR (8179) - mean (887ms) : crit, 847, 927
master - mean (803ms) : 745, 862
FakeDbCommand (.NET 6)
gantt
title Execution time (ms) FakeDbCommand (.NET 6)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8179) - mean (118ms) : 114, 123
master - mean (101ms) : 99, 103
section Bailout
This PR (8179) - mean (119ms) : crit, 117, 122
master - mean (102ms) : 101, 103
section CallTarget+Inlining+NGEN
This PR (8179) - mean (844ms) : crit, 820, 868
master - mean (775ms) : 751, 799
FakeDbCommand (.NET 8)
gantt
title Execution time (ms) FakeDbCommand (.NET 8)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8179) - mean (115ms) : 111, 119
master - mean (100ms) : 97, 103
section Bailout
This PR (8179) - mean (118ms) : crit, 115, 121
master - mean (101ms) : 99, 102
section CallTarget+Inlining+NGEN
This PR (8179) - mean (754ms) : crit, 734, 775
master - mean (689ms) : 667, 711
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 (8179) - mean (206ms) : 195, 217
master - mean (199ms) : 192, 206
section Bailout
This PR (8179) - mean (211ms) : 199, 224
master - mean (201ms) : 196, 205
section CallTarget+Inlining+NGEN
This PR (8179) - mean (1,220ms) : 1149, 1291
master - mean (1,161ms) : 1108, 1214
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 (8179) - mean (311ms) : 295, 327
master - mean (298ms) : 289, 308
section Bailout
This PR (8179) - mean (312ms) : 295, 329
master - mean (299ms) : 292, 306
section CallTarget+Inlining+NGEN
This PR (8179) - mean (1,050ms) : 998, 1103
master - mean (1,002ms) : 943, 1061
HttpMessageHandler (.NET 6)
gantt
title Execution time (ms) HttpMessageHandler (.NET 6)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8179) - mean (304ms) : 283, 325
master - mean (289ms) : 281, 298
section Bailout
This PR (8179) - mean (303ms) : 288, 318
master - mean (293ms) : 283, 303
section CallTarget+Inlining+NGEN
This PR (8179) - mean (1,036ms) : 994, 1077
master - mean (995ms) : 949, 1040
HttpMessageHandler (.NET 8)
gantt
title Execution time (ms) HttpMessageHandler (.NET 8)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8179) - mean (319ms) : 305, 332
master - mean (290ms) : 283, 298
section Bailout
This PR (8179) - mean (318ms) : crit, 308, 329
master - mean (289ms) : 283, 296
section CallTarget+Inlining+NGEN
This PR (8179) - mean (1,049ms) : crit, 953, 1145
master - mean (891ms) : 860, 921
Summary of changes
Changes dd-octo-sts policy used in SLO checks to
gitlab.github-access.read-contents.Reason for change
The SLO check job was pointing at a default dd-octo-sts policy (
self.gitlab.read), not present in this repo.Implementation details
Test coverage
Other details