courierust 1.0.5

no_std HTTP and gRPC engine with work-stealing, RFC 9218, and JA3/JA4 fingerprinting.
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
# GitHub Action Benchmark

Generated by the benchmark workflow.

## Run

- Commit: 4ad2a00197523b1ec2b54a54708a151284028e15
- Ref: main
- Runner: Linux
- Throughput exit code: 0
- Comparison exit code: 0
- Concurrency exit code: 0
- Interop exit code: 0
- HTTP/3 exit code: 0
- Complexity exit code: 0
- Cross-machine exit code: not-configured
- Fuzz exit code: 0
- Workflow run: [34770189216](https://github.com/blueokanna/Courierust/actions/runs/34770189216)

## Evidence Rules

- Rows marked `invalid` are retained for auditability but are excluded from performance conclusions.
- The `*_h2c_large_body_to_hyper` rows measure a 1 MiB POST against the same hyper h2 server. Both clients are paced by the server 64 KiB initial flow-control window (WINDOW_UPDATE round trips), and reqwest retains a large fixed wait even in the async client — these rows are NOT valid for ratio claims.
- `quinn_h3_client_to_courierust` is reported `not_available` until the independent quinn+rustls QUIC/TLS handshake completes against the Courierust H3 server (a genuine interop gap, never faked).
- Loopback is not cross-machine evidence. The cross-machine table is evidence only when `target_scope=remote` and `status=ok`.
- TLS rows measure the built-in TLS 1.2/1.3 path; certificate, hostname, and ALPN checks must pass for the case to be valid. `negotiated_alpn` is reported; `session_resumption=n/a` because each TLSVERIFY row is a single handshake that does not measure resumption (the stack does implement TLS 1.3 session tickets).
- Fuzz status is evidence only for the recorded target, run count, and duration; an unconfigured target is not a pass.
- The `STATS` table is the reactor/connection/stream/syscall evidence behind the throughput rows (especially the h2 multi-worker scaling).
- The complexity tables are scaling evidence, not a speed claim: the class is fitted from the largest measured sizes, and the paired `ratio` is only meaningful within one run.

## Reading the numbers (correct interpretation)

- RPS and median latency are comparable only within a paired row (same client, server, payload, concurrency). Never divide across rows, clients or protocols to claim "N× faster".
- reqwest pays for a general async runtime, rich extensions (proxies, cookies, encodings, swappable connector/TLS backends) and a different pool policy: `pool_max_idle_per_host=N` caps idle *pooled* connections, not live ones — equivalent to Courierust `max_connections_per_host=N` only under sequential load.
- An H3 concurrent row whose P99/P99.9/tail_ratio sits far above its median (e.g. P99 jumping from ~200 µs to ms) is a signal to track, not noise. Candidates: UDP reactor, packet queue, congestion-window/ACK timers, QPACK/control flow, worker→reactor handoff, CI-runner scheduling. One run cannot localize the root cause, but it proves the H3 tail is not yet as tight as H2.
- The H1 server is built for event-driven protection (incomplete headers, idle keep-alive, slow senders); hyper is a mature async architecture. A short-request microbenchmark cannot dismiss the scheduling value — the concurrency/slow-connection rows measure production usability and resource isolation.
- H3 connection reuse plus cross-implementation interop (quinn+h3 → Courierust server) is stronger evidence than Courierust-to-Courierust.

## Throughput

| Case | Protocol | Mode | Payload | Workers | Server threads | Requests | RPS | Resp MB/s | P50 us | P75 us | P90 us | P95 us | P99 us | Min us | Mean us | Max us | Stddev us | P99.9 us | Tail | Samples |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| h1_sequential | h1 | sequential | empty | 1 | 4 | 4000 | 13209.7 | 0.000 | 75.09 | 79.46 | 82.06 | 84.89 | 91.19 | 22.71 | 74.06 | 107.63 | 8.35 | 105.55 | 1.21 | 2000 |
| h1_sequential | h1 | sequential | 1k | 1 | 4 | 4000 | 13002.4 | 13.314 | 77.53 | 80.80 | 84.09 | 85.75 | 95.56 | 51.70 | 77.03 | 128.17 | 6.95 | 117.30 | 1.23 | 2000 |
| h1_sequential | h1 | sequential | 64k | 1 | 4 | 4000 | 9037.5 | 592.284 | 110.88 | 117.24 | 123.18 | 128.06 | 137.52 | 76.75 | 111.55 | 183.38 | 9.60 | 158.02 | 1.24 | 2000 |
| h1_parallel_w1 | h1 | parallel | 1k | 1 | 4 | 4000 | 12862.1 | 13.171 | 79.60 | 83.31 | 85.30 | 87.27 | 98.87 | 54.09 | 77.68 | 165.29 | 9.03 | 125.54 | 1.24 | 2000 |
| h1_parallel_w4 | h1 | parallel | 1k | 4 | 4 | 4000 | 33854.6 | 34.667 | 102.33 | 129.56 | 162.66 | 188.35 | 251.47 | 25.65 | 109.93 | 2115.56 | 77.71 | 532.38 | 2.46 | 2000 |
| h1_parallel_w8 | h1 | parallel | 1k | 8 | 8 | 4000 | 43995.2 | 45.051 | 134.40 | 191.51 | 281.22 | 362.52 | 606.18 | 24.80 | 161.30 | 1198.44 | 109.41 | 786.60 | 4.51 | 2000 |
| h2_multiplex_w1 | h2c | multiplex | 1k | 1 | 4 | 4000 | 9982.9 | 10.223 | 100.67 | 102.27 | 113.74 | 116.46 | 119.91 | 69.69 | 100.84 | 136.86 | 8.31 | 129.23 | 1.19 | 2000 |
| h2_multiplex_w8 | h2c | multiplex | 1k | 8 | 4 | 4000 | 39515.3 | 40.464 | 184.22 | 227.75 | 279.33 | 303.01 | 330.65 | 90.11 | 199.40 | 379.51 | 50.02 | 370.56 | 1.79 | 2000 |
| h2_multiplex_w32 | h2c | multiplex | 1k | 32 | 4 | 4000 | 62742.4 | 64.248 | 486.57 | 526.21 | 648.10 | 694.53 | 827.06 | 126.64 | 500.47 | 1185.57 | 102.65 | 1119.71 | 1.70 | 2016 |
| h2_multiplex_w1 | h2c | multiplex | 64k | 1 | 4 | 4000 | 6328.1 | 414.721 | 150.52 | 173.90 | 177.65 | 180.39 | 189.97 | 119.96 | 158.23 | 224.75 | 14.43 | 218.32 | 1.26 | 2000 |
| h2_multiplex_w8 | h2c | multiplex | 64k | 8 | 4 | 4000 | 12930.0 | 847.379 | 586.17 | 760.36 | 839.06 | 883.53 | 955.79 | 187.89 | 617.80 | 1034.25 | 163.42 | 1002.04 | 1.63 | 2000 |
| h2_multiplex_w32 | h2c | multiplex | 64k | 32 | 4 | 4000 | 16769.8 | 1099.023 | 1847.71 | 2084.17 | 2382.85 | 2747.84 | 3088.23 | 166.69 | 1888.46 | 3442.79 | 415.18 | 3397.06 | 1.67 | 2016 |
| https_h2_sequential | https+h2 | sequential | empty | 1 | 4 | 2000 | 10123.2 | 0.000 | 94.17 | 113.55 | 114.98 | 116.20 | 126.81 | 66.94 | 98.72 | 141.66 | 13.70 | 139.87 | 1.35 | 2000 |
| https_h2_sequential | https+h2 | sequential | 1k | 1 | 4 | 2000 | 9029.8 | 9.246 | 110.01 | 111.81 | 119.28 | 124.67 | 131.05 | 80.87 | 110.68 | 156.49 | 6.88 | 147.75 | 1.19 | 2000 |
| https_h2_sequential | https+h2 | sequential | 64k | 1 | 4 | 2000 | 2212.1 | 144.970 | 434.53 | 456.74 | 523.59 | 538.06 | 555.59 | 397.01 | 452.01 | 791.75 | 38.76 | 589.91 | 1.28 | 2000 |

## TLS Verification Evidence

| Protocol | Cert verified | Hostname verified | Negotiated ALPN | Session resumption | Cipher suite | Error |
| --- | --- | --- | --- | --- | --- | --- |
| https+h2 | true | true | h2 | n/a | 0x1303 | - |
| https+h2 | true | true | h2 | n/a | 0x1303 | - |
| https+h2 | true | true | h2 | n/a | 0x1303 | - |

## Cross-Library Comparison

| Case | Layer | Protocol | Client | Server | Payload | Workers | Server threads | Pool policy | Pool value | Reps | Status | Reason | Requests | RPS | Resp MB/s | P50 us | P75 us | P90 us | P95 us | P99 us | Min us | Mean us | Max us | Stddev us | P99.9 us | Tail | Samples |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| raw_tcp_floor | transport | h1 | std_tcp | std_tcp | 4b | 1 | 1 | raw_tcp | 1 | 1 | valid | - | 2000 | 23914.5 | 0.096 | 43.44 | 43.83 | 44.29 | 44.74 | 53.05 | 28.56 | 41.71 | 69.35 | 4.76 | 61.09 | 1.22 | 2000 |
| courierust_client_to_hyper | client | h1 | courierust | hyper | 1k | 1 | 4 | courierust_max_connections_per_host | 1 | 2 | valid | - | 4000 | 18025.4 | 18.458 | 55.52 | 57.65 | 59.42 | 70.01 | 72.99 | 26.20 | 55.42 | 97.40 | 6.12 | 86.90 | 1.31 | 4000 |
| reqwest_client_to_hyper | client | h1 | reqwest | hyper | 1k | 1 | 4 | reqwest_pool_max_idle_per_host | 1 | 2 | valid | - | 4000 | 8975.0 | 9.190 | 110.86 | 113.04 | 121.79 | 125.67 | 142.83 | 84.23 | 111.36 | 181.86 | 8.31 | 162.06 | 1.29 | 4000 |
| reqwest_client_to_courierust | server | h1 | reqwest | courierust | 1k | 1 | 4 | reqwest_pool_max_idle_per_host | 1 | 2 | valid | - | 4000 | 6539.8 | 6.697 | 153.97 | 157.83 | 161.51 | 164.75 | 175.94 | 117.43 | 152.83 | 211.73 | 8.72 | 203.43 | 1.14 | 4000 |
| reqwest_client_to_hyper | server | h1 | reqwest | hyper | 1k | 1 | 4 | reqwest_pool_max_idle_per_host | 1 | 2 | valid | - | 4000 | 8505.0 | 8.709 | 112.34 | 123.62 | 142.20 | 143.49 | 153.30 | 85.55 | 117.52 | 194.66 | 13.92 | 175.48 | 1.36 | 4000 |
| courierust_client_to_hyper | client | h1 | courierust | hyper | 1k | 8 | 4 | courierust_max_connections_per_host | 8 | 2 | valid | - | 4000 | 68034.3 | 69.667 | 98.29 | 142.94 | 179.14 | 206.83 | 353.43 | 32.53 | 112.90 | 1783.06 | 77.20 | 904.86 | 3.60 | 4000 |
| reqwest_client_to_hyper | client | h1 | reqwest | hyper | 1k | 8 | 4 | reqwest_pool_max_idle_per_host | 8 | 2 | valid | - | 4000 | 24026.9 | 24.603 | 329.79 | 350.52 | 373.37 | 392.39 | 501.92 | 99.52 | 329.57 | 1880.70 | 65.96 | 1082.83 | 1.52 | 4000 |
| courierust_client_to_hyper | client | h1 | courierust | hyper | 64k | 1 | 4 | courierust_max_connections_per_host | 1 | 2 | valid | - | 4000 | 12145.3 | 795.956 | 77.67 | 95.72 | 97.20 | 98.13 | 112.25 | 52.64 | 82.27 | 186.67 | 11.59 | 128.46 | 1.45 | 4000 |
| reqwest_client_to_hyper | client | h1 | reqwest | hyper | 64k | 1 | 4 | reqwest_pool_max_idle_per_host | 1 | 2 | valid | - | 4000 | 6823.6 | 447.193 | 142.10 | 163.75 | 166.14 | 167.62 | 183.68 | 108.49 | 146.47 | 258.10 | 16.15 | 204.72 | 1.29 | 4000 |
| reqwest_client_to_courierust | server | h1 | reqwest | courierust | 64k | 1 | 4 | reqwest_pool_max_idle_per_host | 1 | 2 | valid | - | 4000 | 5692.3 | 373.047 | 173.75 | 180.85 | 186.82 | 195.42 | 226.21 | 140.90 | 175.59 | 516.75 | 13.57 | 263.55 | 1.30 | 4000 |
| reqwest_client_to_hyper | server | h1 | reqwest | hyper | 64k | 1 | 4 | reqwest_pool_max_idle_per_host | 1 | 2 | valid | - | 4000 | 7601.2 | 498.149 | 128.62 | 132.74 | 148.16 | 150.38 | 167.53 | 102.10 | 131.51 | 887.05 | 16.41 | 204.21 | 1.30 | 4000 |
| courierust_client_to_hyper | client | h2c | courierust | hyper | 1k | 1 | 4 | courierust_max_connections_per_host | 1 | 2 | valid | - | 4000 | 8383.5 | 8.585 | 120.98 | 124.38 | 129.34 | 137.69 | 147.28 | 80.42 | 119.22 | 189.59 | 10.03 | 161.91 | 1.22 | 4000 |
| reqwest_client_to_hyper | client | h2c | reqwest | hyper | 1k | 1 | 4 | reqwest_pool_max_idle_per_host | 1 | 2 | valid | - | 4000 | 6650.8 | 6.810 | 149.69 | 153.76 | 157.11 | 161.63 | 177.73 | 104.06 | 150.27 | 223.77 | 8.35 | 199.04 | 1.19 | 4000 |
| reqwest_client_to_courierust | server | h2c | reqwest | courierust | 1k | 1 | 4 | reqwest_pool_max_idle_per_host | 1 | 2 | valid | - | 4000 | 7155.0 | 7.327 | 139.06 | 142.11 | 146.10 | 149.45 | 162.92 | 99.70 | 139.66 | 1128.37 | 23.07 | 183.20 | 1.17 | 4000 |
| reqwest_client_to_hyper | server | h2c | reqwest | hyper | 1k | 1 | 4 | reqwest_pool_max_idle_per_host | 1 | 2 | valid | - | 4000 | 6583.3 | 6.741 | 151.34 | 155.45 | 157.62 | 160.70 | 178.10 | 118.37 | 151.80 | 203.09 | 7.30 | 192.56 | 1.18 | 4000 |
| courierust_h2_conn1xw32 | client | h2c | courierust | hyper | 1k | 32 | 4 | courierust_max_connections_per_host | 1 | 2 | valid | - | 4000 | 41788.1 | 42.791 | 708.72 | 841.06 | 977.85 | 1084.92 | 1384.56 | 92.42 | 725.00 | 2380.64 | 217.20 | 1889.53 | 1.95 | 4000 |
| courierust_h2_conn4xw8 | client | h2c | courierust | hyper | 1k | 32 | 4 | courierust_max_connections_per_host | 4 | 2 | valid | - | 4000 | 48990.2 | 50.166 | 572.45 | 748.61 | 965.10 | 1126.43 | 1547.81 | 84.03 | 608.56 | 2156.49 | 281.76 | 2109.36 | 2.70 | 4000 |
| courierust_h2_conn8xw4 | client | h2c | courierust | hyper | 1k | 32 | 4 | courierust_max_connections_per_host | 8 | 2 | valid | - | 4000 | 45602.5 | 46.697 | 606.66 | 798.96 | 1003.64 | 1162.82 | 1547.42 | 71.20 | 642.41 | 3119.09 | 300.02 | 2534.00 | 2.55 | 4000 |
| courierust_client_to_hyper | client | h2c | courierust | hyper | 1k | 8 | 4 | courierust_max_connections_per_host | 8 | 2 | valid | - | 4000 | 32902.2 | 33.692 | 222.66 | 283.17 | 352.16 | 397.80 | 535.40 | 74.51 | 237.34 | 928.18 | 93.74 | 812.42 | 2.40 | 4000 |
| reqwest_client_to_hyper | client | h2c | reqwest | hyper | 1k | 8 | 4 | reqwest_pool_max_idle_per_host | 8 | 2 | valid | - | 4000 | 22873.9 | 23.423 | 335.91 | 398.44 | 468.35 | 514.18 | 602.97 | 118.31 | 344.73 | 945.24 | 93.85 | 782.86 | 1.80 | 4000 |
| courierust_client_to_hyper | client | h2c | courierust | hyper | 64k | 1 | 4 | courierust_max_connections_per_host | 1 | 2 | valid | - | 4000 | 5405.5 | 354.255 | 180.47 | 209.01 | 213.44 | 216.56 | 238.87 | 130.66 | 184.94 | 281.58 | 22.40 | 260.37 | 1.32 | 4000 |
| reqwest_client_to_hyper | client | h2c | reqwest | hyper | 64k | 1 | 4 | reqwest_pool_max_idle_per_host | 1 | 2 | valid | - | 4000 | 5342.7 | 350.139 | 185.36 | 192.05 | 201.18 | 205.46 | 220.63 | 138.39 | 187.08 | 243.02 | 10.49 | 238.96 | 1.19 | 4000 |
| reqwest_client_to_courierust | server | h2c | reqwest | courierust | 64k | 1 | 4 | reqwest_pool_max_idle_per_host | 1 | 2 | valid | - | 4000 | 5582.2 | 365.835 | 176.74 | 184.91 | 192.86 | 200.00 | 219.22 | 149.21 | 179.05 | 258.25 | 12.01 | 242.55 | 1.24 | 4000 |
| reqwest_client_to_hyper | server | h2c | reqwest | hyper | 64k | 1 | 4 | reqwest_pool_max_idle_per_host | 1 | 2 | valid | - | 4000 | 5275.7 | 345.746 | 187.07 | 196.73 | 204.91 | 211.12 | 223.29 | 149.39 | 189.46 | 278.34 | 11.86 | 244.87 | 1.19 | 4000 |
| courierust_h2c_large_body_to_hyper | client | h2c | courierust | hyper | 64k | 1 | 4 | courierust_max_connections_per_host | 1 | 2 | valid | - | 64 | 560.7 | 36.746 | 1921.95 | 1956.45 | 1989.06 | 2014.95 | 2057.02 | 1549.93 | 1783.43 | 2291.58 | 196.90 | 2291.58 | 1.07 | 64 |
| reqwest_async_h2c_large_body_to_hyper | client | h2c | reqwest-async | hyper | 64k | 1 | 4 | reqwest_pool_max_idle_per_host | 1 | 2 | valid | - | 64 | 1023.4 | 67.071 | 942.83 | 975.12 | 1031.49 | 1338.94 | 1478.50 | 858.70 | 977.04 | 1603.16 | 138.49 | 1603.16 | 1.57 | 64 |
| courierust_h3_client_to_courierust | client | h3 | courierust-h3 | courierust-h3 | 1k | 1 | 4 | courierust_max_connections_per_host | 1 | 2 | valid | - | 4000 | 4367.1 | 4.472 | 229.40 | 249.56 | 261.32 | 267.76 | 285.11 | 148.67 | 228.89 | 348.13 | 25.47 | 321.59 | 1.24 | 4000 |
| quinn_h3_client_to_courierust | client | h3 | quinn+h3 | courierust-h3 | 1k | 1 | 4 | quinn_single_connection | 1 | 2 | valid | - | 4000 | 3800.4 | 3.892 | 264.13 | 271.94 | 278.36 | 282.84 | 300.29 | 220.59 | 263.03 | 396.89 | 13.94 | 321.79 | 1.14 | 4000 |
| courierust_h3_client_to_courierust | client | h3 | courierust-h3 | courierust-h3 | 64k | 1 | 4 | courierust_max_connections_per_host | 1 | 2 | valid | - | 4000 | 1138.5 | 74.614 | 867.41 | 884.74 | 903.73 | 933.92 | 1214.19 | 755.21 | 878.22 | 1495.70 | 69.13 | 1265.22 | 1.40 | 4000 |
| quinn_h3_client_to_courierust | client | h3 | quinn+h3 | courierust-h3 | 64k | 1 | 4 | quinn_single_connection | 1 | 2 | valid | - | 4000 | 892.6 | 58.499 | 1170.81 | 1194.49 | 1216.70 | 1230.94 | 1264.60 | 829.27 | 1120.17 | 1450.35 | 114.36 | 1334.64 | 1.08 | 4000 |

## Concurrency and Slow Connections

- These rows measure production usability and resource isolation: an event-driven scheduler must keep idle/partial/slow (Slowloris-style) connections off the worker pool while a fast probe still completes. The `pool` row is the diagnostic counter-model.

| Case | Model | Platform | Status | Event enabled | Connections | Worker threads | Probe us | Probe status | Byte delay us | Completed | Wall ms |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| idle_partial_herd | event | linux | probe_ok | true | 200 | 2 | 250.23 | - | - | - | - |
| idle_partial_herd | pool | linux | probe_blocked | false | 200 | 2 | na | - | - | - | - |
| slow_sender_herd | event | linux | ok | true | 16 | 2 | 157.33 | probe_ok | 10000 | 16 | 395.49 |

## HTTP/3 (QUIC)

- `h3_connect` is a cold request: QUIC handshake + TLS 1.3 + server Retry address validation on a fresh connection.
- `h3_sequential` and `h3_parallel` reuse the pooled per-authority QUIC connection (`mode=reuse`), so they measure the warm per-request cost of connection reuse.

| Case | Mode | Workers | Requests | Elapsed ms | Connect ms | RPS | P50 us | P75 us | P90 us | P99 us | Min us | Mean us | Max us | Stddev us | P99.9 us | Tail | Samples |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| h3_connect | connect | 1 | 1 | - | 4.422 | - | - | - | - | - | - | - | - | - | - | - | - |
| h3_sequential | reuse | 1 | 1000 | 203.787 | - | 4907.1 | 202.7 | 217.0 | 224.1 | 241.5 | 143.58 | 203.66 | 273.44 | 17.23 | 269.77 | 1.19 | 1000 |
| h3_parallel | reuse | 8 | 1000 | 53.120 | - | 18825.5 | 416.7 | 443.9 | 465.6 | 536.9 | 184.56 | 420.74 | 862.01 | 42.75 | 630.06 | 1.29 | 1000 |

## Complexity (time and space)

- Each family is measured at several input sizes (three orders of magnitude), and every point is the minimum of three repeats — noise only ever makes a measurement slower, so the minimum is the right estimator and a noisy point would otherwise invent curvature that is not in the code.
- `class` is named by `median k`, the median of the adjacent-pair exponents, so the label describes the *typical* growth factor per 16× inside the measured range; `max k` is the worst pair, so one noisy pair cannot pass as a trend. `slope b` is the per-unit cost and `fixed a` the per-operation cost that does not scale with the input; R² is the fit quality (1.0 = exact).
- A range whose fixed term dwarfs its per-unit term is labelled `fixed-cost dominated` instead of quoting a sublinear-looking exponent that is really the constant; for those families read `slope b` (for example nanoseconds per extra header).
- Space is attributed per operation by a counting allocator compiled into the bench binary (allocation bytes and allocation calls), and per connection by a live-bytes/RSS delta between 1 and 65 idle keep-alive connections — the fixed process/runtime cost cancels out of a delta.
- `ratio` is Courierust divided by the reference at the same size: below 1 means Courierust is cheaper. Rows are comparable only within one run.

| family | implementation | operation | metric | fitted class | median k | max k | slope b | fixed a | R² | points |
|---|---|---|---|---|---:|---:|---:|---:|---:|---:|
| codec | courierust | encode_unmasked | time_ns | O(n) | 0.998 | 2.007 | 0.033142 | 16857.8616 | 0.1625 | 5 |
| codec | courierust | encode_unmasked | alloc_bytes | O(1) | 0.000 | 0.000 | 0.000000 | 0.0000 | 1.0000 | 5 |
| codec | tungstenite | encode_unmasked | time_ns | O(n) | 0.873 | 2.052 | 0.024309 | 17896.2704 | 0.0915 | 5 |
| codec | tungstenite | encode_unmasked | alloc_bytes | O(1) | 0.000 | 0.000 | 0.000000 | 0.0000 | 1.0000 | 5 |
| codec | courierust | encode_masked | time_ns | O(n) | 0.922 | 1.696 | 0.068211 | 16903.3093 | 0.4002 | 5 |
| codec | courierust | encode_masked | alloc_bytes | O(1) | 0.000 | 0.000 | 0.000000 | 0.0000 | 1.0000 | 5 |
| codec | tungstenite | encode_masked | time_ns | O(n) | 1.002 | 1.081 | 0.071829 | -64.9663 | 1.0000 | 5 |
| codec | tungstenite | encode_masked | alloc_bytes | O(n) | 1.000 | 1.000 | 1.000000 | 0.0000 | 1.0000 | 5 |
| http | courierust | get_roundtrip | time_ns | O(n^0.20) | 0.199 | 1.571 | 1.181822 | 5700.5154 | 0.9632 | 4 |
| http | courierust | get_roundtrip | alloc_bytes | O(n) | 0.979 | 0.998 | 1.999773 | 2076.1226 | 1.0000 | 4 |
| http | reqwest_hyper | get_roundtrip | time_ns | O(n^0.26) | 0.261 | 0.378 | 0.290615 | 134971.2593 | 0.9611 | 4 |
| http | reqwest_hyper | get_roundtrip | alloc_bytes | O(n) | 0.946 | 0.993 | 2.838598 | 27812.8705 | 0.9997 | 4 |
| headers | courierust | get_with_headers | time_ns | O(n^0.33) | 0.325 | 0.325 | 1020.100714 | 70283.8333 | 1.0000 | 3 |
| headers | courierust | get_with_headers | alloc_bytes | O(n) | 0.856 | 0.856 | 883.623571 | 4485.6733 | 1.0000 | 3 |
| headers | reqwest_hyper | get_with_headers | time_ns | O(n^0.25) | 0.251 | 0.251 | 829.511101 | 101247.4775 | 0.9724 | 3 |
| headers | reqwest_hyper | get_with_headers | alloc_bytes | O(n^0.60) | 0.596 | 0.596 | 1168.000000 | 24970.6400 | 1.0000 | 3 |
| deflate | courierust | deflate_reused_compressible | time_ns | O(n) | 0.996 | 0.996 | 0.816077 | 485.8865 | 1.0000 | 3 |
| deflate | courierust | deflate_reused_compressible | alloc_bytes | n/a | n/a | n/a | n/a | n/a | n/a | 1 |
| deflate | courierust | deflate_fresh_compressible | time_ns | O(n) | 0.990 | 0.990 | 0.899094 | 1992.5208 | 1.0000 | 3 |
| deflate | courierust | deflate_fresh_compressible | alloc_bytes | O(n) | 0.867 | 0.867 | 4.093389 | 131406.3313 | 1.0000 | 3 |
| deflate | courierust | inflate_compressible | time_ns | O(n^0.83) | 0.830 | 0.830 | 0.127298 | 5599.9741 | 1.0000 | 3 |
| deflate | courierust | inflate_compressible | alloc_bytes | fixed-cost dominated | 0.000 | 0.000 | 0.000000 | 29.0000 | 1.0000 | 3 |
| deflate | courierust | deflate_reused_incompressible | time_ns | O(n^1.26) | 1.259 | 1.259 | 23.556317 | -50188.2911 | 1.0000 | 3 |
| deflate | courierust | deflate_reused_incompressible | alloc_bytes | O(1) | 0.000 | 0.000 | 0.000000 | 0.0000 | 1.0000 | 3 |
| deflate | courierust | deflate_fresh_incompressible | time_ns | O(n^1.21) | 1.205 | 1.205 | 25.834484 | -141880.5042 | 0.9999 | 3 |
| deflate | courierust | deflate_fresh_incompressible | alloc_bytes | O(n) | 0.960 | 0.960 | 16.000000 | 131048.0000 | 1.0000 | 3 |

### Constant factors (paired at the same size)

| family | operation | metric | n | courierust | reference | ratio (ours/reference) |
|---|---|---|---:|---:|---:|---:|
| codec | encode_unmasked | time_ns | 64 | 10.6800 | 18.8077 | 0.568 |
| codec | encode_unmasked | alloc_bytes | 64 | 0.0000 | 0.0000 | NaN |
| codec | encode_masked | time_ns | 64 | 30.2568 | 39.2512 | 0.771 |
| codec | encode_masked | alloc_bytes | 64 | 0.0000 | 64.0000 | 0.000 |
| codec | encode_unmasked | time_ns | 1024 | 20.7840 | 25.8335 | 0.805 |
| codec | encode_unmasked | alloc_bytes | 1024 | 0.0000 | 0.0000 | NaN |
| codec | encode_masked | time_ns | 1024 | 72.0455 | 75.7930 | 0.951 |
| codec | encode_masked | alloc_bytes | 1024 | 0.0000 | 1024.0000 | 0.000 |
| codec | encode_unmasked | time_ns | 16384 | 5418.9450 | 7641.7800 | 0.709 |
| codec | encode_unmasked | alloc_bytes | 16384 | 0.0000 | 0.0000 | NaN |
| codec | encode_masked | time_ns | 16384 | 927.4450 | 937.4150 | 0.989 |
| codec | encode_masked | alloc_bytes | 16384 | 0.0000 | 16384.0000 | 0.000 |
| codec | encode_unmasked | time_ns | 262144 | 86209.2000 | 85924.9000 | 1.003 |
| codec | encode_unmasked | alloc_bytes | 262144 | 0.0000 | 0.0000 | NaN |
| codec | encode_masked | time_ns | 262144 | 102234.0750 | 18771.3250 | 5.446 |
| codec | encode_masked | alloc_bytes | 262144 | 0.0000 | 262144.0000 | 0.000 |
| codec | encode_unmasked | time_ns | 1048576 | 36648.7000 | 28157.2250 | 1.302 |
| codec | encode_unmasked | alloc_bytes | 1048576 | 0.0000 | 0.0000 | NaN |
| codec | encode_masked | time_ns | 1048576 | 71849.4250 | 75254.5750 | 0.955 |
| codec | encode_masked | alloc_bytes | 1048576 | 0.0000 | 1048576.0000 | 0.000 |
| codec | utf8_validate | time_ns | 4608 | 1926.2240 | 1786.2590 | 1.078 |
| http | get_roundtrip | time_ns | 1024 | 76426.1552 | 119296.0836 | 0.641 |
| http | get_roundtrip | alloc_bytes | 1024 | 4218.9303 | 26714.1194 | 0.158 |
| http | get_roundtrip | time_ns | 16384 | 83896.1905 | 123194.0571 | 0.681 |
| http | get_roundtrip | alloc_bytes | 16384 | 34856.8286 | 51458.8381 | 0.677 |
| http | get_roundtrip | time_ns | 262144 | 145693.3200 | 254137.3600 | 0.573 |
| http | get_roundtrip | alloc_bytes | 262144 | 526156.5200 | 807275.6000 | 0.652 |
| http | get_roundtrip | time_ns | 1048576 | 1286397.0000 | 429231.1600 | 2.997 |
| http | get_roundtrip | alloc_bytes | 1048576 | 2099027.0000 | 2995824.4000 | 0.701 |
| headers | get_with_headers | time_ns | 4 | 74538.0800 | 108440.5700 | 0.687 |
| headers | get_with_headers | time_ns | 16 | 86388.1400 | 109675.8450 | 0.788 |
| headers | get_with_headers | time_ns | 64 | 135613.7400 | 155304.9500 | 0.873 |
| deflate | fresh_vs_reused_compressible | time_ns | 1024 | 3106.5900 | 1249.6500 | 2.486 |
| deflate | fresh_vs_reused_compressible | time_ns | 65536 | 60709.4500 | 54044.9250 | 1.123 |
| deflate | fresh_vs_reused_compressible | time_ns | 1048576 | 944773.5000 | 856199.9000 | 1.103 |
| deflate | fresh_vs_reused_incompressible | time_ns | 1024 | 9442.4150 | 7761.6500 | 1.217 |
| deflate | fresh_vs_reused_incompressible | time_ns | 65536 | 1418145.3500 | 1457550.2250 | 0.973 |
| deflate | fresh_vs_reused_incompressible | time_ns | 1048576 | 26955734.0000 | 24652620.0000 | 1.093 |

### Space: cost of one idle connection

| implementation | connections | live KiB/conn | RSS KiB/conn |
|---|---:|---:|---:|
| courierust_event | 65 | 9.71 | 8.12 |
| courierust_blocking | 65 | 32.62 | 16.69 |
| hyper_tokio | 65 | 18.91 | 10.56 |

### Time: selected scaling points

| family | implementation | operation | n (bytes) | ns/op |
|---|---|---|---:|---:|
| codec | courierust | encode_unmasked | 64 | 10.6800 |
| codec | tungstenite | encode_unmasked | 64 | 18.8077 |
| codec | courierust | encode_masked | 64 | 30.2568 |
| codec | tungstenite | encode_masked | 64 | 39.2512 |
| codec | courierust | encode_unmasked | 1024 | 20.7840 |
| codec | tungstenite | encode_unmasked | 1024 | 25.8335 |
| codec | courierust | encode_masked | 1024 | 72.0455 |
| codec | tungstenite | encode_masked | 1024 | 75.7930 |
| codec | courierust | encode_unmasked | 16384 | 5418.9450 |
| codec | tungstenite | encode_unmasked | 16384 | 7641.7800 |
| codec | courierust | encode_masked | 16384 | 927.4450 |
| codec | tungstenite | encode_masked | 16384 | 937.4150 |
| codec | courierust | encode_unmasked | 262144 | 86209.2000 |
| codec | tungstenite | encode_unmasked | 262144 | 85924.9000 |
| codec | courierust | encode_masked | 262144 | 102234.0750 |
| codec | tungstenite | encode_masked | 262144 | 18771.3250 |
| codec | courierust | encode_unmasked | 1048576 | 36648.7000 |
| codec | tungstenite | encode_unmasked | 1048576 | 28157.2250 |
| codec | courierust | encode_masked | 1048576 | 71849.4250 |
| codec | tungstenite | encode_masked | 1048576 | 75254.5750 |
| http | courierust | get_roundtrip | 1024 | 76426.1552 |
| http | reqwest_hyper | get_roundtrip | 1024 | 119296.0836 |
| http | courierust | get_roundtrip | 16384 | 83896.1905 |
| http | reqwest_hyper | get_roundtrip | 16384 | 123194.0571 |
| http | courierust | get_roundtrip | 262144 | 145693.3200 |
| http | reqwest_hyper | get_roundtrip | 262144 | 254137.3600 |
| http | courierust | get_roundtrip | 1048576 | 1286397.0000 |
| http | reqwest_hyper | get_roundtrip | 1048576 | 429231.1600 |

## Reactor / Connection / Stream Evidence

| Protocol | Case | Payload | Workers | Accepted conns | Active conns | Poll syscalls | Wakeups | Queue peak | H1 conns | H1 read | H1 write | H2 conns | H2 active | H2 streams | H2 stream peak | H2 stream/conn peak | H2 read | H2 write | H3 conns | H3 active | H3 streams | H3 active streams | H3 stream peak | H3 stream/conn peak | H3 queue peak | H3 UDP recv | H3 UDP send |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| h2c | h2_multiplex_w1 | 1k | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 4001 | 1 | 1 | 4254 | 4003 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| h2c | h2_multiplex_w1 | 1k | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 4001 | 1 | 1 | 4003 | 4253 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| h2c | h2_multiplex_w8 | 1k | 8 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 4001 | 8 | 8 | 922 | 671 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| h2c | h2_multiplex_w8 | 1k | 8 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 4001 | 8 | 8 | 671 | 921 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| h2c | h2_multiplex_w32 | 1k | 32 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 4001 | 32 | 32 | 351 | 386 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| h2c | h2_multiplex_w32 | 1k | 32 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 4001 | 32 | 32 | 380 | 357 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| h2c | h2_multiplex_w1 | 64k | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 4001 | 1 | 1 | 9244 | 16008 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| h2c | h2_multiplex_w1 | 64k | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 4001 | 1 | 1 | 21255 | 9243 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| h2c | h2_multiplex_w8 | 64k | 8 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 4001 | 8 | 8 | 1072 | 16009 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| h2c | h2_multiplex_w8 | 64k | 8 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 4001 | 8 | 8 | 21915 | 6693 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| h2c | h2_multiplex_w32 | 64k | 32 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 4001 | 32 | 32 | 419 | 16010 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| h2c | h2_multiplex_w32 | 64k | 32 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 4001 | 32 | 32 | 16761 | 1302 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |

## Cross-Machine

| Role | Status | Scope | Protocol | Workers | Max connections | Requests | Bytes | RPS | Resp MB/s | P50 us | P95 us | P99 us | Min us | Mean us | Max us | Stddev us | P99.9 us | Tail | Samples | Reason |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| client | not_configured | remote | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | COURIERUST_REMOTE_URL_not_set |

## Fuzz

| Target | Status | Runs | Duration s | Corpus | Reason |
| --- | --- | --- | --- | --- | --- |
| h2_frame | ok | smoke | 76 | fuzz/corpus/h2_frame | command_exit_0 |
| hpack_block | ok | smoke | 21 | fuzz/corpus/hpack_block | command_exit_0 |
| h1_request | ok | smoke | 22 | fuzz/corpus/h1_request | command_exit_0 |
| h2_connection | ok | smoke | 23 | fuzz/corpus/h2_connection | command_exit_0 |

## Interop Validation

| Case | Result |
| --- | --- |
| courierust_client_h1_to_hyper_h1 | ok |
| courierust_client_h2c_to_hyper_h2 | ok |
| hyper_client_h1_to_courierust_h1 | ok |
| hyper_client_h2c_to_courierust_h2 | ok |
| reqwest_h1_to_courierust_h1 | ok |
| reqwest_h2c_to_courierust_h2 | ok |
| courierust_h2c_large_body_to_hyper_h2 | ok |
| courierust_h1_slow_reader_to_hyper_h1 | ok |
| tls_rejects_untrusted_certificate | ok |
| tls_rejects_hostname_mismatch | ok |
| tls_alpn_downgrade_to_h1 | ok |
| tls_h2_alpn_rejected | ok |
| h1_connection_close_honored | ok |
| courierust_h2_client_survives_peer_goaway | ok |
| h3_self_roundtrip | ok |
| h3_self_connection_reuse | ok |
| h3_self_large_body_flow_control | ok |
| h3_self_multiplex_concurrent | ok |
| suite | all_cases_passed |

## TLS Interop Matrix

| _No TLS interop evidence captured_ | | | | | |

## Captured Benchmark Output

### Throughput
~~~text
courierust throughput suite (loopback)
META|suite=throughput|requests=4000|server_threads=4|max_samples=2048
RESULT|suite=throughput|case=h1_sequential|protocol=h1|mode=sequential|payload=empty|bytes=0|workers=1|server_threads=4|requests=4000|elapsed_ms=302.808|rps=13209.7|response_mbps=0.000|p50_us=75.09|p75_us=79.46|p90_us=82.06|p95_us=84.89|p99_us=91.19|min_us=22.71|mean_us=74.06|max_us=107.63|stddev_us=8.35|p999_us=105.55|tail_ratio=1.21|cv=0.11|samples=2000
RESULT|suite=throughput|case=h1_sequential|protocol=h1|mode=sequential|payload=1k|bytes=1024|workers=1|server_threads=4|requests=4000|elapsed_ms=307.637|rps=13002.4|response_mbps=13.314|p50_us=77.53|p75_us=80.80|p90_us=84.09|p95_us=85.75|p99_us=95.56|min_us=51.70|mean_us=77.03|max_us=128.17|stddev_us=6.95|p999_us=117.30|tail_ratio=1.23|cv=0.09|samples=2000
RESULT|suite=throughput|case=h1_sequential|protocol=h1|mode=sequential|payload=64k|bytes=65536|workers=1|server_threads=4|requests=4000|elapsed_ms=442.599|rps=9037.5|response_mbps=592.284|p50_us=110.88|p75_us=117.24|p90_us=123.18|p95_us=128.06|p99_us=137.52|min_us=76.75|mean_us=111.55|max_us=183.38|stddev_us=9.60|p999_us=158.02|tail_ratio=1.24|cv=0.09|samples=2000
RESULT|suite=throughput|case=h1_parallel_w1|protocol=h1|mode=parallel|payload=1k|bytes=1024|workers=1|server_threads=4|requests=4000|elapsed_ms=310.992|rps=12862.1|response_mbps=13.171|p50_us=79.60|p75_us=83.31|p90_us=85.30|p95_us=87.27|p99_us=98.87|min_us=54.09|mean_us=77.68|max_us=165.29|stddev_us=9.03|p999_us=125.54|tail_ratio=1.24|cv=0.12|samples=2000
RESULT|suite=throughput|case=h1_parallel_w4|protocol=h1|mode=parallel|payload=1k|bytes=1024|workers=4|server_threads=4|requests=4000|elapsed_ms=118.152|rps=33854.6|response_mbps=34.667|p50_us=102.33|p75_us=129.56|p90_us=162.66|p95_us=188.35|p99_us=251.47|min_us=25.65|mean_us=109.93|max_us=2115.56|stddev_us=77.71|p999_us=532.38|tail_ratio=2.46|cv=0.71|samples=2000
RESULT|suite=throughput|case=h1_parallel_w8|protocol=h1|mode=parallel|payload=1k|bytes=1024|workers=8|server_threads=8|requests=4000|elapsed_ms=90.919|rps=43995.2|response_mbps=45.051|p50_us=134.40|p75_us=191.51|p90_us=281.22|p95_us=362.52|p99_us=606.18|min_us=24.80|mean_us=161.30|max_us=1198.44|stddev_us=109.41|p999_us=786.60|tail_ratio=4.51|cv=0.68|samples=2000
RESULT|suite=throughput|case=h2_multiplex_w1|protocol=h2c|mode=multiplex|payload=1k|bytes=1024|workers=1|server_threads=4|requests=4000|elapsed_ms=400.684|rps=9982.9|response_mbps=10.223|p50_us=100.67|p75_us=102.27|p90_us=113.74|p95_us=116.46|p99_us=119.91|min_us=69.69|mean_us=100.84|max_us=136.86|stddev_us=8.31|p999_us=129.23|tail_ratio=1.19|cv=0.08|samples=2000
STATS|suite=throughput|protocol=h2c|case=h2_multiplex_w1|payload=1k|workers=1|connections_accepted=1|connections_active=0|event_poll_syscalls=1|event_wakeups=1|event_wait_errors=0|event_queue_depth_peak=0|h1_connections=0|h1_read_syscalls=0|h1_write_syscalls=0|h2_connections=1|h2_connections_active=1|h2_streams_total=4001|h2_streams_timed_out=0|h2_streams_active=1|h2_streams_active_peak=1|h2_streams_per_connection_peak=1|h2_read_syscalls=4254|h2_write_syscalls=4003|h3_connections=0|h3_connections_active=0|h3_streams_total=0|h3_streams_active=0|h3_streams_active_peak=0|h3_streams_per_connection_peak=0|h3_queue_depth_peak=0|h3_udp_recv_syscalls=0|h3_udp_send_syscalls=0|h3_ack_deferred=0|h3_credit_stalls=0
STATS|suite=throughput|protocol=h2c|case=h2_multiplex_w1|payload=1k|workers=1|connections_accepted=0|connections_active=0|event_poll_syscalls=0|event_wakeups=0|event_wait_errors=0|event_queue_depth_peak=0|h1_connections=0|h1_read_syscalls=0|h1_write_syscalls=0|h2_connections=1|h2_connections_active=1|h2_streams_total=4001|h2_streams_timed_out=0|h2_streams_active=0|h2_streams_active_peak=1|h2_streams_per_connection_peak=1|h2_read_syscalls=4003|h2_write_syscalls=4253|h3_connections=0|h3_connections_active=0|h3_streams_total=0|h3_streams_active=0|h3_streams_active_peak=0|h3_streams_per_connection_peak=0|h3_queue_depth_peak=0|h3_udp_recv_syscalls=0|h3_udp_send_syscalls=0|h3_ack_deferred=0|h3_credit_stalls=0
RESULT|suite=throughput|case=h2_multiplex_w8|protocol=h2c|mode=multiplex|payload=1k|bytes=1024|workers=8|server_threads=4|requests=4000|elapsed_ms=101.227|rps=39515.3|response_mbps=40.464|p50_us=184.22|p75_us=227.75|p90_us=279.33|p95_us=303.01|p99_us=330.65|min_us=90.11|mean_us=199.40|max_us=379.51|stddev_us=50.02|p999_us=370.56|tail_ratio=1.79|cv=0.25|samples=2000
STATS|suite=throughput|protocol=h2c|case=h2_multiplex_w8|payload=1k|workers=8|connections_accepted=1|connections_active=0|event_poll_syscalls=1|event_wakeups=1|event_wait_errors=0|event_queue_depth_peak=0|h1_connections=0|h1_read_syscalls=0|h1_write_syscalls=0|h2_connections=1|h2_connections_active=1|h2_streams_total=4001|h2_streams_timed_out=0|h2_streams_active=1|h2_streams_active_peak=8|h2_streams_per_connection_peak=8|h2_read_syscalls=922|h2_write_syscalls=671|h3_connections=0|h3_connections_active=0|h3_streams_total=0|h3_streams_active=0|h3_streams_active_peak=0|h3_streams_per_connection_peak=0|h3_queue_depth_peak=0|h3_udp_recv_syscalls=0|h3_udp_send_syscalls=0|h3_ack_deferred=0|h3_credit_stalls=0
STATS|suite=throughput|protocol=h2c|case=h2_multiplex_w8|payload=1k|workers=8|connections_accepted=0|connections_active=0|event_poll_syscalls=0|event_wakeups=0|event_wait_errors=0|event_queue_depth_peak=0|h1_connections=0|h1_read_syscalls=0|h1_write_syscalls=0|h2_connections=1|h2_connections_active=1|h2_streams_total=4001|h2_streams_timed_out=0|h2_streams_active=0|h2_streams_active_peak=8|h2_streams_per_connection_peak=8|h2_read_syscalls=671|h2_write_syscalls=921|h3_connections=0|h3_connections_active=0|h3_streams_total=0|h3_streams_active=0|h3_streams_active_peak=0|h3_streams_per_connection_peak=0|h3_queue_depth_peak=0|h3_udp_recv_syscalls=0|h3_udp_send_syscalls=0|h3_ack_deferred=0|h3_credit_stalls=0
RESULT|suite=throughput|case=h2_multiplex_w32|protocol=h2c|mode=multiplex|payload=1k|bytes=1024|workers=32|server_threads=4|requests=4000|elapsed_ms=63.753|rps=62742.4|response_mbps=64.248|p50_us=486.57|p75_us=526.21|p90_us=648.10|p95_us=694.53|p99_us=827.06|min_us=126.64|mean_us=500.47|max_us=1185.57|stddev_us=102.65|p999_us=1119.71|tail_ratio=1.70|cv=0.21|samples=2016
STATS|suite=throughput|protocol=h2c|case=h2_multiplex_w32|payload=1k|workers=32|connections_accepted=1|connections_active=0|event_poll_syscalls=1|event_wakeups=1|event_wait_errors=0|event_queue_depth_peak=0|h1_connections=0|h1_read_syscalls=0|h1_write_syscalls=0|h2_connections=1|h2_connections_active=1|h2_streams_total=4001|h2_streams_timed_out=0|h2_streams_active=1|h2_streams_active_peak=32|h2_streams_per_connection_peak=32|h2_read_syscalls=351|h2_write_syscalls=386|h3_connections=0|h3_connections_active=0|h3_streams_total=0|h3_streams_active=0|h3_streams_active_peak=0|h3_streams_per_connection_peak=0|h3_queue_depth_peak=0|h3_udp_recv_syscalls=0|h3_udp_send_syscalls=0|h3_ack_deferred=0|h3_credit_stalls=0
STATS|suite=throughput|protocol=h2c|case=h2_multiplex_w32|payload=1k|workers=32|connections_accepted=0|connections_active=0|event_poll_syscalls=0|event_wakeups=0|event_wait_errors=0|event_queue_depth_peak=0|h1_connections=0|h1_read_syscalls=0|h1_write_syscalls=0|h2_connections=1|h2_connections_active=1|h2_streams_total=4001|h2_streams_timed_out=0|h2_streams_active=0|h2_streams_active_peak=32|h2_streams_per_connection_peak=32|h2_read_syscalls=380|h2_write_syscalls=357|h3_connections=0|h3_connections_active=0|h3_streams_total=0|h3_streams_active=0|h3_streams_active_peak=0|h3_streams_per_connection_peak=0|h3_queue_depth_peak=0|h3_udp_recv_syscalls=0|h3_udp_send_syscalls=0|h3_ack_deferred=0|h3_credit_stalls=0
RESULT|suite=throughput|case=h2_multiplex_w1|protocol=h2c|mode=multiplex|payload=64k|bytes=65536|workers=1|server_threads=4|requests=4000|elapsed_ms=632.098|rps=6328.1|response_mbps=414.721|p50_us=150.52|p75_us=173.90|p90_us=177.65|p95_us=180.39|p99_us=189.97|min_us=119.96|mean_us=158.23|max_us=224.75|stddev_us=14.43|p999_us=218.32|tail_ratio=1.26|cv=0.09|samples=2000
STATS|suite=throughput|protocol=h2c|case=h2_multiplex_w1|payload=64k|workers=1|connections_accepted=1|connections_active=0|event_poll_syscalls=1|event_wakeups=0|event_wait_errors=0|event_queue_depth_peak=0|h1_connections=0|h1_read_syscalls=0|h1_write_syscalls=0|h2_connections=1|h2_connections_active=1|h2_streams_total=4001|h2_streams_timed_out=0|h2_streams_active=0|h2_streams_active_peak=1|h2_streams_per_connection_peak=1|h2_read_syscalls=9244|h2_write_syscalls=16008|h3_connections=0|h3_connections_active=0|h3_streams_total=0|h3_streams_active=0|h3_streams_active_peak=0|h3_streams_per_connection_peak=0|h3_queue_depth_peak=0|h3_udp_recv_syscalls=0|h3_udp_send_syscalls=0|h3_ack_deferred=0|h3_credit_stalls=0
STATS|suite=throughput|protocol=h2c|case=h2_multiplex_w1|payload=64k|workers=1|connections_accepted=0|connections_active=0|event_poll_syscalls=0|event_wakeups=0|event_wait_errors=0|event_queue_depth_peak=0|h1_connections=0|h1_read_syscalls=0|h1_write_syscalls=0|h2_connections=1|h2_connections_active=1|h2_streams_total=4001|h2_streams_timed_out=0|h2_streams_active=0|h2_streams_active_peak=1|h2_streams_per_connection_peak=1|h2_read_syscalls=21255|h2_write_syscalls=9243|h3_connections=0|h3_connections_active=0|h3_streams_total=0|h3_streams_active=0|h3_streams_active_peak=0|h3_streams_per_connection_peak=0|h3_queue_depth_peak=0|h3_udp_recv_syscalls=0|h3_udp_send_syscalls=0|h3_ack_deferred=0|h3_credit_stalls=0
RESULT|suite=throughput|case=h2_multiplex_w8|protocol=h2c|mode=multiplex|payload=64k|bytes=65536|workers=8|server_threads=4|requests=4000|elapsed_ms=309.358|rps=12930.0|response_mbps=847.379|p50_us=586.17|p75_us=760.36|p90_us=839.06|p95_us=883.53|p99_us=955.79|min_us=187.89|mean_us=617.80|max_us=1034.25|stddev_us=163.42|p999_us=1002.04|tail_ratio=1.63|cv=0.26|samples=2000
STATS|suite=throughput|protocol=h2c|case=h2_multiplex_w8|payload=64k|workers=8|connections_accepted=1|connections_active=0|event_poll_syscalls=1|event_wakeups=1|event_wait_errors=0|event_queue_depth_peak=0|h1_connections=0|h1_read_syscalls=0|h1_write_syscalls=0|h2_connections=1|h2_connections_active=1|h2_streams_total=4001|h2_streams_timed_out=0|h2_streams_active=0|h2_streams_active_peak=8|h2_streams_per_connection_peak=8|h2_read_syscalls=1072|h2_write_syscalls=16009|h3_connections=0|h3_connections_active=0|h3_streams_total=0|h3_streams_active=0|h3_streams_active_peak=0|h3_streams_per_connection_peak=0|h3_queue_depth_peak=0|h3_udp_recv_syscalls=0|h3_udp_send_syscalls=0|h3_ack_deferred=0|h3_credit_stalls=0
STATS|suite=throughput|protocol=h2c|case=h2_multiplex_w8|payload=64k|workers=8|connections_accepted=0|connections_active=0|event_poll_syscalls=0|event_wakeups=0|event_wait_errors=0|event_queue_depth_peak=0|h1_connections=0|h1_read_syscalls=0|h1_write_syscalls=0|h2_connections=1|h2_connections_active=1|h2_streams_total=4001|h2_streams_timed_out=0|h2_streams_active=0|h2_streams_active_peak=8|h2_streams_per_connection_peak=8|h2_read_syscalls=21915|h2_write_syscalls=6693|h3_connections=0|h3_connections_active=0|h3_streams_total=0|h3_streams_active=0|h3_streams_active_peak=0|h3_streams_per_connection_peak=0|h3_queue_depth_peak=0|h3_udp_recv_syscalls=0|h3_udp_send_syscalls=0|h3_ack_deferred=0|h3_credit_stalls=0
RESULT|suite=throughput|case=h2_multiplex_w32|protocol=h2c|mode=multiplex|payload=64k|bytes=65536|workers=32|server_threads=4|requests=4000|elapsed_ms=238.525|rps=16769.8|response_mbps=1099.023|p50_us=1847.71|p75_us=2084.17|p90_us=2382.85|p95_us=2747.84|p99_us=3088.23|min_us=166.69|mean_us=1888.46|max_us=3442.79|stddev_us=415.18|p999_us=3397.06|tail_ratio=1.67|cv=0.22|samples=2016
STATS|suite=throughput|protocol=h2c|case=h2_multiplex_w32|payload=64k|workers=32|connections_accepted=1|connections_active=0|event_poll_syscalls=1|event_wakeups=1|event_wait_errors=0|event_queue_depth_peak=0|h1_connections=0|h1_read_syscalls=0|h1_write_syscalls=0|h2_connections=1|h2_connections_active=1|h2_streams_total=4001|h2_streams_timed_out=0|h2_streams_active=0|h2_streams_active_peak=32|h2_streams_per_connection_peak=32|h2_read_syscalls=419|h2_write_syscalls=16010|h3_connections=0|h3_connections_active=0|h3_streams_total=0|h3_streams_active=0|h3_streams_active_peak=0|h3_streams_per_connection_peak=0|h3_queue_depth_peak=0|h3_udp_recv_syscalls=0|h3_udp_send_syscalls=0|h3_ack_deferred=0|h3_credit_stalls=0
STATS|suite=throughput|protocol=h2c|case=h2_multiplex_w32|payload=64k|workers=32|connections_accepted=0|connections_active=0|event_poll_syscalls=0|event_wakeups=0|event_wait_errors=0|event_queue_depth_peak=0|h1_connections=0|h1_read_syscalls=0|h1_write_syscalls=0|h2_connections=1|h2_connections_active=1|h2_streams_total=4001|h2_streams_timed_out=0|h2_streams_active=0|h2_streams_active_peak=32|h2_streams_per_connection_peak=32|h2_read_syscalls=16761|h2_write_syscalls=1302|h3_connections=0|h3_connections_active=0|h3_streams_total=0|h3_streams_active=0|h3_streams_active_peak=0|h3_streams_per_connection_peak=0|h3_queue_depth_peak=0|h3_udp_recv_syscalls=0|h3_udp_send_syscalls=0|h3_ack_deferred=0|h3_credit_stalls=0
RESULT|suite=throughput|case=https_h2_sequential|protocol=https+h2|mode=sequential|payload=empty|bytes=0|workers=1|server_threads=4|requests=2000|elapsed_ms=197.565|rps=10123.2|response_mbps=0.000|p50_us=94.17|p75_us=113.55|p90_us=114.98|p95_us=116.20|p99_us=126.81|min_us=66.94|mean_us=98.72|max_us=141.66|stddev_us=13.70|p999_us=139.87|tail_ratio=1.35|cv=0.14|samples=2000
TLSVERIFY|protocol=https+h2|cert_verified=true|hostname_verified=true|negotiated_alpn=h2|session_resumption=n/a|cipher_suite=0x1303
RESULT|suite=throughput|case=https_h2_sequential|protocol=https+h2|mode=sequential|payload=1k|bytes=1024|workers=1|server_threads=4|requests=2000|elapsed_ms=221.489|rps=9029.8|response_mbps=9.246|p50_us=110.01|p75_us=111.81|p90_us=119.28|p95_us=124.67|p99_us=131.05|min_us=80.87|mean_us=110.68|max_us=156.49|stddev_us=6.88|p999_us=147.75|tail_ratio=1.19|cv=0.06|samples=2000
TLSVERIFY|protocol=https+h2|cert_verified=true|hostname_verified=true|negotiated_alpn=h2|session_resumption=n/a|cipher_suite=0x1303
RESULT|suite=throughput|case=https_h2_sequential|protocol=https+h2|mode=sequential|payload=64k|bytes=65536|workers=1|server_threads=4|requests=2000|elapsed_ms=904.132|rps=2212.1|response_mbps=144.970|p50_us=434.53|p75_us=456.74|p90_us=523.59|p95_us=538.06|p99_us=555.59|min_us=397.01|mean_us=452.01|max_us=791.75|stddev_us=38.76|p999_us=589.91|tail_ratio=1.28|cv=0.09|samples=2000
TLSVERIFY|protocol=https+h2|cert_verified=true|hostname_verified=true|negotiated_alpn=h2|session_resumption=n/a|cipher_suite=0x1303
total: complete
~~~

### Cross-Library Comparison
~~~text
courierust comparison suite (loopback, shared-peer matrix)
META|suite=compare|requests_per_repetition=2000|parallel_requests_per_repetition=2000|parallel_workers=8|repetitions=2|max_samples=2048
RESULT|suite=compare|case=raw_tcp_floor|layer=transport|protocol=h1|client=std_tcp|server=std_tcp|payload=4b|bytes=4|workers=1|server_threads=1|pool_policy=raw_tcp|pool_value=1|repetitions=1|status=valid|reason=-|requests=2000|elapsed_ms=83.631|rps=23914.5|response_mbps=0.096|p50_us=43.44|p75_us=43.83|p90_us=44.29|p95_us=44.74|p99_us=53.05|min_us=28.56|mean_us=41.71|max_us=69.35|stddev_us=4.76|p999_us=61.09|tail_ratio=1.22|cv=0.11|samples=2000
RESULT|suite=compare|case=courierust_client_to_hyper|layer=client|protocol=h1|client=courierust|server=hyper|payload=1k|bytes=1024|workers=1|server_threads=4|pool_policy=courierust_max_connections_per_host|pool_value=1|repetitions=2|status=valid|reason=-|requests=4000|elapsed_ms=221.909|rps=18025.4|response_mbps=18.458|p50_us=55.52|p75_us=57.65|p90_us=59.42|p95_us=70.01|p99_us=72.99|min_us=26.20|mean_us=55.42|max_us=97.40|stddev_us=6.12|p999_us=86.90|tail_ratio=1.31|cv=0.11|samples=4000
RESULT|suite=compare|case=reqwest_client_to_hyper|layer=client|protocol=h1|client=reqwest|server=hyper|payload=1k|bytes=1024|workers=1|server_threads=4|pool_policy=reqwest_pool_max_idle_per_host|pool_value=1|repetitions=2|status=valid|reason=-|requests=4000|elapsed_ms=445.682|rps=8975.0|response_mbps=9.190|p50_us=110.86|p75_us=113.04|p90_us=121.79|p95_us=125.67|p99_us=142.83|min_us=84.23|mean_us=111.36|max_us=181.86|stddev_us=8.31|p999_us=162.06|tail_ratio=1.29|cv=0.07|samples=4000
RESULT|suite=compare|case=reqwest_client_to_courierust|layer=server|protocol=h1|client=reqwest|server=courierust|payload=1k|bytes=1024|workers=1|server_threads=4|pool_policy=reqwest_pool_max_idle_per_host|pool_value=1|repetitions=2|status=valid|reason=-|requests=4000|elapsed_ms=611.638|rps=6539.8|response_mbps=6.697|p50_us=153.97|p75_us=157.83|p90_us=161.51|p95_us=164.75|p99_us=175.94|min_us=117.43|mean_us=152.83|max_us=211.73|stddev_us=8.72|p999_us=203.43|tail_ratio=1.14|cv=0.06|samples=4000
RESULT|suite=compare|case=reqwest_client_to_hyper|layer=server|protocol=h1|client=reqwest|server=hyper|payload=1k|bytes=1024|workers=1|server_threads=4|pool_policy=reqwest_pool_max_idle_per_host|pool_value=1|repetitions=2|status=valid|reason=-|requests=4000|elapsed_ms=470.310|rps=8505.0|response_mbps=8.709|p50_us=112.34|p75_us=123.62|p90_us=142.20|p95_us=143.49|p99_us=153.30|min_us=85.55|mean_us=117.52|max_us=194.66|stddev_us=13.92|p999_us=175.48|tail_ratio=1.36|cv=0.12|samples=4000
RESULT|suite=compare|case=courierust_client_to_hyper|layer=client|protocol=h1|client=courierust|server=hyper|payload=1k|bytes=1024|workers=8|server_threads=4|pool_policy=courierust_max_connections_per_host|pool_value=8|repetitions=2|status=valid|reason=-|requests=4000|elapsed_ms=58.794|rps=68034.3|response_mbps=69.667|p50_us=98.29|p75_us=142.94|p90_us=179.14|p95_us=206.83|p99_us=353.43|min_us=32.53|mean_us=112.90|max_us=1783.06|stddev_us=77.20|p999_us=904.86|tail_ratio=3.60|cv=0.68|samples=4000
RESULT|suite=compare|case=reqwest_client_to_hyper|layer=client|protocol=h1|client=reqwest|server=hyper|payload=1k|bytes=1024|workers=8|server_threads=4|pool_policy=reqwest_pool_max_idle_per_host|pool_value=8|repetitions=2|status=valid|reason=-|requests=4000|elapsed_ms=166.480|rps=24026.9|response_mbps=24.603|p50_us=329.79|p75_us=350.52|p90_us=373.37|p95_us=392.39|p99_us=501.92|min_us=99.52|mean_us=329.57|max_us=1880.70|stddev_us=65.96|p999_us=1082.83|tail_ratio=1.52|cv=0.20|samples=4000
RESULT|suite=compare|case=courierust_client_to_hyper|layer=client|protocol=h1|client=courierust|server=hyper|payload=64k|bytes=65536|workers=1|server_threads=4|pool_policy=courierust_max_connections_per_host|pool_value=1|repetitions=2|status=valid|reason=-|requests=4000|elapsed_ms=329.345|rps=12145.3|response_mbps=795.956|p50_us=77.67|p75_us=95.72|p90_us=97.20|p95_us=98.13|p99_us=112.25|min_us=52.64|mean_us=82.27|max_us=186.67|stddev_us=11.59|p999_us=128.46|tail_ratio=1.45|cv=0.14|samples=4000
RESULT|suite=compare|case=reqwest_client_to_hyper|layer=client|protocol=h1|client=reqwest|server=hyper|payload=64k|bytes=65536|workers=1|server_threads=4|pool_policy=reqwest_pool_max_idle_per_host|pool_value=1|repetitions=2|status=valid|reason=-|requests=4000|elapsed_ms=586.199|rps=6823.6|response_mbps=447.193|p50_us=142.10|p75_us=163.75|p90_us=166.14|p95_us=167.62|p99_us=183.68|min_us=108.49|mean_us=146.47|max_us=258.10|stddev_us=16.15|p999_us=204.72|tail_ratio=1.29|cv=0.11|samples=4000
RESULT|suite=compare|case=reqwest_client_to_courierust|layer=server|protocol=h1|client=reqwest|server=courierust|payload=64k|bytes=65536|workers=1|server_threads=4|pool_policy=reqwest_pool_max_idle_per_host|pool_value=1|repetitions=2|status=valid|reason=-|requests=4000|elapsed_ms=702.709|rps=5692.3|response_mbps=373.047|p50_us=173.75|p75_us=180.85|p90_us=186.82|p95_us=195.42|p99_us=226.21|min_us=140.90|mean_us=175.59|max_us=516.75|stddev_us=13.57|p999_us=263.55|tail_ratio=1.30|cv=0.08|samples=4000
RESULT|suite=compare|case=reqwest_client_to_hyper|layer=server|protocol=h1|client=reqwest|server=hyper|payload=64k|bytes=65536|workers=1|server_threads=4|pool_policy=reqwest_pool_max_idle_per_host|pool_value=1|repetitions=2|status=valid|reason=-|requests=4000|elapsed_ms=526.236|rps=7601.2|response_mbps=498.149|p50_us=128.62|p75_us=132.74|p90_us=148.16|p95_us=150.38|p99_us=167.53|min_us=102.10|mean_us=131.51|max_us=887.05|stddev_us=16.41|p999_us=204.21|tail_ratio=1.30|cv=0.12|samples=4000
RESULT|suite=compare|case=courierust_client_to_hyper|layer=client|protocol=h2c|client=courierust|server=hyper|payload=1k|bytes=1024|workers=1|server_threads=4|pool_policy=courierust_max_connections_per_host|pool_value=1|repetitions=2|status=valid|reason=-|requests=4000|elapsed_ms=477.126|rps=8383.5|response_mbps=8.585|p50_us=120.98|p75_us=124.38|p90_us=129.34|p95_us=137.69|p99_us=147.28|min_us=80.42|mean_us=119.22|max_us=189.59|stddev_us=10.03|p999_us=161.91|tail_ratio=1.22|cv=0.08|samples=4000
RESULT|suite=compare|case=reqwest_client_to_hyper|layer=client|protocol=h2c|client=reqwest|server=hyper|payload=1k|bytes=1024|workers=1|server_threads=4|pool_policy=reqwest_pool_max_idle_per_host|pool_value=1|repetitions=2|status=valid|reason=-|requests=4000|elapsed_ms=601.434|rps=6650.8|response_mbps=6.810|p50_us=149.69|p75_us=153.76|p90_us=157.11|p95_us=161.63|p99_us=177.73|min_us=104.06|mean_us=150.27|max_us=223.77|stddev_us=8.35|p999_us=199.04|tail_ratio=1.19|cv=0.06|samples=4000
RESULT|suite=compare|case=reqwest_client_to_courierust|layer=server|protocol=h2c|client=reqwest|server=courierust|payload=1k|bytes=1024|workers=1|server_threads=4|pool_policy=reqwest_pool_max_idle_per_host|pool_value=1|repetitions=2|status=valid|reason=-|requests=4000|elapsed_ms=559.050|rps=7155.0|response_mbps=7.327|p50_us=139.06|p75_us=142.11|p90_us=146.10|p95_us=149.45|p99_us=162.92|min_us=99.70|mean_us=139.66|max_us=1128.37|stddev_us=23.07|p999_us=183.20|tail_ratio=1.17|cv=0.17|samples=4000
RESULT|suite=compare|case=reqwest_client_to_hyper|layer=server|protocol=h2c|client=reqwest|server=hyper|payload=1k|bytes=1024|workers=1|server_threads=4|pool_policy=reqwest_pool_max_idle_per_host|pool_value=1|repetitions=2|status=valid|reason=-|requests=4000|elapsed_ms=607.599|rps=6583.3|response_mbps=6.741|p50_us=151.34|p75_us=155.45|p90_us=157.62|p95_us=160.70|p99_us=178.10|min_us=118.37|mean_us=151.80|max_us=203.09|stddev_us=7.30|p999_us=192.56|tail_ratio=1.18|cv=0.05|samples=4000
RESULT|suite=compare|case=courierust_h2_conn1xw32|layer=client|protocol=h2c|client=courierust|server=hyper|payload=1k|bytes=1024|workers=32|server_threads=4|pool_policy=courierust_max_connections_per_host|pool_value=1|repetitions=2|status=valid|reason=-|requests=4000|elapsed_ms=95.721|rps=41788.1|response_mbps=42.791|p50_us=708.72|p75_us=841.06|p90_us=977.85|p95_us=1084.92|p99_us=1384.56|min_us=92.42|mean_us=725.00|max_us=2380.64|stddev_us=217.20|p999_us=1889.53|tail_ratio=1.95|cv=0.30|samples=4000
RESULT|suite=compare|case=courierust_h2_conn4xw8|layer=client|protocol=h2c|client=courierust|server=hyper|payload=1k|bytes=1024|workers=32|server_threads=4|pool_policy=courierust_max_connections_per_host|pool_value=4|repetitions=2|status=valid|reason=-|requests=4000|elapsed_ms=81.649|rps=48990.2|response_mbps=50.166|p50_us=572.45|p75_us=748.61|p90_us=965.10|p95_us=1126.43|p99_us=1547.81|min_us=84.03|mean_us=608.56|max_us=2156.49|stddev_us=281.76|p999_us=2109.36|tail_ratio=2.70|cv=0.46|samples=4000
RESULT|suite=compare|case=courierust_h2_conn8xw4|layer=client|protocol=h2c|client=courierust|server=hyper|payload=1k|bytes=1024|workers=32|server_threads=4|pool_policy=courierust_max_connections_per_host|pool_value=8|repetitions=2|status=valid|reason=-|requests=4000|elapsed_ms=87.714|rps=45602.5|response_mbps=46.697|p50_us=606.66|p75_us=798.96|p90_us=1003.64|p95_us=1162.82|p99_us=1547.42|min_us=71.20|mean_us=642.41|max_us=3119.09|stddev_us=300.02|p999_us=2534.00|tail_ratio=2.55|cv=0.47|samples=4000
RESULT|suite=compare|case=courierust_client_to_hyper|layer=client|protocol=h2c|client=courierust|server=hyper|payload=1k|bytes=1024|workers=8|server_threads=4|pool_policy=courierust_max_connections_per_host|pool_value=8|repetitions=2|status=valid|reason=-|requests=4000|elapsed_ms=121.573|rps=32902.2|response_mbps=33.692|p50_us=222.66|p75_us=283.17|p90_us=352.16|p95_us=397.80|p99_us=535.40|min_us=74.51|mean_us=237.34|max_us=928.18|stddev_us=93.74|p999_us=812.42|tail_ratio=2.40|cv=0.39|samples=4000
RESULT|suite=compare|case=reqwest_client_to_hyper|layer=client|protocol=h2c|client=reqwest|server=hyper|payload=1k|bytes=1024|workers=8|server_threads=4|pool_policy=reqwest_pool_max_idle_per_host|pool_value=8|repetitions=2|status=valid|reason=-|requests=4000|elapsed_ms=174.871|rps=22873.9|response_mbps=23.423|p50_us=335.91|p75_us=398.44|p90_us=468.35|p95_us=514.18|p99_us=602.97|min_us=118.31|mean_us=344.73|max_us=945.24|stddev_us=93.85|p999_us=782.86|tail_ratio=1.80|cv=0.27|samples=4000
RESULT|suite=compare|case=courierust_client_to_hyper|layer=client|protocol=h2c|client=courierust|server=hyper|payload=64k|bytes=65536|workers=1|server_threads=4|pool_policy=courierust_max_connections_per_host|pool_value=1|repetitions=2|status=valid|reason=-|requests=4000|elapsed_ms=739.987|rps=5405.5|response_mbps=354.255|p50_us=180.47|p75_us=209.01|p90_us=213.44|p95_us=216.56|p99_us=238.87|min_us=130.66|mean_us=184.94|max_us=281.58|stddev_us=22.40|p999_us=260.37|tail_ratio=1.32|cv=0.12|samples=4000
RESULT|suite=compare|case=reqwest_client_to_hyper|layer=client|protocol=h2c|client=reqwest|server=hyper|payload=64k|bytes=65536|workers=1|server_threads=4|pool_policy=reqwest_pool_max_idle_per_host|pool_value=1|repetitions=2|status=valid|reason=-|requests=4000|elapsed_ms=748.686|rps=5342.7|response_mbps=350.139|p50_us=185.36|p75_us=192.05|p90_us=201.18|p95_us=205.46|p99_us=220.63|min_us=138.39|mean_us=187.08|max_us=243.02|stddev_us=10.49|p999_us=238.96|tail_ratio=1.19|cv=0.06|samples=4000
RESULT|suite=compare|case=reqwest_client_to_courierust|layer=server|protocol=h2c|client=reqwest|server=courierust|payload=64k|bytes=65536|workers=1|server_threads=4|pool_policy=reqwest_pool_max_idle_per_host|pool_value=1|repetitions=2|status=valid|reason=-|requests=4000|elapsed_ms=716.563|rps=5582.2|response_mbps=365.835|p50_us=176.74|p75_us=184.91|p90_us=192.86|p95_us=200.00|p99_us=219.22|min_us=149.21|mean_us=179.05|max_us=258.25|stddev_us=12.01|p999_us=242.55|tail_ratio=1.24|cv=0.07|samples=4000
RESULT|suite=compare|case=reqwest_client_to_hyper|layer=server|protocol=h2c|client=reqwest|server=hyper|payload=64k|bytes=65536|workers=1|server_threads=4|pool_policy=reqwest_pool_max_idle_per_host|pool_value=1|repetitions=2|status=valid|reason=-|requests=4000|elapsed_ms=758.198|rps=5275.7|response_mbps=345.746|p50_us=187.07|p75_us=196.73|p90_us=204.91|p95_us=211.12|p99_us=223.29|min_us=149.39|mean_us=189.46|max_us=278.34|stddev_us=11.86|p999_us=244.87|tail_ratio=1.19|cv=0.06|samples=4000
RESULT|suite=compare|case=courierust_h2c_large_body_to_hyper|layer=client|protocol=h2c|client=courierust|server=hyper|payload=64k|bytes=65536|workers=1|server_threads=4|pool_policy=courierust_max_connections_per_host|pool_value=1|repetitions=2|status=valid|reason=-|requests=64|elapsed_ms=114.143|rps=560.7|response_mbps=36.746|p50_us=1921.95|p75_us=1956.45|p90_us=1989.06|p95_us=2014.95|p99_us=2057.02|min_us=1549.93|mean_us=1783.43|max_us=2291.58|stddev_us=196.90|p999_us=2291.58|tail_ratio=1.07|cv=0.11|samples=64
RESULT|suite=compare|case=reqwest_async_h2c_large_body_to_hyper|layer=client|protocol=h2c|client=reqwest-async|server=hyper|payload=64k|bytes=65536|workers=1|server_threads=4|pool_policy=reqwest_pool_max_idle_per_host|pool_value=1|repetitions=2|status=valid|reason=-|requests=64|elapsed_ms=62.535|rps=1023.4|response_mbps=67.071|p50_us=942.83|p75_us=975.12|p90_us=1031.49|p95_us=1338.94|p99_us=1478.50|min_us=858.70|mean_us=977.04|max_us=1603.16|stddev_us=138.49|p999_us=1603.16|tail_ratio=1.57|cv=0.14|samples=64
RESULT|suite=compare|case=courierust_h3_client_to_courierust|layer=client|protocol=h3|client=courierust-h3|server=courierust-h3|payload=1k|bytes=1024|workers=1|server_threads=4|pool_policy=courierust_max_connections_per_host|pool_value=1|repetitions=2|status=valid|reason=-|requests=4000|elapsed_ms=915.945|rps=4367.1|response_mbps=4.472|p50_us=229.40|p75_us=249.56|p90_us=261.32|p95_us=267.76|p99_us=285.11|min_us=148.67|mean_us=228.89|max_us=348.13|stddev_us=25.47|p999_us=321.59|tail_ratio=1.24|cv=0.11|samples=4000
RESULT|suite=compare|case=quinn_h3_client_to_courierust|layer=client|protocol=h3|client=quinn+h3|server=courierust-h3|payload=1k|bytes=1024|workers=1|server_threads=4|pool_policy=quinn_single_connection|pool_value=1|repetitions=2|status=valid|reason=-|requests=4000|elapsed_ms=1052.527|rps=3800.4|response_mbps=3.892|p50_us=264.13|p75_us=271.94|p90_us=278.36|p95_us=282.84|p99_us=300.29|min_us=220.59|mean_us=263.03|max_us=396.89|stddev_us=13.94|p999_us=321.79|tail_ratio=1.14|cv=0.05|samples=4000
RESULT|suite=compare|case=courierust_h3_client_to_courierust|layer=client|protocol=h3|client=courierust-h3|server=courierust-h3|payload=64k|bytes=65536|workers=1|server_threads=4|pool_policy=courierust_max_connections_per_host|pool_value=1|repetitions=2|status=valid|reason=-|requests=4000|elapsed_ms=3513.318|rps=1138.5|response_mbps=74.614|p50_us=867.41|p75_us=884.74|p90_us=903.73|p95_us=933.92|p99_us=1214.19|min_us=755.21|mean_us=878.22|max_us=1495.70|stddev_us=69.13|p999_us=1265.22|tail_ratio=1.40|cv=0.08|samples=4000
RESULT|suite=compare|case=quinn_h3_client_to_courierust|layer=client|protocol=h3|client=quinn+h3|server=courierust-h3|payload=64k|bytes=65536|workers=1|server_threads=4|pool_policy=quinn_single_connection|pool_value=1|repetitions=2|status=valid|reason=-|requests=4000|elapsed_ms=4481.134|rps=892.6|response_mbps=58.499|p50_us=1170.81|p75_us=1194.49|p90_us=1216.70|p95_us=1230.94|p99_us=1264.60|min_us=829.27|mean_us=1120.17|max_us=1450.35|stddev_us=114.36|p999_us=1334.64|tail_ratio=1.08|cv=0.10|samples=4000
total: complete
~~~

### Concurrency
~~~text
CONCURRENCY|case=idle_partial_herd|model=event|platform=linux|status=probe_ok|event_enabled=true|connections=200|worker_threads=2|probe_us=250.23
CONCURRENCY|case=idle_partial_herd|model=pool|platform=linux|status=probe_blocked|event_enabled=false|connections=200|worker_threads=2|probe_us=na|error=read: Resource temporarily unavailable (os error 11)
CONCURRENCY|case=slow_sender_herd|model=event|platform=linux|status=ok|event_enabled=true|connections=16|worker_threads=2|completed=16|probe_status=probe_ok|probe_us=157.33|byte_delay_us=10000|wall_ms=395.49
CONCURRENCY|suite=complete
~~~

### HTTP/3 (QUIC)
~~~text
RESULT|suite=h3|case=h3_connect|protocol=h3|mode=connect|payload=empty|bytes=0|workers=1|requests=1|connect_ms=4.422
RESULT|suite=h3|case=h3_sequential|protocol=h3|mode=reuse|payload=empty|bytes=0|workers=1|requests=1000|elapsed_ms=203.787|rps=4907.1|p50_us=202.7|p75_us=217.0|p90_us=224.1|p99_us=241.5|min_us=143.58|mean_us=203.66|max_us=273.44|stddev_us=17.23|p999_us=269.77|tail_ratio=1.19|cv=0.08|samples=1000
RESULT|suite=h3|case=h3_parallel|protocol=h3|mode=reuse|payload=empty|bytes=0|workers=8|requests=1000|elapsed_ms=53.120|rps=18825.5|p50_us=416.7|p75_us=443.9|p90_us=465.6|p99_us=536.9|min_us=184.56|mean_us=420.74|max_us=862.01|stddev_us=42.75|p999_us=630.06|tail_ratio=1.29|cv=0.10|samples=1000
~~~

### Reactor / Connection / Stream Evidence
~~~text
STATS|suite=throughput|protocol=h2c|case=h2_multiplex_w1|payload=1k|workers=1|connections_accepted=1|connections_active=0|event_poll_syscalls=1|event_wakeups=1|event_wait_errors=0|event_queue_depth_peak=0|h1_connections=0|h1_read_syscalls=0|h1_write_syscalls=0|h2_connections=1|h2_connections_active=1|h2_streams_total=4001|h2_streams_timed_out=0|h2_streams_active=1|h2_streams_active_peak=1|h2_streams_per_connection_peak=1|h2_read_syscalls=4254|h2_write_syscalls=4003|h3_connections=0|h3_connections_active=0|h3_streams_total=0|h3_streams_active=0|h3_streams_active_peak=0|h3_streams_per_connection_peak=0|h3_queue_depth_peak=0|h3_udp_recv_syscalls=0|h3_udp_send_syscalls=0|h3_ack_deferred=0|h3_credit_stalls=0
STATS|suite=throughput|protocol=h2c|case=h2_multiplex_w1|payload=1k|workers=1|connections_accepted=0|connections_active=0|event_poll_syscalls=0|event_wakeups=0|event_wait_errors=0|event_queue_depth_peak=0|h1_connections=0|h1_read_syscalls=0|h1_write_syscalls=0|h2_connections=1|h2_connections_active=1|h2_streams_total=4001|h2_streams_timed_out=0|h2_streams_active=0|h2_streams_active_peak=1|h2_streams_per_connection_peak=1|h2_read_syscalls=4003|h2_write_syscalls=4253|h3_connections=0|h3_connections_active=0|h3_streams_total=0|h3_streams_active=0|h3_streams_active_peak=0|h3_streams_per_connection_peak=0|h3_queue_depth_peak=0|h3_udp_recv_syscalls=0|h3_udp_send_syscalls=0|h3_ack_deferred=0|h3_credit_stalls=0
STATS|suite=throughput|protocol=h2c|case=h2_multiplex_w8|payload=1k|workers=8|connections_accepted=1|connections_active=0|event_poll_syscalls=1|event_wakeups=1|event_wait_errors=0|event_queue_depth_peak=0|h1_connections=0|h1_read_syscalls=0|h1_write_syscalls=0|h2_connections=1|h2_connections_active=1|h2_streams_total=4001|h2_streams_timed_out=0|h2_streams_active=1|h2_streams_active_peak=8|h2_streams_per_connection_peak=8|h2_read_syscalls=922|h2_write_syscalls=671|h3_connections=0|h3_connections_active=0|h3_streams_total=0|h3_streams_active=0|h3_streams_active_peak=0|h3_streams_per_connection_peak=0|h3_queue_depth_peak=0|h3_udp_recv_syscalls=0|h3_udp_send_syscalls=0|h3_ack_deferred=0|h3_credit_stalls=0
STATS|suite=throughput|protocol=h2c|case=h2_multiplex_w8|payload=1k|workers=8|connections_accepted=0|connections_active=0|event_poll_syscalls=0|event_wakeups=0|event_wait_errors=0|event_queue_depth_peak=0|h1_connections=0|h1_read_syscalls=0|h1_write_syscalls=0|h2_connections=1|h2_connections_active=1|h2_streams_total=4001|h2_streams_timed_out=0|h2_streams_active=0|h2_streams_active_peak=8|h2_streams_per_connection_peak=8|h2_read_syscalls=671|h2_write_syscalls=921|h3_connections=0|h3_connections_active=0|h3_streams_total=0|h3_streams_active=0|h3_streams_active_peak=0|h3_streams_per_connection_peak=0|h3_queue_depth_peak=0|h3_udp_recv_syscalls=0|h3_udp_send_syscalls=0|h3_ack_deferred=0|h3_credit_stalls=0
STATS|suite=throughput|protocol=h2c|case=h2_multiplex_w32|payload=1k|workers=32|connections_accepted=1|connections_active=0|event_poll_syscalls=1|event_wakeups=1|event_wait_errors=0|event_queue_depth_peak=0|h1_connections=0|h1_read_syscalls=0|h1_write_syscalls=0|h2_connections=1|h2_connections_active=1|h2_streams_total=4001|h2_streams_timed_out=0|h2_streams_active=1|h2_streams_active_peak=32|h2_streams_per_connection_peak=32|h2_read_syscalls=351|h2_write_syscalls=386|h3_connections=0|h3_connections_active=0|h3_streams_total=0|h3_streams_active=0|h3_streams_active_peak=0|h3_streams_per_connection_peak=0|h3_queue_depth_peak=0|h3_udp_recv_syscalls=0|h3_udp_send_syscalls=0|h3_ack_deferred=0|h3_credit_stalls=0
STATS|suite=throughput|protocol=h2c|case=h2_multiplex_w32|payload=1k|workers=32|connections_accepted=0|connections_active=0|event_poll_syscalls=0|event_wakeups=0|event_wait_errors=0|event_queue_depth_peak=0|h1_connections=0|h1_read_syscalls=0|h1_write_syscalls=0|h2_connections=1|h2_connections_active=1|h2_streams_total=4001|h2_streams_timed_out=0|h2_streams_active=0|h2_streams_active_peak=32|h2_streams_per_connection_peak=32|h2_read_syscalls=380|h2_write_syscalls=357|h3_connections=0|h3_connections_active=0|h3_streams_total=0|h3_streams_active=0|h3_streams_active_peak=0|h3_streams_per_connection_peak=0|h3_queue_depth_peak=0|h3_udp_recv_syscalls=0|h3_udp_send_syscalls=0|h3_ack_deferred=0|h3_credit_stalls=0
STATS|suite=throughput|protocol=h2c|case=h2_multiplex_w1|payload=64k|workers=1|connections_accepted=1|connections_active=0|event_poll_syscalls=1|event_wakeups=0|event_wait_errors=0|event_queue_depth_peak=0|h1_connections=0|h1_read_syscalls=0|h1_write_syscalls=0|h2_connections=1|h2_connections_active=1|h2_streams_total=4001|h2_streams_timed_out=0|h2_streams_active=0|h2_streams_active_peak=1|h2_streams_per_connection_peak=1|h2_read_syscalls=9244|h2_write_syscalls=16008|h3_connections=0|h3_connections_active=0|h3_streams_total=0|h3_streams_active=0|h3_streams_active_peak=0|h3_streams_per_connection_peak=0|h3_queue_depth_peak=0|h3_udp_recv_syscalls=0|h3_udp_send_syscalls=0|h3_ack_deferred=0|h3_credit_stalls=0
STATS|suite=throughput|protocol=h2c|case=h2_multiplex_w1|payload=64k|workers=1|connections_accepted=0|connections_active=0|event_poll_syscalls=0|event_wakeups=0|event_wait_errors=0|event_queue_depth_peak=0|h1_connections=0|h1_read_syscalls=0|h1_write_syscalls=0|h2_connections=1|h2_connections_active=1|h2_streams_total=4001|h2_streams_timed_out=0|h2_streams_active=0|h2_streams_active_peak=1|h2_streams_per_connection_peak=1|h2_read_syscalls=21255|h2_write_syscalls=9243|h3_connections=0|h3_connections_active=0|h3_streams_total=0|h3_streams_active=0|h3_streams_active_peak=0|h3_streams_per_connection_peak=0|h3_queue_depth_peak=0|h3_udp_recv_syscalls=0|h3_udp_send_syscalls=0|h3_ack_deferred=0|h3_credit_stalls=0
STATS|suite=throughput|protocol=h2c|case=h2_multiplex_w8|payload=64k|workers=8|connections_accepted=1|connections_active=0|event_poll_syscalls=1|event_wakeups=1|event_wait_errors=0|event_queue_depth_peak=0|h1_connections=0|h1_read_syscalls=0|h1_write_syscalls=0|h2_connections=1|h2_connections_active=1|h2_streams_total=4001|h2_streams_timed_out=0|h2_streams_active=0|h2_streams_active_peak=8|h2_streams_per_connection_peak=8|h2_read_syscalls=1072|h2_write_syscalls=16009|h3_connections=0|h3_connections_active=0|h3_streams_total=0|h3_streams_active=0|h3_streams_active_peak=0|h3_streams_per_connection_peak=0|h3_queue_depth_peak=0|h3_udp_recv_syscalls=0|h3_udp_send_syscalls=0|h3_ack_deferred=0|h3_credit_stalls=0
STATS|suite=throughput|protocol=h2c|case=h2_multiplex_w8|payload=64k|workers=8|connections_accepted=0|connections_active=0|event_poll_syscalls=0|event_wakeups=0|event_wait_errors=0|event_queue_depth_peak=0|h1_connections=0|h1_read_syscalls=0|h1_write_syscalls=0|h2_connections=1|h2_connections_active=1|h2_streams_total=4001|h2_streams_timed_out=0|h2_streams_active=0|h2_streams_active_peak=8|h2_streams_per_connection_peak=8|h2_read_syscalls=21915|h2_write_syscalls=6693|h3_connections=0|h3_connections_active=0|h3_streams_total=0|h3_streams_active=0|h3_streams_active_peak=0|h3_streams_per_connection_peak=0|h3_queue_depth_peak=0|h3_udp_recv_syscalls=0|h3_udp_send_syscalls=0|h3_ack_deferred=0|h3_credit_stalls=0
STATS|suite=throughput|protocol=h2c|case=h2_multiplex_w32|payload=64k|workers=32|connections_accepted=1|connections_active=0|event_poll_syscalls=1|event_wakeups=1|event_wait_errors=0|event_queue_depth_peak=0|h1_connections=0|h1_read_syscalls=0|h1_write_syscalls=0|h2_connections=1|h2_connections_active=1|h2_streams_total=4001|h2_streams_timed_out=0|h2_streams_active=0|h2_streams_active_peak=32|h2_streams_per_connection_peak=32|h2_read_syscalls=419|h2_write_syscalls=16010|h3_connections=0|h3_connections_active=0|h3_streams_total=0|h3_streams_active=0|h3_streams_active_peak=0|h3_streams_per_connection_peak=0|h3_queue_depth_peak=0|h3_udp_recv_syscalls=0|h3_udp_send_syscalls=0|h3_ack_deferred=0|h3_credit_stalls=0
STATS|suite=throughput|protocol=h2c|case=h2_multiplex_w32|payload=64k|workers=32|connections_accepted=0|connections_active=0|event_poll_syscalls=0|event_wakeups=0|event_wait_errors=0|event_queue_depth_peak=0|h1_connections=0|h1_read_syscalls=0|h1_write_syscalls=0|h2_connections=1|h2_connections_active=1|h2_streams_total=4001|h2_streams_timed_out=0|h2_streams_active=0|h2_streams_active_peak=32|h2_streams_per_connection_peak=32|h2_read_syscalls=16761|h2_write_syscalls=1302|h3_connections=0|h3_connections_active=0|h3_streams_total=0|h3_streams_active=0|h3_streams_active_peak=0|h3_streams_per_connection_peak=0|h3_queue_depth_peak=0|h3_udp_recv_syscalls=0|h3_udp_send_syscalls=0|h3_ack_deferred=0|h3_credit_stalls=0
~~~

### Cross-Machine
~~~text
NETWORK|role=client|status=not_configured|target_scope=remote|reason=COURIERUST_REMOTE_URL_not_set
~~~

### Fuzz
~~~text
FUZZ|target=h2_frame|status=ok|runs=smoke|duration_s=76|corpus=fuzz/corpus/h2_frame|reason=command_exit_0
FUZZ|target=hpack_block|status=ok|runs=smoke|duration_s=21|corpus=fuzz/corpus/hpack_block|reason=command_exit_0
FUZZ|target=h1_request|status=ok|runs=smoke|duration_s=22|corpus=fuzz/corpus/h1_request|reason=command_exit_0
FUZZ|target=h2_connection|status=ok|runs=smoke|duration_s=23|corpus=fuzz/corpus/h2_connection|reason=command_exit_0
~~~

### Interop Validation
~~~text
courierust vs mainstream HTTP stack — interop validation
INTEROP|case=courierust_client_h1_to_hyper_h1|ok
INTEROP|case=courierust_client_h2c_to_hyper_h2|ok
INTEROP|case=hyper_client_h1_to_courierust_h1|ok
INTEROP|case=hyper_client_h2c_to_courierust_h2|ok
INTEROP|case=reqwest_h1_to_courierust_h1|ok
INTEROP|case=reqwest_h2c_to_courierust_h2|ok
INTEROP|case=courierust_h2c_large_body_to_hyper_h2|ok
INTEROP|case=courierust_h1_slow_reader_to_hyper_h1|ok
INTEROP|case=tls_rejects_untrusted_certificate|ok
INTEROP|case=tls_rejects_hostname_mismatch|ok
INTEROP|case=tls_alpn_downgrade_to_h1|ok
INTEROP|case=tls_h2_alpn_rejected|ok
INTEROP|case=h1_connection_close_honored|ok
INTEROP|case=courierust_h2_client_survives_peer_goaway|ok
INTEROP|case=h3_self_roundtrip|ok
INTEROP|case=h3_self_connection_reuse|ok
INTEROP|case=h3_self_large_body_flow_control|ok
INTEROP|case=h3_self_multiplex_concurrent|ok
INTEROP|all_cases_passed
~~~
### TLS Interop
~~~text
No output was captured for this benchmark.
~~~