courierust 1.0.6

A bare-metal 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: 6096cf849ffcb33e16d132d01a0741b7fcdb0e7c
- 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: [34779266779](https://github.com/blueokanna/Courierust/actions/runs/34779266779)

## 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 | 18637.2 | 0.000 | 52.58 | 57.03 | 61.48 | 65.46 | 77.85 | 32.36 | 53.51 | 101.34 | 7.13 | 91.95 | 1.48 | 2000 |
| h1_sequential | h1 | sequential | 1k | 1 | 4 | 4000 | 18147.0 | 18.582 | 54.67 | 57.21 | 62.17 | 65.38 | 71.64 | 30.57 | 55.16 | 90.78 | 5.71 | 80.43 | 1.31 | 2000 |
| h1_sequential | h1 | sequential | 64k | 1 | 4 | 4000 | 15227.1 | 997.920 | 66.48 | 76.16 | 79.15 | 82.44 | 99.97 | 39.00 | 66.44 | 122.88 | 11.90 | 115.65 | 1.50 | 2000 |
| h1_parallel_w1 | h1 | parallel | 1k | 1 | 4 | 4000 | 22968.5 | 23.520 | 43.19 | 46.97 | 51.04 | 53.72 | 60.66 | 9.31 | 43.72 | 99.71 | 6.28 | 83.02 | 1.40 | 2000 |
| h1_parallel_w4 | h1 | parallel | 1k | 4 | 4 | 4000 | 70456.6 | 72.148 | 50.37 | 63.09 | 76.96 | 90.66 | 122.47 | 7.88 | 52.63 | 802.86 | 32.29 | 498.82 | 2.43 | 2000 |
| h1_parallel_w8 | h1 | parallel | 1k | 8 | 8 | 4000 | 110893.6 | 113.555 | 54.63 | 83.52 | 122.27 | 154.75 | 265.70 | 8.14 | 68.68 | 2564.99 | 102.26 | 1328.47 | 4.86 | 2000 |
| h2_multiplex_w1 | h2c | multiplex | 1k | 1 | 4 | 4000 | 16128.0 | 16.515 | 63.82 | 67.26 | 69.97 | 72.69 | 77.67 | 41.33 | 62.30 | 86.95 | 6.96 | 86.01 | 1.22 | 2000 |
| h2_multiplex_w8 | h2c | multiplex | 1k | 8 | 4 | 4000 | 59840.4 | 61.277 | 124.47 | 143.38 | 178.74 | 200.17 | 230.34 | 52.88 | 131.90 | 273.09 | 31.78 | 258.12 | 1.85 | 2000 |
| h2_multiplex_w32 | h2c | multiplex | 1k | 32 | 4 | 4000 | 81256.7 | 83.207 | 385.69 | 406.90 | 425.96 | 444.91 | 530.75 | 130.42 | 386.61 | 619.75 | 42.30 | 577.61 | 1.38 | 2016 |
| h2_multiplex_w1 | h2c | multiplex | 64k | 1 | 4 | 4000 | 9405.8 | 616.417 | 100.16 | 122.16 | 132.50 | 140.96 | 148.58 | 62.20 | 106.46 | 191.03 | 18.97 | 164.56 | 1.48 | 2000 |
| h2_multiplex_w8 | h2c | multiplex | 64k | 8 | 4 | 4000 | 27970.8 | 1833.096 | 289.34 | 326.20 | 359.10 | 384.15 | 452.14 | 71.62 | 284.04 | 661.14 | 69.40 | 625.53 | 1.56 | 2000 |
| h2_multiplex_w32 | h2c | multiplex | 64k | 32 | 4 | 4000 | 9531.1 | 624.627 | 1668.14 | 1832.67 | 2006.63 | 2160.71 | 5241.29 | 132.29 | 3121.39 | 207246.76 | 17066.18 | 207147.95 | 3.14 | 2016 |
| https_h2_sequential | https+h2 | sequential | empty | 1 | 4 | 2000 | 17250.6 | 0.000 | 58.46 | 60.49 | 62.24 | 63.34 | 70.30 | 43.15 | 57.94 | 119.19 | 4.49 | 83.31 | 1.20 | 2000 |
| https_h2_sequential | https+h2 | sequential | 1k | 1 | 4 | 2000 | 10774.2 | 11.033 | 89.22 | 104.35 | 121.24 | 123.08 | 128.86 | 46.48 | 92.79 | 135.35 | 19.45 | 135.29 | 1.44 | 2000 |
| https_h2_sequential | https+h2 | sequential | 64k | 1 | 4 | 2000 | 3538.5 | 231.902 | 276.10 | 290.22 | 305.39 | 311.56 | 324.52 | 261.89 | 282.57 | 359.08 | 14.96 | 341.61 | 1.18 | 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 | 23494.2 | 0.094 | 45.10 | 54.21 | 55.60 | 56.56 | 61.77 | 19.33 | 42.53 | 75.80 | 11.46 | 72.25 | 1.37 | 2000 |
| courierust_client_to_hyper | client | h1 | courierust | hyper | 1k | 1 | 4 | courierust_max_connections_per_host | 1 | 2 | valid | - | 4000 | 27079.4 | 27.729 | 32.76 | 47.94 | 48.87 | 49.70 | 53.55 | 9.30 | 36.86 | 66.41 | 10.18 | 64.99 | 1.63 | 4000 |
| reqwest_client_to_hyper | client | h1 | reqwest | hyper | 1k | 1 | 4 | reqwest_pool_max_idle_per_host | 1 | 2 | valid | - | 4000 | 14521.9 | 14.870 | 61.32 | 77.19 | 101.15 | 104.74 | 113.03 | 45.71 | 68.78 | 129.23 | 19.34 | 124.96 | 1.84 | 4000 |
| reqwest_client_to_courierust | server | h1 | reqwest | courierust | 1k | 1 | 4 | reqwest_pool_max_idle_per_host | 1 | 2 | valid | - | 4000 | 12311.6 | 12.607 | 80.72 | 84.10 | 89.12 | 93.20 | 103.81 | 59.23 | 81.17 | 154.26 | 6.93 | 122.52 | 1.29 | 4000 |
| reqwest_client_to_hyper | server | h1 | reqwest | hyper | 1k | 1 | 4 | reqwest_pool_max_idle_per_host | 1 | 2 | valid | - | 4000 | 12372.1 | 12.669 | 71.27 | 96.62 | 115.72 | 122.43 | 129.72 | 47.38 | 80.79 | 1007.84 | 26.59 | 155.55 | 1.82 | 4000 |
| courierust_client_to_hyper | client | h1 | courierust | hyper | 1k | 8 | 4 | courierust_max_connections_per_host | 8 | 2 | valid | - | 4000 | 142476.5 | 145.896 | 46.93 | 68.00 | 85.07 | 96.72 | 165.83 | 11.48 | 53.28 | 583.13 | 32.29 | 334.63 | 3.53 | 4000 |
| reqwest_client_to_hyper | client | h1 | reqwest | hyper | 1k | 8 | 4 | reqwest_pool_max_idle_per_host | 8 | 2 | valid | - | 4000 | 46067.7 | 47.173 | 168.82 | 182.66 | 200.65 | 223.56 | 277.43 | 64.88 | 172.01 | 684.61 | 33.73 | 476.40 | 1.64 | 4000 |
| courierust_client_to_hyper | client | h1 | courierust | hyper | 64k | 1 | 4 | courierust_max_connections_per_host | 1 | 2 | valid | - | 4000 | 20471.7 | 1341.632 | 47.57 | 59.70 | 62.90 | 63.91 | 70.50 | 29.08 | 48.82 | 82.91 | 10.69 | 79.61 | 1.48 | 4000 |
| reqwest_client_to_hyper | client | h1 | reqwest | hyper | 64k | 1 | 4 | reqwest_pool_max_idle_per_host | 1 | 2 | valid | - | 4000 | 11557.3 | 757.421 | 83.09 | 92.60 | 106.40 | 108.53 | 119.09 | 62.68 | 86.50 | 213.15 | 13.42 | 161.50 | 1.43 | 4000 |
| reqwest_client_to_courierust | server | h1 | reqwest | courierust | 64k | 1 | 4 | reqwest_pool_max_idle_per_host | 1 | 2 | valid | - | 4000 | 7487.3 | 490.685 | 131.65 | 145.73 | 161.69 | 177.08 | 197.18 | 85.17 | 133.52 | 258.49 | 21.92 | 218.22 | 1.50 | 4000 |
| reqwest_client_to_hyper | server | h1 | reqwest | hyper | 64k | 1 | 4 | reqwest_pool_max_idle_per_host | 1 | 2 | valid | - | 4000 | 11672.4 | 764.959 | 83.24 | 96.11 | 104.83 | 106.64 | 116.28 | 54.76 | 85.64 | 242.03 | 14.26 | 165.98 | 1.40 | 4000 |
| courierust_client_to_hyper | client | h2c | courierust | hyper | 1k | 1 | 4 | courierust_max_connections_per_host | 1 | 2 | valid | - | 4000 | 11067.7 | 11.333 | 88.57 | 94.61 | 119.09 | 121.36 | 128.11 | 45.12 | 90.33 | 159.17 | 16.52 | 141.37 | 1.45 | 4000 |
| reqwest_client_to_hyper | client | h2c | reqwest | hyper | 1k | 1 | 4 | reqwest_pool_max_idle_per_host | 1 | 2 | valid | - | 4000 | 11806.8 | 12.090 | 84.64 | 90.25 | 108.94 | 111.10 | 127.44 | 59.22 | 84.63 | 540.82 | 16.94 | 138.24 | 1.51 | 4000 |
| reqwest_client_to_courierust | server | h2c | reqwest | courierust | 1k | 1 | 4 | reqwest_pool_max_idle_per_host | 1 | 2 | valid | - | 4000 | 11989.1 | 12.277 | 84.37 | 88.43 | 105.00 | 106.34 | 116.79 | 59.12 | 83.34 | 146.75 | 14.11 | 132.76 | 1.38 | 4000 |
| reqwest_client_to_hyper | server | h2c | reqwest | hyper | 1k | 1 | 4 | reqwest_pool_max_idle_per_host | 1 | 2 | valid | - | 4000 | 12343.3 | 12.640 | 75.99 | 87.41 | 106.39 | 109.74 | 115.37 | 55.52 | 80.95 | 302.44 | 14.14 | 133.91 | 1.52 | 4000 |
| courierust_h2_conn1xw32 | client | h2c | courierust | hyper | 1k | 32 | 4 | courierust_max_connections_per_host | 1 | 2 | valid | - | 4000 | 71514.7 | 73.231 | 421.66 | 484.74 | 556.03 | 601.58 | 722.33 | 55.37 | 429.24 | 1021.16 | 100.50 | 879.84 | 1.71 | 4000 |
| courierust_h2_conn4xw8 | client | h2c | courierust | hyper | 1k | 32 | 4 | courierust_max_connections_per_host | 4 | 2 | valid | - | 4000 | 95167.6 | 97.452 | 278.70 | 385.10 | 500.48 | 579.73 | 820.61 | 35.63 | 304.10 | 1620.22 | 160.68 | 1581.20 | 2.94 | 4000 |
| courierust_h2_conn8xw4 | client | h2c | courierust | hyper | 1k | 32 | 4 | courierust_max_connections_per_host | 8 | 2 | valid | - | 4000 | 95898.5 | 98.200 | 282.54 | 381.58 | 496.48 | 563.09 | 722.83 | 29.05 | 301.13 | 1341.68 | 145.55 | 1001.22 | 2.56 | 4000 |
| courierust_client_to_hyper | client | h2c | courierust | hyper | 1k | 8 | 4 | courierust_max_connections_per_host | 8 | 2 | valid | - | 4000 | 74861.5 | 76.658 | 96.30 | 122.24 | 152.73 | 173.47 | 273.29 | 25.06 | 103.49 | 1010.35 | 49.49 | 522.63 | 2.84 | 4000 |
| reqwest_client_to_hyper | client | h2c | reqwest | hyper | 1k | 8 | 4 | reqwest_pool_max_idle_per_host | 8 | 2 | valid | - | 4000 | 47852.0 | 49.000 | 158.94 | 192.63 | 227.57 | 249.51 | 300.08 | 53.93 | 164.77 | 461.96 | 47.71 | 359.98 | 1.89 | 4000 |
| courierust_client_to_hyper | client | h2c | courierust | hyper | 64k | 1 | 4 | courierust_max_connections_per_host | 1 | 2 | valid | - | 4000 | 10433.2 | 683.749 | 97.31 | 103.63 | 106.54 | 108.31 | 118.79 | 70.69 | 95.82 | 169.96 | 9.84 | 131.58 | 1.22 | 4000 |
| reqwest_client_to_hyper | client | h2c | reqwest | hyper | 64k | 1 | 4 | reqwest_pool_max_idle_per_host | 1 | 2 | valid | - | 4000 | 10149.5 | 665.158 | 93.05 | 103.82 | 122.50 | 126.44 | 136.81 | 73.21 | 98.49 | 172.61 | 14.40 | 159.15 | 1.47 | 4000 |
| reqwest_client_to_courierust | server | h2c | reqwest | courierust | 64k | 1 | 4 | reqwest_pool_max_idle_per_host | 1 | 2 | valid | - | 4000 | 10511.0 | 688.848 | 91.31 | 106.84 | 119.50 | 123.02 | 139.13 | 69.63 | 95.11 | 224.54 | 16.65 | 163.95 | 1.52 | 4000 |
| reqwest_client_to_hyper | server | h2c | reqwest | hyper | 64k | 1 | 4 | reqwest_pool_max_idle_per_host | 1 | 2 | valid | - | 4000 | 9714.3 | 636.636 | 98.25 | 110.82 | 125.86 | 147.38 | 154.36 | 71.33 | 102.91 | 190.83 | 17.24 | 170.92 | 1.57 | 4000 |
| courierust_h2c_large_body_to_hyper | client | h2c | courierust | hyper | 64k | 1 | 4 | courierust_max_connections_per_host | 1 | 2 | valid | - | 64 | 836.4 | 54.817 | 1253.12 | 1290.50 | 1314.13 | 1322.58 | 1335.90 | 1060.99 | 1195.51 | 1378.42 | 102.49 | 1378.42 | 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 | 1609.3 | 105.466 | 601.86 | 667.55 | 714.81 | 721.78 | 723.85 | 551.49 | 621.29 | 735.23 | 53.92 | 735.23 | 1.20 | 64 |
| courierust_h3_client_to_courierust | client | h3 | courierust-h3 | courierust-h3 | 1k | 1 | 4 | courierust_max_connections_per_host | 1 | 2 | valid | - | 4000 | 7799.9 | 7.987 | 132.62 | 140.00 | 156.28 | 159.16 | 168.23 | 78.37 | 128.18 | 217.28 | 19.92 | 181.37 | 1.27 | 4000 |
| quinn_h3_client_to_courierust | client | h3 | quinn+h3 | courierust-h3 | 1k | 1 | 4 | quinn_single_connection | 1 | 2 | valid | - | 4000 | 6602.5 | 6.761 | 153.73 | 161.75 | 181.09 | 190.28 | 206.79 | 109.90 | 151.42 | 350.56 | 20.58 | 223.00 | 1.35 | 4000 |
| courierust_h3_client_to_courierust | client | h3 | courierust-h3 | courierust-h3 | 64k | 1 | 4 | courierust_max_connections_per_host | 1 | 2 | valid | - | 4000 | 2286.0 | 149.816 | 429.75 | 439.84 | 464.96 | 526.92 | 571.57 | 390.13 | 437.41 | 730.98 | 34.69 | 613.75 | 1.33 | 4000 |
| quinn_h3_client_to_courierust | client | h3 | quinn+h3 | courierust-h3 | 64k | 1 | 4 | quinn_single_connection | 1 | 2 | valid | - | 4000 | 1926.8 | 126.274 | 551.40 | 570.80 | 582.75 | 589.56 | 603.24 | 411.80 | 518.95 | 729.39 | 61.09 | 627.97 | 1.09 | 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 | 163.93 | - | - | - | - |
| idle_partial_herd | pool | linux | probe_blocked | false | 200 | 2 | na | - | - | - | - |
| slow_sender_herd | event | linux | ok | true | 16 | 2 | 427.43 | probe_ok | 10000 | 16 | 394.27 |

## 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.287 | - | - | - | - | - | - | - | - | - | - | - | - |
| h3_sequential | reuse | 1 | 1000 | 155.571 | - | 6427.9 | 157.2 | 169.7 | 186.9 | 196.3 | 74.53 | 155.52 | 211.09 | 24.01 | 203.65 | 1.25 | 1000 |
| h3_parallel | reuse | 8 | 1000 | 26.272 | - | 38062.8 | 201.5 | 221.9 | 245.7 | 332.2 | 104.90 | 207.09 | 387.72 | 34.27 | 367.52 | 1.65 | 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^1.32) | 1.318 | 1.447 | 0.029171 | -498.8368 | 0.9911 | 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) | 1.119 | 1.333 | 0.032924 | -721.6934 | 0.9912 | 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) | 1.107 | 1.169 | 0.062758 | -804.3466 | 0.9972 | 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.28) | 1.279 | 1.411 | 0.090831 | -2371.8073 | 0.9881 | 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.28) | 0.283 | 1.476 | 0.841362 | 1722.2136 | 0.9721 | 4 |
| http | courierust | get_roundtrip | alloc_bytes | O(n) | 0.979 | 0.998 | 1.999800 | 2038.9662 | 1.0000 | 4 |
| http | reqwest_hyper | get_roundtrip | time_ns | O(n^0.25) | 0.248 | 0.306 | 0.217040 | 96990.7676 | 0.8451 | 4 |
| http | reqwest_hyper | get_roundtrip | alloc_bytes | O(n^0.85) | 0.847 | 0.992 | 2.453951 | 57370.4233 | 0.9966 | 4 |
| headers | courierust | get_with_headers | time_ns | O(n^0.30) | 0.297 | 0.297 | 942.803065 | 59843.1108 | 0.9838 | 3 |
| headers | courierust | get_with_headers | alloc_bytes | O(n) | 0.857 | 0.857 | 883.890238 | 4442.7400 | 1.0000 | 3 |
| headers | reqwest_hyper | get_with_headers | time_ns | fixed-cost dominated | 0.255 | 0.255 | 117.232857 | 102974.0250 | 0.0281 | 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.999 | 0.999 | 0.624221 | 165.9104 | 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) | 1.022 | 1.022 | 0.767112 | -122.0850 | 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.80) | 0.797 | 0.797 | 0.082136 | 4085.3305 | 0.9999 | 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.28) | 1.276 | 1.276 | 17.872676 | -38025.4584 | 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.18) | 1.177 | 1.177 | 18.810801 | -87737.0511 | 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 | 7.0232 | 15.2802 | 0.460 |
| codec | encode_unmasked | alloc_bytes | 64 | 0.0000 | 0.0000 | NaN |
| codec | encode_masked | time_ns | 64 | 20.0002 | 51.3055 | 0.390 |
| codec | encode_masked | alloc_bytes | 64 | 0.0000 | 64.0000 | 0.000 |
| codec | encode_unmasked | time_ns | 1024 | 12.1740 | 25.5405 | 0.477 |
| codec | encode_unmasked | alloc_bytes | 1024 | 0.0000 | 0.0000 | NaN |
| codec | encode_masked | time_ns | 1024 | 56.0770 | 72.1410 | 0.777 |
| codec | encode_masked | alloc_bytes | 1024 | 0.0000 | 1024.0000 | 0.000 |
| codec | encode_unmasked | time_ns | 16384 | 671.7400 | 243.8350 | 2.755 |
| codec | encode_unmasked | alloc_bytes | 16384 | 0.0000 | 0.0000 | NaN |
| codec | encode_masked | time_ns | 16384 | 603.7400 | 387.0100 | 1.560 |
| codec | encode_masked | alloc_bytes | 16384 | 0.0000 | 16384.0000 | 0.000 |
| codec | encode_unmasked | time_ns | 262144 | 4926.2250 | 5419.7500 | 0.909 |
| codec | encode_unmasked | alloc_bytes | 262144 | 0.0000 | 0.0000 | NaN |
| codec | encode_masked | time_ns | 262144 | 12994.5750 | 13416.9250 | 0.969 |
| codec | encode_masked | alloc_bytes | 262144 | 0.0000 | 262144.0000 | 0.000 |
| codec | encode_unmasked | time_ns | 1048576 | 30633.3000 | 34416.8250 | 0.890 |
| codec | encode_unmasked | alloc_bytes | 1048576 | 0.0000 | 0.0000 | NaN |
| codec | encode_masked | time_ns | 1048576 | 65658.8750 | 94854.7750 | 0.692 |
| codec | encode_masked | alloc_bytes | 1048576 | 0.0000 | 1048576.0000 | 0.000 |
| codec | utf8_validate | time_ns | 4608 | 1398.1330 | 1397.9360 | 1.000 |
| http | get_roundtrip | time_ns | 1024 | 43680.1731 | 55207.2736 | 0.791 |
| http | get_roundtrip | alloc_bytes | 1024 | 4157.8219 | 26714.0398 | 0.156 |
| http | get_roundtrip | time_ns | 16384 | 53647.6095 | 93732.8667 | 0.572 |
| http | get_roundtrip | alloc_bytes | 16384 | 34830.8667 | 51458.8381 | 0.677 |
| http | get_roundtrip | time_ns | 262144 | 117479.2000 | 218782.6800 | 0.537 |
| http | get_roundtrip | alloc_bytes | 262144 | 526144.1200 | 805370.0000 | 0.653 |
| http | get_roundtrip | time_ns | 1048576 | 909518.8400 | 308497.1200 | 2.948 |
| http | get_roundtrip | alloc_bytes | 1048576 | 2099013.0000 | 2605099.2800 | 0.806 |
| headers | get_with_headers | time_ns | 4 | 60260.3750 | 122541.8050 | 0.492 |
| headers | get_with_headers | time_ns | 16 | 79120.3950 | 80976.1900 | 0.977 |
| headers | get_with_headers | time_ns | 64 | 119344.0200 | 115251.6400 | 1.036 |
| deflate | fresh_vs_reused_compressible | time_ns | 1024 | 3330.2250 | 880.4450 | 3.782 |
| deflate | fresh_vs_reused_compressible | time_ns | 65536 | 47309.6000 | 40994.6000 | 1.154 |
| deflate | fresh_vs_reused_compressible | time_ns | 1048576 | 804428.6000 | 654714.3000 | 1.229 |
| deflate | fresh_vs_reused_incompressible | time_ns | 1024 | 7945.1200 | 5480.9100 | 1.450 |
| deflate | fresh_vs_reused_incompressible | time_ns | 65536 | 1063612.6500 | 1106419.4000 | 0.961 |
| deflate | fresh_vs_reused_incompressible | time_ns | 1048576 | 19641832.7000 | 18704487.3000 | 1.050 |

### Space: cost of one idle connection

| implementation | connections | live KiB/conn | RSS KiB/conn |
|---|---:|---:|---:|
| courierust_event | 65 | 9.85 | 7.94 |
| courierust_blocking | 65 | 32.63 | 17.00 |
| hyper_tokio | 65 | 18.91 | 9.06 |

### Time: selected scaling points

| family | implementation | operation | n (bytes) | ns/op |
|---|---|---|---:|---:|
| codec | courierust | encode_unmasked | 64 | 7.0232 |
| codec | tungstenite | encode_unmasked | 64 | 15.2802 |
| codec | courierust | encode_masked | 64 | 20.0002 |
| codec | tungstenite | encode_masked | 64 | 51.3055 |
| codec | courierust | encode_unmasked | 1024 | 12.1740 |
| codec | tungstenite | encode_unmasked | 1024 | 25.5405 |
| codec | courierust | encode_masked | 1024 | 56.0770 |
| codec | tungstenite | encode_masked | 1024 | 72.1410 |
| codec | courierust | encode_unmasked | 16384 | 671.7400 |
| codec | tungstenite | encode_unmasked | 16384 | 243.8350 |
| codec | courierust | encode_masked | 16384 | 603.7400 |
| codec | tungstenite | encode_masked | 16384 | 387.0100 |
| codec | courierust | encode_unmasked | 262144 | 4926.2250 |
| codec | tungstenite | encode_unmasked | 262144 | 5419.7500 |
| codec | courierust | encode_masked | 262144 | 12994.5750 |
| codec | tungstenite | encode_masked | 262144 | 13416.9250 |
| codec | courierust | encode_unmasked | 1048576 | 30633.3000 |
| codec | tungstenite | encode_unmasked | 1048576 | 34416.8250 |
| codec | courierust | encode_masked | 1048576 | 65658.8750 |
| codec | tungstenite | encode_masked | 1048576 | 94854.7750 |
| http | courierust | get_roundtrip | 1024 | 43680.1731 |
| http | reqwest_hyper | get_roundtrip | 1024 | 55207.2736 |
| http | courierust | get_roundtrip | 16384 | 53647.6095 |
| http | reqwest_hyper | get_roundtrip | 16384 | 93732.8667 |
| http | courierust | get_roundtrip | 262144 | 117479.2000 |
| http | reqwest_hyper | get_roundtrip | 262144 | 218782.6800 |
| http | courierust | get_roundtrip | 1048576 | 909518.8400 |
| http | reqwest_hyper | get_roundtrip | 1048576 | 308497.1200 |

## 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 | 860 | 609 | 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 | 609 | 859 | 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 | 261 | 379 | 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 | 377 | 260 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| h2c | h2_multiplex_w1 | 64k | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 4001 | 1 | 1 | 8069 | 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 | 20125 | 8090 | 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 | 1871 | 16008 | 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 | 17418 | 2503 | 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 | 580 | 16013 | 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 | 16244 | 593 | 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 | 66 | 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=214.625|rps=18637.2|response_mbps=0.000|p50_us=52.58|p75_us=57.03|p90_us=61.48|p95_us=65.46|p99_us=77.85|min_us=32.36|mean_us=53.51|max_us=101.34|stddev_us=7.13|p999_us=91.95|tail_ratio=1.48|cv=0.13|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=220.423|rps=18147.0|response_mbps=18.582|p50_us=54.67|p75_us=57.21|p90_us=62.17|p95_us=65.38|p99_us=71.64|min_us=30.57|mean_us=55.16|max_us=90.78|stddev_us=5.71|p999_us=80.43|tail_ratio=1.31|cv=0.10|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=262.690|rps=15227.1|response_mbps=997.920|p50_us=66.48|p75_us=76.16|p90_us=79.15|p95_us=82.44|p99_us=99.97|min_us=39.00|mean_us=66.44|max_us=122.88|stddev_us=11.90|p999_us=115.65|tail_ratio=1.50|cv=0.18|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=174.152|rps=22968.5|response_mbps=23.520|p50_us=43.19|p75_us=46.97|p90_us=51.04|p95_us=53.72|p99_us=60.66|min_us=9.31|mean_us=43.72|max_us=99.71|stddev_us=6.28|p999_us=83.02|tail_ratio=1.40|cv=0.14|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=56.773|rps=70456.6|response_mbps=72.148|p50_us=50.37|p75_us=63.09|p90_us=76.96|p95_us=90.66|p99_us=122.47|min_us=7.88|mean_us=52.63|max_us=802.86|stddev_us=32.29|p999_us=498.82|tail_ratio=2.43|cv=0.61|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=36.071|rps=110893.6|response_mbps=113.555|p50_us=54.63|p75_us=83.52|p90_us=122.27|p95_us=154.75|p99_us=265.70|min_us=8.14|mean_us=68.68|max_us=2564.99|stddev_us=102.26|p999_us=1328.47|tail_ratio=4.86|cv=1.49|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=248.016|rps=16128.0|response_mbps=16.515|p50_us=63.82|p75_us=67.26|p90_us=69.97|p95_us=72.69|p99_us=77.67|min_us=41.33|mean_us=62.30|max_us=86.95|stddev_us=6.96|p999_us=86.01|tail_ratio=1.22|cv=0.11|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=66.844|rps=59840.4|response_mbps=61.277|p50_us=124.47|p75_us=143.38|p90_us=178.74|p95_us=200.17|p99_us=230.34|min_us=52.88|mean_us=131.90|max_us=273.09|stddev_us=31.78|p999_us=258.12|tail_ratio=1.85|cv=0.24|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=860|h2_write_syscalls=609|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=609|h2_write_syscalls=859|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=49.227|rps=81256.7|response_mbps=83.207|p50_us=385.69|p75_us=406.90|p90_us=425.96|p95_us=444.91|p99_us=530.75|min_us=130.42|mean_us=386.61|max_us=619.75|stddev_us=42.30|p999_us=577.61|tail_ratio=1.38|cv=0.11|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=0|h2_streams_active_peak=32|h2_streams_per_connection_peak=32|h2_read_syscalls=261|h2_write_syscalls=379|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=377|h2_write_syscalls=260|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=425.271|rps=9405.8|response_mbps=616.417|p50_us=100.16|p75_us=122.16|p90_us=132.50|p95_us=140.96|p99_us=148.58|min_us=62.20|mean_us=106.46|max_us=191.03|stddev_us=18.97|p999_us=164.56|tail_ratio=1.48|cv=0.18|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=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=1|h2_streams_per_connection_peak=1|h2_read_syscalls=8069|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=20125|h2_write_syscalls=8090|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=143.006|rps=27970.8|response_mbps=1833.096|p50_us=289.34|p75_us=326.20|p90_us=359.10|p95_us=384.15|p99_us=452.14|min_us=71.62|mean_us=284.04|max_us=661.14|stddev_us=69.40|p999_us=625.53|tail_ratio=1.56|cv=0.24|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=1871|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_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=17418|h2_write_syscalls=2503|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=419.681|rps=9531.1|response_mbps=624.627|p50_us=1668.14|p75_us=1832.67|p90_us=2006.63|p95_us=2160.71|p99_us=5241.29|min_us=132.29|mean_us=3121.39|max_us=207246.76|stddev_us=17066.18|p999_us=207147.95|tail_ratio=3.14|cv=5.47|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=580|h2_write_syscalls=16013|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=16244|h2_write_syscalls=593|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=115.938|rps=17250.6|response_mbps=0.000|p50_us=58.46|p75_us=60.49|p90_us=62.24|p95_us=63.34|p99_us=70.30|min_us=43.15|mean_us=57.94|max_us=119.19|stddev_us=4.49|p999_us=83.31|tail_ratio=1.20|cv=0.08|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=185.628|rps=10774.2|response_mbps=11.033|p50_us=89.22|p75_us=104.35|p90_us=121.24|p95_us=123.08|p99_us=128.86|min_us=46.48|mean_us=92.79|max_us=135.35|stddev_us=19.45|p999_us=135.29|tail_ratio=1.44|cv=0.21|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=565.204|rps=3538.5|response_mbps=231.902|p50_us=276.10|p75_us=290.22|p90_us=305.39|p95_us=311.56|p99_us=324.52|min_us=261.89|mean_us=282.57|max_us=359.08|stddev_us=14.96|p999_us=341.61|tail_ratio=1.18|cv=0.05|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=85.128|rps=23494.2|response_mbps=0.094|p50_us=45.10|p75_us=54.21|p90_us=55.60|p95_us=56.56|p99_us=61.77|min_us=19.33|mean_us=42.53|max_us=75.80|stddev_us=11.46|p999_us=72.25|tail_ratio=1.37|cv=0.27|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=147.714|rps=27079.4|response_mbps=27.729|p50_us=32.76|p75_us=47.94|p90_us=48.87|p95_us=49.70|p99_us=53.55|min_us=9.30|mean_us=36.86|max_us=66.41|stddev_us=10.18|p999_us=64.99|tail_ratio=1.63|cv=0.28|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=275.446|rps=14521.9|response_mbps=14.870|p50_us=61.32|p75_us=77.19|p90_us=101.15|p95_us=104.74|p99_us=113.03|min_us=45.71|mean_us=68.78|max_us=129.23|stddev_us=19.34|p999_us=124.96|tail_ratio=1.84|cv=0.28|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=324.896|rps=12311.6|response_mbps=12.607|p50_us=80.72|p75_us=84.10|p90_us=89.12|p95_us=93.20|p99_us=103.81|min_us=59.23|mean_us=81.17|max_us=154.26|stddev_us=6.93|p999_us=122.52|tail_ratio=1.29|cv=0.09|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=323.309|rps=12372.1|response_mbps=12.669|p50_us=71.27|p75_us=96.62|p90_us=115.72|p95_us=122.43|p99_us=129.72|min_us=47.38|mean_us=80.79|max_us=1007.84|stddev_us=26.59|p999_us=155.55|tail_ratio=1.82|cv=0.33|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=28.075|rps=142476.5|response_mbps=145.896|p50_us=46.93|p75_us=68.00|p90_us=85.07|p95_us=96.72|p99_us=165.83|min_us=11.48|mean_us=53.28|max_us=583.13|stddev_us=32.29|p999_us=334.63|tail_ratio=3.53|cv=0.61|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=86.829|rps=46067.7|response_mbps=47.173|p50_us=168.82|p75_us=182.66|p90_us=200.65|p95_us=223.56|p99_us=277.43|min_us=64.88|mean_us=172.01|max_us=684.61|stddev_us=33.73|p999_us=476.40|tail_ratio=1.64|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=195.392|rps=20471.7|response_mbps=1341.632|p50_us=47.57|p75_us=59.70|p90_us=62.90|p95_us=63.91|p99_us=70.50|min_us=29.08|mean_us=48.82|max_us=82.91|stddev_us=10.69|p999_us=79.61|tail_ratio=1.48|cv=0.22|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=346.101|rps=11557.3|response_mbps=757.421|p50_us=83.09|p75_us=92.60|p90_us=106.40|p95_us=108.53|p99_us=119.09|min_us=62.68|mean_us=86.50|max_us=213.15|stddev_us=13.42|p999_us=161.50|tail_ratio=1.43|cv=0.16|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=534.241|rps=7487.3|response_mbps=490.685|p50_us=131.65|p75_us=145.73|p90_us=161.69|p95_us=177.08|p99_us=197.18|min_us=85.17|mean_us=133.52|max_us=258.49|stddev_us=21.92|p999_us=218.22|tail_ratio=1.50|cv=0.16|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=342.690|rps=11672.4|response_mbps=764.959|p50_us=83.24|p75_us=96.11|p90_us=104.83|p95_us=106.64|p99_us=116.28|min_us=54.76|mean_us=85.64|max_us=242.03|stddev_us=14.26|p999_us=165.98|tail_ratio=1.40|cv=0.17|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=361.412|rps=11067.7|response_mbps=11.333|p50_us=88.57|p75_us=94.61|p90_us=119.09|p95_us=121.36|p99_us=128.11|min_us=45.12|mean_us=90.33|max_us=159.17|stddev_us=16.52|p999_us=141.37|tail_ratio=1.45|cv=0.18|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=338.789|rps=11806.8|response_mbps=12.090|p50_us=84.64|p75_us=90.25|p90_us=108.94|p95_us=111.10|p99_us=127.44|min_us=59.22|mean_us=84.63|max_us=540.82|stddev_us=16.94|p999_us=138.24|tail_ratio=1.51|cv=0.20|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=333.637|rps=11989.1|response_mbps=12.277|p50_us=84.37|p75_us=88.43|p90_us=105.00|p95_us=106.34|p99_us=116.79|min_us=59.12|mean_us=83.34|max_us=146.75|stddev_us=14.11|p999_us=132.76|tail_ratio=1.38|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=324.063|rps=12343.3|response_mbps=12.640|p50_us=75.99|p75_us=87.41|p90_us=106.39|p95_us=109.74|p99_us=115.37|min_us=55.52|mean_us=80.95|max_us=302.44|stddev_us=14.14|p999_us=133.91|tail_ratio=1.52|cv=0.17|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=55.933|rps=71514.7|response_mbps=73.231|p50_us=421.66|p75_us=484.74|p90_us=556.03|p95_us=601.58|p99_us=722.33|min_us=55.37|mean_us=429.24|max_us=1021.16|stddev_us=100.50|p999_us=879.84|tail_ratio=1.71|cv=0.23|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=42.031|rps=95167.6|response_mbps=97.452|p50_us=278.70|p75_us=385.10|p90_us=500.48|p95_us=579.73|p99_us=820.61|min_us=35.63|mean_us=304.10|max_us=1620.22|stddev_us=160.68|p999_us=1581.20|tail_ratio=2.94|cv=0.53|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=41.711|rps=95898.5|response_mbps=98.200|p50_us=282.54|p75_us=381.58|p90_us=496.48|p95_us=563.09|p99_us=722.83|min_us=29.05|mean_us=301.13|max_us=1341.68|stddev_us=145.55|p999_us=1001.22|tail_ratio=2.56|cv=0.48|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=53.432|rps=74861.5|response_mbps=76.658|p50_us=96.30|p75_us=122.24|p90_us=152.73|p95_us=173.47|p99_us=273.29|min_us=25.06|mean_us=103.49|max_us=1010.35|stddev_us=49.49|p999_us=522.63|tail_ratio=2.84|cv=0.48|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=83.591|rps=47852.0|response_mbps=49.000|p50_us=158.94|p75_us=192.63|p90_us=227.57|p95_us=249.51|p99_us=300.08|min_us=53.93|mean_us=164.77|max_us=461.96|stddev_us=47.71|p999_us=359.98|tail_ratio=1.89|cv=0.29|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=383.392|rps=10433.2|response_mbps=683.749|p50_us=97.31|p75_us=103.63|p90_us=106.54|p95_us=108.31|p99_us=118.79|min_us=70.69|mean_us=95.82|max_us=169.96|stddev_us=9.84|p999_us=131.58|tail_ratio=1.22|cv=0.10|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=394.108|rps=10149.5|response_mbps=665.158|p50_us=93.05|p75_us=103.82|p90_us=122.50|p95_us=126.44|p99_us=136.81|min_us=73.21|mean_us=98.49|max_us=172.61|stddev_us=14.40|p999_us=159.15|tail_ratio=1.47|cv=0.15|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=380.554|rps=10511.0|response_mbps=688.848|p50_us=91.31|p75_us=106.84|p90_us=119.50|p95_us=123.02|p99_us=139.13|min_us=69.63|mean_us=95.11|max_us=224.54|stddev_us=16.65|p999_us=163.95|tail_ratio=1.52|cv=0.18|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=411.764|rps=9714.3|response_mbps=636.636|p50_us=98.25|p75_us=110.82|p90_us=125.86|p95_us=147.38|p99_us=154.36|min_us=71.33|mean_us=102.91|max_us=190.83|stddev_us=17.24|p999_us=170.92|tail_ratio=1.57|cv=0.17|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=76.515|rps=836.4|response_mbps=54.817|p50_us=1253.12|p75_us=1290.50|p90_us=1314.13|p95_us=1322.58|p99_us=1335.90|min_us=1060.99|mean_us=1195.51|max_us=1378.42|stddev_us=102.49|p999_us=1378.42|tail_ratio=1.07|cv=0.09|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=39.769|rps=1609.3|response_mbps=105.466|p50_us=601.86|p75_us=667.55|p90_us=714.81|p95_us=721.78|p99_us=723.85|min_us=551.49|mean_us=621.29|max_us=735.23|stddev_us=53.92|p999_us=735.23|tail_ratio=1.20|cv=0.09|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=512.828|rps=7799.9|response_mbps=7.987|p50_us=132.62|p75_us=140.00|p90_us=156.28|p95_us=159.16|p99_us=168.23|min_us=78.37|mean_us=128.18|max_us=217.28|stddev_us=19.92|p999_us=181.37|tail_ratio=1.27|cv=0.16|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=605.828|rps=6602.5|response_mbps=6.761|p50_us=153.73|p75_us=161.75|p90_us=181.09|p95_us=190.28|p99_us=206.79|min_us=109.90|mean_us=151.42|max_us=350.56|stddev_us=20.58|p999_us=223.00|tail_ratio=1.35|cv=0.14|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=1749.775|rps=2286.0|response_mbps=149.816|p50_us=429.75|p75_us=439.84|p90_us=464.96|p95_us=526.92|p99_us=571.57|min_us=390.13|mean_us=437.41|max_us=730.98|stddev_us=34.69|p999_us=613.75|tail_ratio=1.33|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=2075.990|rps=1926.8|response_mbps=126.274|p50_us=551.40|p75_us=570.80|p90_us=582.75|p95_us=589.56|p99_us=603.24|min_us=411.80|mean_us=518.95|max_us=729.39|stddev_us=61.09|p999_us=627.97|tail_ratio=1.09|cv=0.12|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=163.93
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=427.43|byte_delay_us=10000|wall_ms=394.27
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.287
RESULT|suite=h3|case=h3_sequential|protocol=h3|mode=reuse|payload=empty|bytes=0|workers=1|requests=1000|elapsed_ms=155.571|rps=6427.9|p50_us=157.2|p75_us=169.7|p90_us=186.9|p99_us=196.3|min_us=74.53|mean_us=155.52|max_us=211.09|stddev_us=24.01|p999_us=203.65|tail_ratio=1.25|cv=0.15|samples=1000
RESULT|suite=h3|case=h3_parallel|protocol=h3|mode=reuse|payload=empty|bytes=0|workers=8|requests=1000|elapsed_ms=26.272|rps=38062.8|p50_us=201.5|p75_us=221.9|p90_us=245.7|p99_us=332.2|min_us=104.90|mean_us=207.09|max_us=387.72|stddev_us=34.27|p999_us=367.52|tail_ratio=1.65|cv=0.17|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=860|h2_write_syscalls=609|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=609|h2_write_syscalls=859|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=0|h2_streams_active_peak=32|h2_streams_per_connection_peak=32|h2_read_syscalls=261|h2_write_syscalls=379|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=377|h2_write_syscalls=260|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=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=1|h2_streams_per_connection_peak=1|h2_read_syscalls=8069|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=20125|h2_write_syscalls=8090|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=1871|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_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=17418|h2_write_syscalls=2503|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=580|h2_write_syscalls=16013|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=16244|h2_write_syscalls=593|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=66|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.
~~~