Conversation
5947101 to
5e36210
Compare
|
GCOVR code coverage report https://377.corosio.prtest3.cppalliance.org/gcovr/index.html Build time: 2026-10-02 03:41:39 UTC |
|
GCOVR code coverage report https://377.corosio.prtest3.cppalliance.org/gcovr/index.html Build time: 2026-10-02 22:17:12 UTC |
Benchmark report
|
| Platform | Backend | Benchmark | Metric | Base | Head | Δ | Noise |
|---|---|---|---|---|---|---|---|
| windows | iocp | accept_churn/burst/100 | ops_per_sec | 152.2 ops/s | 149.1 ops/s | 🔴▼ -2.52% | 0.60% |
| windows | iocp | accept_churn/burst_lockless/100 | ops_per_sec | 156.7 ops/s | 151.9 ops/s | 🔴▼ -3.02% | 0.71% |
linux — full results (226 benchmarks, 5 iterations, 1.5s each)
accept_churn
| Benchmark | Backend | Metric | Base | Head | Δ | Noise |
|---|---|---|---|---|---|---|
| burst/10 | epoll | ops_per_sec | 1.86K ops/s | 1.88K ops/s | 🟢▲ +0.78% | 0.91% |
| burst/10 | uring | ops_per_sec | 1.72K ops/s | 1.70K ops/s | 🟢▲ +0.08% | 1.25% |
| burst/100 | epoll | ops_per_sec | 187.7 ops/s | 189.4 ops/s | 🟢▲ +0.35% | 0.99% |
| burst/100 | uring | ops_per_sec | 174.5 ops/s | 173.5 ops/s | 🔴▼ -0.09% | 0.76% |
| burst_lockless/10 | epoll | ops_per_sec | 1.88K ops/s | 1.89K ops/s | 🟢▲ +0.25% | 0.95% |
| burst_lockless/10 | uring | ops_per_sec | 1.83K ops/s | 1.82K ops/s | 🔴▼ -0.26% | 0.75% |
| burst_lockless/100 | epoll | ops_per_sec | 189.1 ops/s | 190.4 ops/s | 🟢▲ +0.26% | 0.88% |
| burst_lockless/100 | uring | ops_per_sec | 187.0 ops/s | 185.6 ops/s | 🔴▼ -0.39% | 0.77% |
| concurrent/1 | epoll | ops_per_sec | 14.86K ops/s | 14.89K ops/s | 🟢▲ +0.21% | 0.50% |
| concurrent/1 | uring | ops_per_sec | 12.70K ops/s | 12.68K ops/s | 🟢▲ +0.13% | 1.08% |
| concurrent/16 | epoll | ops_per_sec | 14.85K ops/s | 14.97K ops/s | 🟢▲ +0.38% | 0.92% |
| concurrent/16 | uring | ops_per_sec | 12.54K ops/s | 12.56K ops/s | 🟢▲ +0.37% | 1.30% |
| concurrent/4 | epoll | ops_per_sec | 14.87K ops/s | 14.90K ops/s | 🟢▲ +0.36% | 0.45% |
| concurrent/4 | uring | ops_per_sec | 12.66K ops/s | 12.63K ops/s | 🟢▲ +0.36% | 1.08% |
| sequential | epoll | ops_per_sec | 14.83K ops/s | 14.84K ops/s | 🟢▲ +0.07% | 0.53% |
| sequential | uring | ops_per_sec | 12.76K ops/s | 12.70K ops/s | 🔴▼ -0.40% | 1.03% |
| sequential_lockless | epoll | ops_per_sec | 14.96K ops/s | 14.96K ops/s | 🔴▼ -0.14% | 0.55% |
| sequential_lockless | uring | ops_per_sec | 13.68K ops/s | 13.62K ops/s | 🔴▼ -1.24% | 1.03% |
fan_out
| Benchmark | Backend | Metric | Base | Head | Δ | Noise |
|---|---|---|---|---|---|---|
| concurrent_parents/1 | epoll | ops_per_sec | 3.68K ops/s | 3.70K ops/s | 🔴▼ -0.01% | 0.99% |
| concurrent_parents/1 | uring | ops_per_sec | 3.45K ops/s | 3.44K ops/s | 🔴▼ -0.02% | 1.20% |
| concurrent_parents/16 | epoll | ops_per_sec | 3.57K ops/s | 3.59K ops/s | 🟢▲ +0.20% | 0.98% |
| concurrent_parents/16 | uring | ops_per_sec | 3.32K ops/s | 3.30K ops/s | 🔴▼ -0.24% | 0.47% |
| concurrent_parents/4 | epoll | ops_per_sec | 3.59K ops/s | 3.60K ops/s | 🟢▲ +0.11% | 0.97% |
| concurrent_parents/4 | uring | ops_per_sec | 3.36K ops/s | 3.33K ops/s | 🔴▼ -0.03% | 1.18% |
| concurrent_parents_lockless/1 | epoll | ops_per_sec | 3.72K ops/s | 3.73K ops/s | 🟢▲ +0.28% | 0.23% |
| concurrent_parents_lockless/1 | uring | ops_per_sec | 3.66K ops/s | 3.65K ops/s | 🔴▼ -0.21% | 0.34% |
| concurrent_parents_lockless/16 | epoll | ops_per_sec | 3.61K ops/s | 3.61K ops/s | 🔴▼ -0.06% | 0.14% |
| concurrent_parents_lockless/16 | uring | ops_per_sec | 3.53K ops/s | 3.51K ops/s | 🔴▼ -0.41% | 0.37% |
| concurrent_parents_lockless/4 | epoll | ops_per_sec | 3.62K ops/s | 3.62K ops/s | 🔴▼ -0.03% | 0.15% |
| concurrent_parents_lockless/4 | uring | ops_per_sec | 3.55K ops/s | 3.55K ops/s | 🔴▼ -0.42% | 0.43% |
| fork_join/1 | epoll | ops_per_sec | 54.57K ops/s | 54.93K ops/s | 🟢▲ +0.20% | 0.92% |
| fork_join/1 | uring | ops_per_sec | 53.22K ops/s | 53.18K ops/s | 🔴▼ -0.26% | 0.33% |
| fork_join/16 | epoll | ops_per_sec | 3.69K ops/s | 3.68K ops/s | 🟢▲ +0.01% | 0.29% |
| fork_join/16 | uring | ops_per_sec | 3.43K ops/s | 3.43K ops/s | 🔴▼ -0.23% | 0.27% |
| fork_join/4 | epoll | ops_per_sec | 14.62K ops/s | 14.66K ops/s | 🟢▲ +0.14% | 0.74% |
| fork_join/4 | uring | ops_per_sec | 13.73K ops/s | 13.72K ops/s | 🔴▼ -0.17% | 0.33% |
| fork_join/64 | epoll | ops_per_sec | 897.2 ops/s | 896.8 ops/s | 🟢▲ +0.04% | 0.21% |
| fork_join/64 | uring | ops_per_sec | 812.8 ops/s | 812.5 ops/s | 🔴▼ -0.12% | 0.17% |
| fork_join_lockless/1 | epoll | ops_per_sec | 55.32K ops/s | 55.54K ops/s | 🟢▲ +0.42% | 0.30% |
| fork_join_lockless/1 | uring | ops_per_sec | 56.00K ops/s | 55.69K ops/s | 🔴▼ -0.61% | 0.24% |
| fork_join_lockless/16 | epoll | ops_per_sec | 3.72K ops/s | 3.73K ops/s | 🟢▲ +0.09% | 0.18% |
| fork_join_lockless/16 | uring | ops_per_sec | 3.67K ops/s | 3.66K ops/s | 🔴▼ -0.43% | 1.04% |
| fork_join_lockless/4 | epoll | ops_per_sec | 14.78K ops/s | 14.81K ops/s | 🟢▲ +0.19% | 0.16% |
| fork_join_lockless/4 | uring | ops_per_sec | 14.64K ops/s | 14.52K ops/s | 🔴▼ -0.53% | 1.08% |
| fork_join_lockless/64 | epoll | ops_per_sec | 907.5 ops/s | 907.0 ops/s | 🔴▼ -0.25% | 0.22% |
| fork_join_lockless/64 | uring | ops_per_sec | 870.3 ops/s | 867.6 ops/s | 🔴▼ -0.05% | 1.04% |
| nested/16 | epoll | ops_per_sec | 891.0 ops/s | 895.0 ops/s | 🟢▲ +0.17% | 1.05% |
| nested/16 | uring | ops_per_sec | 809.4 ops/s | 805.0 ops/s | 🟢▲ +0.01% | 1.38% |
| nested/4 | epoll | ops_per_sec | 3.66K ops/s | 3.67K ops/s | 🟢▲ +0.29% | 0.57% |
| nested/4 | uring | ops_per_sec | 3.43K ops/s | 3.40K ops/s | 🔴▼ -0.25% | 1.47% |
| nested_lockless/16 | epoll | ops_per_sec | 900.4 ops/s | 904.4 ops/s | 🟢▲ +0.11% | 0.93% |
| nested_lockless/16 | uring | ops_per_sec | 860.7 ops/s | 856.4 ops/s | 🔴▼ -0.24% | 1.19% |
| nested_lockless/4 | epoll | ops_per_sec | 3.70K ops/s | 3.72K ops/s | 🟢▲ +0.20% | 1.07% |
| nested_lockless/4 | uring | ops_per_sec | 3.65K ops/s | 3.62K ops/s | 🔴▼ -0.32% | 1.22% |
http_server
| Benchmark | Backend | Metric | Base | Head | Δ | Noise |
|---|---|---|---|---|---|---|
| concurrent/1 | epoll | ops_per_sec | 55.10K ops/s | 55.11K ops/s | 🔴▼ -0.05% | 0.45% |
| concurrent/1 | uring | ops_per_sec | 53.62K ops/s | 53.73K ops/s | 🟢▲ +0.29% | 0.27% |
| concurrent/16 | epoll | ops_per_sec | 57.75K ops/s | 57.81K ops/s | 🟢▲ +0.01% | 0.25% |
| concurrent/16 | uring | ops_per_sec | 53.22K ops/s | 53.04K ops/s | 🔴▼ -0.07% | 0.98% |
| concurrent/32 | epoll | ops_per_sec | 57.33K ops/s | 57.44K ops/s | 🟢▲ +0.25% | 0.20% |
| concurrent/32 | uring | ops_per_sec | 53.14K ops/s | 52.60K ops/s | 🔴▼ -0.33% | 1.37% |
| concurrent/4 | epoll | ops_per_sec | 57.16K ops/s | 57.21K ops/s | 🟢▲ +0.08% | 0.16% |
| concurrent/4 | uring | ops_per_sec | 53.11K ops/s | 53.21K ops/s | 🟢▲ +0.20% | 0.24% |
| multithread/1 | epoll | ops_per_sec | 57.23K ops/s | 57.40K ops/s | 🟢▲ +0.41% | 0.26% |
| multithread/1 | uring | ops_per_sec | 53.10K ops/s | 52.68K ops/s | 🔴▼ -0.28% | 1.31% |
| multithread/16 | epoll | ops_per_sec | 161.6K ops/s | 162.1K ops/s | 🟢▲ +0.05% | 0.61% |
| multithread/16 | uring | ops_per_sec | 74.91K ops/s | 75.17K ops/s | 🟢▲ +0.54% | 19.53% |
| multithread/2 | epoll | ops_per_sec | 86.61K ops/s | 87.19K ops/s | 🟢▲ +0.84% | 0.32% |
| multithread/2 | uring | ops_per_sec | 90.67K ops/s | 90.44K ops/s | 🔴▼ -0.12% | 1.02% |
| multithread/4 | epoll | ops_per_sec | 157.3K ops/s | 158.7K ops/s | 🔴▼ -0.47% | 2.29% |
| multithread/4 | uring | ops_per_sec | 79.40K ops/s | 79.11K ops/s | 🔴▼ -0.69% | 1.14% |
| multithread/8 | epoll | ops_per_sec | 161.0K ops/s | 161.2K ops/s | 🔴▼ -0.17% | 0.54% |
| multithread/8 | uring | ops_per_sec | 77.16K ops/s | 77.23K ops/s | 🟢▲ +0.01% | 0.19% |
| single_conn | epoll | ops_per_sec | 55.20K ops/s | 54.99K ops/s | 🔴▼ -0.30% | 1.05% |
| single_conn | uring | ops_per_sec | 53.56K ops/s | 53.70K ops/s | 🟢▲ +0.29% | 0.13% |
| single_conn_lockless | epoll | ops_per_sec | 55.97K ops/s | 55.71K ops/s | 🔴▼ -0.22% | 1.03% |
| single_conn_lockless | uring | ops_per_sec | 56.18K ops/s | 56.35K ops/s | 🟢▲ +0.32% | 0.24% |
local_socket_latency
| Benchmark | Backend | Metric | Base | Head | Δ | Noise |
|---|---|---|---|---|---|---|
| concurrent/1 | epoll | latency_mean_ns | 7.12 µs | 7.25 µs | 🟢▲ +0.17% | 4.28% |
| concurrent/1 | uring | latency_mean_ns | 6.86 µs | 6.73 µs | 🟢▲ +0.29% | 5.00% |
| concurrent/16 | epoll | latency_mean_ns | 110.10 µs | 110.03 µs | 🔴▼ -0.22% | 1.02% |
| concurrent/16 | uring | latency_mean_ns | 108.19 µs | 108.68 µs | 🔴▼ -0.01% | 0.93% |
| concurrent/4 | epoll | latency_mean_ns | 27.87 µs | 27.62 µs | 🟢▲ +0.06% | 1.91% |
| concurrent/4 | uring | latency_mean_ns | 27.11 µs | 27.24 µs | 🔴▼ -0.78% | 0.89% |
| concurrent_lockless/1 | epoll | latency_mean_ns | 7.14 µs | 7.12 µs | 🔴▼ -0.14% | 4.57% |
| concurrent_lockless/1 | uring | latency_mean_ns | 6.56 µs | 6.83 µs | 🟢▲ +0.10% | 5.43% |
| concurrent_lockless/16 | epoll | latency_mean_ns | 108.51 µs | 108.23 µs | 🔴▼ -0.06% | 0.95% |
| concurrent_lockless/16 | uring | latency_mean_ns | 108.30 µs | 107.98 µs | 🟢▲ +0.58% | 0.82% |
| concurrent_lockless/4 | epoll | latency_mean_ns | 27.45 µs | 27.24 µs | 🟢▲ +1.88% | 1.28% |
| concurrent_lockless/4 | uring | latency_mean_ns | 27.01 µs | 26.93 µs | 🟢▲ +0.56% | 1.95% |
| pingpong/1 | epoll | latency_mean_ns | 7.06 µs | 7.18 µs | 🟢▲ +0.34% | 4.37% |
| pingpong/1 | uring | latency_mean_ns | 6.65 µs | 6.52 µs | 🟢▲ +0.84% | 2.62% |
| pingpong/1024 | epoll | latency_mean_ns | 7.90 µs | 8.00 µs | 🟢▲ +0.43% | 3.99% |
| pingpong/1024 | uring | latency_mean_ns | 7.38 µs | 7.20 µs | 🟢▲ +1.01% | 4.94% |
| pingpong/64 | epoll | latency_mean_ns | 7.27 µs | 7.37 µs | 🟢▲ +0.47% | 5.13% |
| pingpong/64 | uring | latency_mean_ns | 6.89 µs | 6.58 µs | 🟢▲ +1.10% | 5.15% |
| pingpong_lockless/1 | epoll | latency_mean_ns | 6.96 µs | 6.95 µs | 🔴▼ -0.09% | 0.36% |
| pingpong_lockless/1 | uring | latency_mean_ns | 6.67 µs | 6.52 µs | 🟢▲ +0.49% | 3.73% |
| pingpong_lockless/1024 | epoll | latency_mean_ns | 7.40 µs | 7.46 µs | 🟢▲ +0.13% | 4.40% |
| pingpong_lockless/1024 | uring | latency_mean_ns | 7.21 µs | 7.21 µs | 🔴▼ -0.11% | 4.90% |
| pingpong_lockless/64 | epoll | latency_mean_ns | 7.01 µs | 7.01 µs | 🟢▲ +0.03% | 0.35% |
| pingpong_lockless/64 | uring | latency_mean_ns | 6.84 µs | 6.70 µs | 🟢▲ +0.58% | 4.88% |
local_socket_throughput
| Benchmark | Backend | Metric | Base | Head | Δ | Noise |
|---|---|---|---|---|---|---|
| bidirectional/1024 | epoll | bytes_per_sec | 305.4 MB/s | 304.9 MB/s | 🟢▲ +0.32% | 1.26% |
| bidirectional/1024 | uring | bytes_per_sec | 302.4 MB/s | 303.2 MB/s | 🟢▲ +0.14% | 0.62% |
| bidirectional/1048576 | epoll | bytes_per_sec | 3.17 GB/s | 3.18 GB/s | 🔴▼ -0.25% | 2.31% |
| bidirectional/1048576 | uring | bytes_per_sec | 3.28 GB/s | 3.27 GB/s | 🟢▲ +1.77% | 3.82% |
| bidirectional/16384 | epoll | bytes_per_sec | 3.08 GB/s | 3.01 GB/s | 🟢▲ +0.48% | 4.88% |
| bidirectional/16384 | uring | bytes_per_sec | 2.42 GB/s | 2.41 GB/s | 🔴▼ -0.22% | 0.68% |
| bidirectional/262144 | epoll | bytes_per_sec | 3.16 GB/s | 3.13 GB/s | 🟢▲ +0.26% | 2.91% |
| bidirectional/262144 | uring | bytes_per_sec | 3.30 GB/s | 3.28 GB/s | 🔴▼ -1.54% | 1.98% |
| bidirectional/4096 | epoll | bytes_per_sec | 995.4 MB/s | 999.7 MB/s | 🟢▲ +0.20% | 0.61% |
| bidirectional/4096 | uring | bytes_per_sec | 996.2 MB/s | 986.2 MB/s | 🔴▼ -0.36% | 1.26% |
| bidirectional/65536 | epoll | bytes_per_sec | 2.95 GB/s | 2.94 GB/s | 🟢▲ +0.33% | 1.86% |
| bidirectional/65536 | uring | bytes_per_sec | 3.02 GB/s | 3.01 GB/s | 🔴▼ -0.63% | 1.25% |
| bidirectional_lockless/1024 | epoll | bytes_per_sec | 307.3 MB/s | 310.2 MB/s | 🟢▲ +0.54% | 1.21% |
| bidirectional_lockless/1024 | uring | bytes_per_sec | 303.9 MB/s | 304.4 MB/s | 🔴▼ -0.44% | 1.29% |
| bidirectional_lockless/1048576 | epoll | bytes_per_sec | 3.17 GB/s | 3.20 GB/s | 🔴▼ -0.15% | 2.52% |
| bidirectional_lockless/1048576 | uring | bytes_per_sec | 3.33 GB/s | 3.32 GB/s | 🔴▼ -1.96% | 4.43% |
| bidirectional_lockless/16384 | epoll | bytes_per_sec | 3.12 GB/s | 3.07 GB/s | 🟢▲ +1.20% | 5.06% |
| bidirectional_lockless/16384 | uring | bytes_per_sec | 2.64 GB/s | 2.64 GB/s | 🟢▲ +0.91% | 1.97% |
| bidirectional_lockless/262144 | epoll | bytes_per_sec | 3.16 GB/s | 3.14 GB/s | 🟢▲ +0.93% | 3.52% |
| bidirectional_lockless/262144 | uring | bytes_per_sec | 3.38 GB/s | 3.35 GB/s | 🔴▼ -1.66% | 2.33% |
| bidirectional_lockless/4096 | epoll | bytes_per_sec | 1.01 GB/s | 1.01 GB/s | 🔴▼ -0.34% | 1.42% |
| bidirectional_lockless/4096 | uring | bytes_per_sec | 998.4 MB/s | 993.6 MB/s | 🔴▼ -1.36% | 1.45% |
| bidirectional_lockless/65536 | epoll | bytes_per_sec | 2.97 GB/s | 2.96 GB/s | 🟢▲ +0.74% | 2.21% |
| bidirectional_lockless/65536 | uring | bytes_per_sec | 3.19 GB/s | 3.22 GB/s | 🔴▼ -0.81% | 2.22% |
| unidirectional/1024 | epoll | bytes_per_sec | 296.3 MB/s | 298.2 MB/s | 🟢▲ +0.39% | 1.13% |
| unidirectional/1024 | uring | bytes_per_sec | 302.3 MB/s | 301.8 MB/s | 🟢▲ +0.09% | 0.64% |
| unidirectional/1048576 | epoll | bytes_per_sec | 3.27 GB/s | 3.28 GB/s | 🔴▼ -0.13% | 3.20% |
| unidirectional/1048576 | uring | bytes_per_sec | 3.40 GB/s | 3.36 GB/s | 🔴▼ -0.91% | 4.60% |
| unidirectional/16384 | epoll | bytes_per_sec | 3.08 GB/s | 3.05 GB/s | 🟢▲ +0.63% | 3.79% |
| unidirectional/16384 | uring | bytes_per_sec | 2.66 GB/s | 2.65 GB/s | 🔴▼ -0.21% | 1.47% |
| unidirectional/262144 | epoll | bytes_per_sec | 3.23 GB/s | 3.28 GB/s | 🟢▲ +2.46% | 2.18% |
| unidirectional/262144 | uring | bytes_per_sec | 3.44 GB/s | 3.44 GB/s | 🔴▼ -1.08% | 2.44% |
| unidirectional/4096 | epoll | bytes_per_sec | 976.1 MB/s | 980.8 MB/s | 🟢▲ +0.68% | 0.53% |
| unidirectional/4096 | uring | bytes_per_sec | 997.5 MB/s | 994.1 MB/s | 🔴▼ -0.34% | 0.73% |
| unidirectional/65536 | epoll | bytes_per_sec | 3.22 GB/s | 3.23 GB/s | 🔴▼ -0.93% | 3.63% |
| unidirectional/65536 | uring | bytes_per_sec | 3.29 GB/s | 3.33 GB/s | 🟢▲ +1.93% | 2.30% |
| unidirectional_lockless/1024 | epoll | bytes_per_sec | 298.3 MB/s | 303.1 MB/s | 🟢▲ +1.28% | 1.45% |
| unidirectional_lockless/1024 | uring | bytes_per_sec | 305.4 MB/s | 304.7 MB/s | 🔴▼ -0.32% | 1.29% |
| unidirectional_lockless/1048576 | epoll | bytes_per_sec | 3.33 GB/s | 3.31 GB/s | 🔴▼ -1.16% | 3.39% |
| unidirectional_lockless/1048576 | uring | bytes_per_sec | 3.35 GB/s | 3.33 GB/s | 🟢▲ +0.42% | 4.35% |
| unidirectional_lockless/16384 | epoll | bytes_per_sec | 3.09 GB/s | 3.07 GB/s | 🟢▲ +2.01% | 3.33% |
| unidirectional_lockless/16384 | uring | bytes_per_sec | 2.68 GB/s | 2.64 GB/s | 🔴▼ -0.21% | 2.34% |
| unidirectional_lockless/262144 | epoll | bytes_per_sec | 3.28 GB/s | 3.30 GB/s | 🟢▲ +1.15% | 1.92% |
| unidirectional_lockless/262144 | uring | bytes_per_sec | 3.41 GB/s | 3.38 GB/s | 🔴▼ -1.27% | 2.76% |
| unidirectional_lockless/4096 | epoll | bytes_per_sec | 989.2 MB/s | 993.7 MB/s | 🟢▲ +0.52% | 0.77% |
| unidirectional_lockless/4096 | uring | bytes_per_sec | 994.2 MB/s | 996.1 MB/s | 🟢▲ +0.30% | 1.77% |
| unidirectional_lockless/65536 | epoll | bytes_per_sec | 3.26 GB/s | 3.28 GB/s | 🔴▼ -1.40% | 3.45% |
| unidirectional_lockless/65536 | uring | bytes_per_sec | 3.28 GB/s | 3.30 GB/s | 🔴▼ -0.05% | 2.13% |
socket_latency
| Benchmark | Backend | Metric | Base | Head | Δ | Noise |
|---|---|---|---|---|---|---|
| concurrent/1 | epoll | latency_mean_ns | 14.81 µs | 14.79 µs | 🟢▲ +0.05% | 0.22% |
| concurrent/1 | uring | latency_mean_ns | 14.46 µs | 14.54 µs | 🔴▼ -0.07% | 1.17% |
| concurrent/16 | epoll | latency_mean_ns | 232.67 µs | 233.55 µs | 🟢▲ +0.07% | 1.19% |
| concurrent/16 | uring | latency_mean_ns | 234.36 µs | 235.20 µs | 🔴▼ -0.03% | 1.08% |
| concurrent/4 | epoll | latency_mean_ns | 58.24 µs | 58.26 µs | 🔴▼ -0.06% | 0.17% |
| concurrent/4 | uring | latency_mean_ns | 58.15 µs | 58.35 µs | 🟢▲ +0.04% | 1.05% |
| concurrent_lockless/1 | epoll | latency_mean_ns | 14.62 µs | 14.70 µs | 🔴▼ -0.38% | 1.18% |
| concurrent_lockless/1 | uring | latency_mean_ns | 14.41 µs | 14.52 µs | 🔴▼ -0.32% | 1.19% |
| concurrent_lockless/16 | epoll | latency_mean_ns | 230.89 µs | 232.47 µs | 🔴▼ -0.40% | 1.23% |
| concurrent_lockless/16 | uring | latency_mean_ns | 234.90 µs | 234.95 µs | 🟢▲ +0.05% | 0.17% |
| concurrent_lockless/4 | epoll | latency_mean_ns | 57.65 µs | 58.02 µs | 🔴▼ -0.05% | 1.23% |
| concurrent_lockless/4 | uring | latency_mean_ns | 58.23 µs | 58.40 µs | 🔴▼ -0.20% | 0.36% |
| pingpong/1 | epoll | latency_mean_ns | 14.65 µs | 14.75 µs | 🔴▼ -0.23% | 1.10% |
| pingpong/1 | uring | latency_mean_ns | 14.41 µs | 14.32 µs | 🟢▲ +0.32% | 1.24% |
| pingpong/1024 | epoll | latency_mean_ns | 15.06 µs | 15.11 µs | 🔴▼ -0.41% | 0.27% |
| pingpong/1024 | uring | latency_mean_ns | 14.75 µs | 14.73 µs | 🔴▼ -0.21% | 1.03% |
| pingpong/64 | epoll | latency_mean_ns | 14.77 µs | 14.84 µs | 🔴▼ -0.54% | 0.24% |
| pingpong/64 | uring | latency_mean_ns | 14.47 µs | 14.42 µs | ⚪ 0.00% | 1.10% |
| pingpong_lockless/1 | epoll | latency_mean_ns | 14.61 µs | 14.62 µs | 🟢▲ +0.02% | 0.23% |
| pingpong_lockless/1 | uring | latency_mean_ns | 14.42 µs | 14.44 µs | 🟢▲ +0.02% | 0.44% |
| pingpong_lockless/1024 | epoll | latency_mean_ns | 14.96 µs | 14.97 µs | 🔴▼ -0.08% | 0.23% |
| pingpong_lockless/1024 | uring | latency_mean_ns | 14.69 µs | 14.76 µs | 🔴▼ -0.05% | 1.10% |
| pingpong_lockless/64 | epoll | latency_mean_ns | 14.70 µs | 14.70 µs | 🔴▼ -0.16% | 0.33% |
| pingpong_lockless/64 | uring | latency_mean_ns | 14.43 µs | 14.52 µs | 🔴▼ -0.15% | 1.28% |
socket_throughput
| Benchmark | Backend | Metric | Base | Head | Δ | Noise |
|---|---|---|---|---|---|---|
| bidirectional/1024 | epoll | bytes_per_sec | 133.9 MB/s | 134.1 MB/s | 🟢▲ +0.15% | 0.46% |
| bidirectional/1024 | uring | bytes_per_sec | 141.1 MB/s | 140.7 MB/s | 🔴▼ -0.01% | 0.91% |
| bidirectional/1048576 | epoll | bytes_per_sec | 3.33 GB/s | 3.24 GB/s | 🔴▼ -2.70% | 2.24% |
| bidirectional/1048576 | uring | bytes_per_sec | 3.24 GB/s | 3.20 GB/s | 🔴▼ -0.78% | 1.47% |
| bidirectional/16384 | epoll | bytes_per_sec | 1.64 GB/s | 1.64 GB/s | 🟢▲ +0.16% | 0.86% |
| bidirectional/16384 | uring | bytes_per_sec | 1.55 GB/s | 1.51 GB/s | 🔴▼ -2.29% | 1.17% |
| bidirectional/262144 | epoll | bytes_per_sec | 3.20 GB/s | 3.18 GB/s | 🔴▼ -0.78% | 1.38% |
| bidirectional/262144 | uring | bytes_per_sec | 3.18 GB/s | 3.16 GB/s | 🔴▼ -0.69% | 0.95% |
| bidirectional/4096 | epoll | bytes_per_sec | 506.1 MB/s | 506.0 MB/s | 🟢▲ +0.40% | 0.93% |
| bidirectional/4096 | uring | bytes_per_sec | 495.7 MB/s | 492.9 MB/s | 🔴▼ -0.40% | 0.91% |
| bidirectional/65536 | epoll | bytes_per_sec | 2.50 GB/s | 2.53 GB/s | 🟢▲ +0.57% | 2.07% |
| bidirectional/65536 | uring | bytes_per_sec | 2.76 GB/s | 2.74 GB/s | 🔴▼ -0.75% | 2.02% |
| bidirectional_lockless/1024 | epoll | bytes_per_sec | 135.6 MB/s | 134.5 MB/s | 🔴▼ -0.12% | 1.26% |
| bidirectional_lockless/1024 | uring | bytes_per_sec | 141.0 MB/s | 141.0 MB/s | 🟢▲ +0.32% | 1.01% |
| bidirectional_lockless/1048576 | epoll | bytes_per_sec | 3.24 GB/s | 3.23 GB/s | 🟢▲ +0.71% | 1.96% |
| bidirectional_lockless/1048576 | uring | bytes_per_sec | 3.31 GB/s | 3.32 GB/s | 🟢▲ +0.41% | 1.32% |
| bidirectional_lockless/16384 | epoll | bytes_per_sec | 1.63 GB/s | 1.64 GB/s | 🟢▲ +0.99% | 1.51% |
| bidirectional_lockless/16384 | uring | bytes_per_sec | 1.54 GB/s | 1.53 GB/s | 🔴▼ -0.13% | 0.94% |
| bidirectional_lockless/262144 | epoll | bytes_per_sec | 3.20 GB/s | 3.19 GB/s | 🔴▼ -0.55% | 1.03% |
| bidirectional_lockless/262144 | uring | bytes_per_sec | 3.22 GB/s | 3.23 GB/s | 🟢▲ +0.18% | 1.19% |
| bidirectional_lockless/4096 | epoll | bytes_per_sec | 510.0 MB/s | 509.2 MB/s | 🟢▲ +0.28% | 1.37% |
| bidirectional_lockless/4096 | uring | bytes_per_sec | 492.9 MB/s | 495.6 MB/s | 🟢▲ +0.55% | 0.43% |
| bidirectional_lockless/65536 | epoll | bytes_per_sec | 2.53 GB/s | 2.53 GB/s | 🟢▲ +0.28% | 2.97% |
| bidirectional_lockless/65536 | uring | bytes_per_sec | 2.82 GB/s | 2.81 GB/s | 🟢▲ +0.47% | 2.09% |
| multithread/2 | epoll | bytes_per_sec | 3.41 GB/s | 3.42 GB/s | 🟢▲ +0.37% | 0.79% |
| multithread/2 | uring | bytes_per_sec | 3.67 GB/s | 3.66 GB/s | 🔴▼ -0.05% | 0.37% |
| multithread/4 | epoll | bytes_per_sec | 4.84 GB/s | 4.86 GB/s | 🟢▲ +0.91% | 0.86% |
| multithread/4 | uring | bytes_per_sec | 5.06 GB/s | 5.07 GB/s | 🟢▲ +0.17% | 0.33% |
| multithread/8 | epoll | bytes_per_sec | 4.95 GB/s | 4.95 GB/s | ⚪ 0.00% | 0.28% |
| multithread/8 | uring | bytes_per_sec | 5.12 GB/s | 5.12 GB/s | 🔴▼ -0.11% | 0.40% |
| unidirectional/1024 | epoll | bytes_per_sec | 125.3 MB/s | 125.8 MB/s | 🟢▲ +0.23% | 0.58% |
| unidirectional/1024 | uring | bytes_per_sec | 138.9 MB/s | 140.1 MB/s | 🟢▲ +0.11% | 1.15% |
| unidirectional/1048576 | epoll | bytes_per_sec | 3.33 GB/s | 3.35 GB/s | 🔴▼ -0.54% | 1.38% |
| unidirectional/1048576 | uring | bytes_per_sec | 3.40 GB/s | 3.41 GB/s | 🔴▼ -0.01% | 1.03% |
| unidirectional/16384 | epoll | bytes_per_sec | 1.55 GB/s | 1.56 GB/s | 🟢▲ +0.35% | 0.97% |
| unidirectional/16384 | uring | bytes_per_sec | 1.56 GB/s | 1.54 GB/s | 🔴▼ -0.39% | 2.96% |
| unidirectional/262144 | epoll | bytes_per_sec | 3.31 GB/s | 3.32 GB/s | 🟢▲ +0.35% | 1.13% |
| unidirectional/262144 | uring | bytes_per_sec | 3.20 GB/s | 3.18 GB/s | 🔴▼ -0.95% | 1.66% |
| unidirectional/4096 | epoll | bytes_per_sec | 474.3 MB/s | 472.7 MB/s | 🟢▲ +0.32% | 1.24% |
| unidirectional/4096 | uring | bytes_per_sec | 493.9 MB/s | 496.1 MB/s | 🔴▼ -0.02% | 1.26% |
| unidirectional/65536 | epoll | bytes_per_sec | 2.73 GB/s | 2.60 GB/s | 🔴▼ -5.56% | 4.75% |
| unidirectional/65536 | uring | bytes_per_sec | 2.70 GB/s | 2.68 GB/s | 🔴▼ -2.09% | 4.58% |
| unidirectional_lockless/1024 | epoll | bytes_per_sec | 127.1 MB/s | 126.1 MB/s | 🟢▲ +0.12% | 1.62% |
| unidirectional_lockless/1024 | uring | bytes_per_sec | 139.3 MB/s | 139.8 MB/s | 🟢▲ +0.26% | 0.54% |
| unidirectional_lockless/1048576 | epoll | bytes_per_sec | 3.35 GB/s | 3.33 GB/s | 🔴▼ -0.99% | 0.74% |
| unidirectional_lockless/1048576 | uring | bytes_per_sec | 3.32 GB/s | 3.32 GB/s | 🔴▼ -0.03% | 0.73% |
| unidirectional_lockless/16384 | epoll | bytes_per_sec | 1.56 GB/s | 1.57 GB/s | 🟢▲ +0.61% | 1.09% |
| unidirectional_lockless/16384 | uring | bytes_per_sec | 1.61 GB/s | 1.60 GB/s | 🟢▲ +0.58% | 2.41% |
| unidirectional_lockless/262144 | epoll | bytes_per_sec | 3.34 GB/s | 3.32 GB/s | 🔴▼ -0.56% | 1.13% |
| unidirectional_lockless/262144 | uring | bytes_per_sec | 3.23 GB/s | 3.21 GB/s | 🔴▼ -1.11% | 1.03% |
| unidirectional_lockless/4096 | epoll | bytes_per_sec | 476.1 MB/s | 473.8 MB/s | 🔴▼ -0.14% | 1.33% |
| unidirectional_lockless/4096 | uring | bytes_per_sec | 492.6 MB/s | 489.7 MB/s | 🔴▼ -0.26% | 0.95% |
| unidirectional_lockless/65536 | epoll | bytes_per_sec | 2.77 GB/s | 2.76 GB/s | 🔴▼ -0.35% | 1.19% |
| unidirectional_lockless/65536 | uring | bytes_per_sec | 2.65 GB/s | 2.71 GB/s | 🟢▲ +1.24% | 2.23% |
windows — full results (77 benchmarks, 5 iterations, 1.5s each)
accept_churn
| Benchmark | Backend | Metric | Base | Head | Δ | Noise |
|---|---|---|---|---|---|---|
| burst/10 | iocp | ops_per_sec | 1.56K ops/s | 1.53K ops/s | 🔴▼ -1.57% | 0.33% |
| burst/100 | iocp | ops_per_sec | 152.2 ops/s | 149.1 ops/s | 🔴▼ -2.52% | 0.60% |
| burst_lockless/10 | iocp | ops_per_sec | 1.57K ops/s | 1.54K ops/s | 🔴▼ -1.85% | 0.48% |
| burst_lockless/100 | iocp | ops_per_sec | 156.7 ops/s | 151.9 ops/s | 🔴▼ -3.02% | 0.71% |
| concurrent/1 | iocp | ops_per_sec | 12.41K ops/s | 12.24K ops/s | 🔴▼ -1.62% | 1.51% |
| concurrent/16 | iocp | ops_per_sec | 13.33K ops/s | 13.25K ops/s | 🔴▼ -0.43% | 0.34% |
| concurrent/4 | iocp | ops_per_sec | 13.10K ops/s | 12.94K ops/s | 🔴▼ -1.23% | 0.32% |
| sequential | iocp | ops_per_sec | 12.37K ops/s | 12.14K ops/s | 🔴▼ -1.73% | 1.58% |
| sequential_lockless | iocp | ops_per_sec | 12.41K ops/s | 12.20K ops/s | 🔴▼ -1.81% | 1.50% |
fan_out
| Benchmark | Backend | Metric | Base | Head | Δ | Noise |
|---|---|---|---|---|---|---|
| concurrent_parents/1 | iocp | ops_per_sec | 7.19K ops/s | 7.18K ops/s | 🔴▼ -0.15% | 0.26% |
| concurrent_parents/16 | iocp | ops_per_sec | 6.42K ops/s | 6.43K ops/s | 🟢▲ +0.05% | 1.27% |
| concurrent_parents/4 | iocp | ops_per_sec | 6.90K ops/s | 6.90K ops/s | 🔴▼ -0.21% | 0.77% |
| concurrent_parents_lockless/1 | iocp | ops_per_sec | 7.19K ops/s | 7.18K ops/s | 🔴▼ -0.18% | 0.36% |
| concurrent_parents_lockless/16 | iocp | ops_per_sec | 6.46K ops/s | 6.44K ops/s | 🔴▼ -0.23% | 1.37% |
| concurrent_parents_lockless/4 | iocp | ops_per_sec | 6.94K ops/s | 6.94K ops/s | 🟢▲ +0.12% | 0.48% |
| fork_join/1 | iocp | ops_per_sec | 113.0K ops/s | 112.8K ops/s | 🔴▼ -0.10% | 0.43% |
| fork_join/16 | iocp | ops_per_sec | 7.18K ops/s | 7.14K ops/s | 🔴▼ -0.83% | 0.69% |
| fork_join/4 | iocp | ops_per_sec | 29.24K ops/s | 29.25K ops/s | 🔴▼ -0.06% | 0.25% |
| fork_join/64 | iocp | ops_per_sec | 1.72K ops/s | 1.73K ops/s | 🟢▲ +0.37% | 1.60% |
| fork_join_lockless/1 | iocp | ops_per_sec | 112.9K ops/s | 112.6K ops/s | 🔴▼ -0.04% | 0.42% |
| fork_join_lockless/16 | iocp | ops_per_sec | 7.17K ops/s | 7.20K ops/s | 🟢▲ +0.35% | 0.28% |
| fork_join_lockless/4 | iocp | ops_per_sec | 29.22K ops/s | 29.24K ops/s | 🟢▲ +0.13% | 0.25% |
| fork_join_lockless/64 | iocp | ops_per_sec | 1.73K ops/s | 1.73K ops/s | 🟢▲ +0.02% | 0.84% |
| nested/16 | iocp | ops_per_sec | 1.70K ops/s | 1.70K ops/s | 🔴▼ -0.03% | 0.77% |
| nested/4 | iocp | ops_per_sec | 7.02K ops/s | 7.04K ops/s | 🟢▲ +0.50% | 0.36% |
| nested_lockless/16 | iocp | ops_per_sec | 1.70K ops/s | 1.70K ops/s | 🟢▲ +0.25% | 0.81% |
| nested_lockless/4 | iocp | ops_per_sec | 7.03K ops/s | 7.02K ops/s | 🔴▼ -0.08% | 0.16% |
http_server
| Benchmark | Backend | Metric | Base | Head | Δ | Noise |
|---|---|---|---|---|---|---|
| concurrent/1 | iocp | ops_per_sec | 112.0K ops/s | 111.5K ops/s | 🔴▼ -0.30% | 0.29% |
| concurrent/16 | iocp | ops_per_sec | 108.7K ops/s | 108.0K ops/s | 🔴▼ -0.60% | 0.26% |
| concurrent/32 | iocp | ops_per_sec | 108.0K ops/s | 107.7K ops/s | 🔴▼ -0.37% | 0.27% |
| concurrent/4 | iocp | ops_per_sec | 109.4K ops/s | 109.2K ops/s | 🔴▼ -0.52% | 0.33% |
| multithread/1 | iocp | ops_per_sec | 107.9K ops/s | 107.7K ops/s | 🔴▼ -0.19% | 0.32% |
| multithread/16 | iocp | ops_per_sec | 271.0K ops/s | 271.3K ops/s | 🟢▲ +0.09% | 0.66% |
| multithread/2 | iocp | ops_per_sec | 182.2K ops/s | 182.2K ops/s | 🟢▲ +0.10% | 0.68% |
| multithread/4 | iocp | ops_per_sec | 227.5K ops/s | 228.9K ops/s | 🟢▲ +0.66% | 0.52% |
| multithread/8 | iocp | ops_per_sec | 269.9K ops/s | 272.5K ops/s | 🟢▲ +0.90% | 0.43% |
| single_conn | iocp | ops_per_sec | 111.7K ops/s | 111.2K ops/s | 🔴▼ -0.28% | 0.34% |
| single_conn_lockless | iocp | ops_per_sec | 111.7K ops/s | 111.4K ops/s | 🔴▼ -0.21% | 0.37% |
socket_latency
| Benchmark | Backend | Metric | Base | Head | Δ | Noise |
|---|---|---|---|---|---|---|
| concurrent/1 | iocp | latency_mean_ns | 7.61 µs | 7.60 µs | 🟢▲ +0.28% | 0.44% |
| concurrent/16 | iocp | latency_mean_ns | 133.24 µs | 126.02 µs | 🟢▲ +5.51% | 5.09% |
| concurrent/4 | iocp | latency_mean_ns | 30.62 µs | 30.54 µs | 🟢▲ +0.32% | 0.29% |
| concurrent_lockless/1 | iocp | latency_mean_ns | 7.61 µs | 7.60 µs | 🟢▲ +0.11% | 0.44% |
| concurrent_lockless/16 | iocp | latency_mean_ns | 121.92 µs | 122.20 µs | 🟢▲ +0.14% | 1.02% |
| concurrent_lockless/4 | iocp | latency_mean_ns | 30.60 µs | 30.44 µs | 🟢▲ +0.33% | 0.38% |
| pingpong/1 | iocp | latency_mean_ns | 7.59 µs | 7.60 µs | ⚪ 0.00% | 0.61% |
| pingpong/1024 | iocp | latency_mean_ns | 7.70 µs | 7.69 µs | 🟢▲ +0.02% | 0.40% |
| pingpong/64 | iocp | latency_mean_ns | 7.62 µs | 7.63 µs | 🔴▼ -0.12% | 0.38% |
| pingpong_lockless/1 | iocp | latency_mean_ns | 7.59 µs | 7.59 µs | 🟢▲ +0.09% | 0.58% |
| pingpong_lockless/1024 | iocp | latency_mean_ns | 7.71 µs | 7.69 µs | 🟢▲ +0.46% | 0.48% |
| pingpong_lockless/64 | iocp | latency_mean_ns | 7.60 µs | 7.62 µs | 🔴▼ -0.22% | 0.31% |
socket_throughput
| Benchmark | Backend | Metric | Base | Head | Δ | Noise |
|---|---|---|---|---|---|---|
| bidirectional/1024 | iocp | bytes_per_sec | 279.3 MB/s | 280.4 MB/s | 🟢▲ +0.40% | 0.59% |
| bidirectional/1048576 | iocp | bytes_per_sec | 4.42 GB/s | 4.40 GB/s | 🔴▼ -0.90% | 7.39% |
| bidirectional/16384 | iocp | bytes_per_sec | 3.71 GB/s | 3.70 GB/s | 🔴▼ -0.81% | 1.15% |
| bidirectional/262144 | iocp | bytes_per_sec | 9.50 GB/s | 9.34 GB/s | 🔴▼ -1.17% | 3.37% |
| bidirectional/4096 | iocp | bytes_per_sec | 1.07 GB/s | 1.08 GB/s | 🟢▲ +0.55% | 0.33% |
| bidirectional/65536 | iocp | bytes_per_sec | 8.89 GB/s | 8.75 GB/s | 🔴▼ -1.48% | 4.13% |
| bidirectional_lockless/1024 | iocp | bytes_per_sec | 279.2 MB/s | 280.8 MB/s | 🟢▲ +0.70% | 0.51% |
| bidirectional_lockless/1048576 | iocp | bytes_per_sec | 4.57 GB/s | 4.60 GB/s | 🔴▼ -1.24% | 7.18% |
| bidirectional_lockless/16384 | iocp | bytes_per_sec | 3.71 GB/s | 3.75 GB/s | 🟢▲ +1.09% | 0.76% |
| bidirectional_lockless/262144 | iocp | bytes_per_sec | 9.68 GB/s | 9.65 GB/s | 🟢▲ +0.57% | 1.10% |
| bidirectional_lockless/4096 | iocp | bytes_per_sec | 1.07 GB/s | 1.08 GB/s | 🟢▲ +0.11% | 0.49% |
| bidirectional_lockless/65536 | iocp | bytes_per_sec | 8.98 GB/s | 9.04 GB/s | 🟢▲ +1.83% | 1.98% |
| multithread/2 | iocp | bytes_per_sec | 12.71 GB/s | 12.77 GB/s | 🟢▲ +0.42% | 0.73% |
| multithread/4 | iocp | bytes_per_sec | 17.03 GB/s | 17.11 GB/s | 🟢▲ +0.09% | 1.44% |
| multithread/8 | iocp | bytes_per_sec | 18.30 GB/s | 18.47 GB/s | 🟢▲ +0.99% | 0.85% |
| unidirectional/1024 | iocp | bytes_per_sec | 283.0 MB/s | 284.6 MB/s | 🟢▲ +0.40% | 0.51% |
| unidirectional/1048576 | iocp | bytes_per_sec | 3.88 GB/s | 3.92 GB/s | 🟢▲ +2.42% | 3.75% |
| unidirectional/16384 | iocp | bytes_per_sec | 3.78 GB/s | 3.81 GB/s | 🟢▲ +0.98% | 0.46% |
| unidirectional/262144 | iocp | bytes_per_sec | 8.75 GB/s | 9.15 GB/s | 🟢▲ +3.21% | 4.74% |
| unidirectional/4096 | iocp | bytes_per_sec | 1.09 GB/s | 1.09 GB/s | 🟢▲ +0.07% | 0.39% |
| unidirectional/65536 | iocp | bytes_per_sec | 9.15 GB/s | 9.32 GB/s | 🟢▲ +2.15% | 1.42% |
| unidirectional_lockless/1024 | iocp | bytes_per_sec | 283.7 MB/s | 283.5 MB/s | 🟢▲ +0.09% | 0.41% |
| unidirectional_lockless/1048576 | iocp | bytes_per_sec | 4.21 GB/s | 4.21 GB/s | 🟢▲ +0.89% | 3.70% |
| unidirectional_lockless/16384 | iocp | bytes_per_sec | 3.76 GB/s | 3.81 GB/s | 🟢▲ +1.53% | 0.71% |
| unidirectional_lockless/262144 | iocp | bytes_per_sec | 9.63 GB/s | 9.68 GB/s | 🟢▲ +0.93% | 1.22% |
| unidirectional_lockless/4096 | iocp | bytes_per_sec | 1.09 GB/s | 1.09 GB/s | 🟢▲ +0.23% | 1.24% |
| unidirectional_lockless/65536 | iocp | bytes_per_sec | 9.20 GB/s | 9.40 GB/s | 🟢▲ +2.61% | 1.64% |
macos — full results (113 benchmarks, 5 iterations, 1.5s each)
accept_churn
| Benchmark | Backend | Metric | Base | Head | Δ | Noise |
|---|---|---|---|---|---|---|
| burst/10 | kqueue | ops_per_sec | 4.25K ops/s | 4.25K ops/s | 🟢▲ +0.12% | 0.28% |
| burst/100 | kqueue | ops_per_sec | 430.7 ops/s | 431.3 ops/s | 🟢▲ +0.18% | 0.81% |
| burst_lockless/10 | kqueue | ops_per_sec | 4.26K ops/s | 4.28K ops/s | 🟢▲ +0.32% | 0.93% |
| burst_lockless/100 | kqueue | ops_per_sec | 432.2 ops/s | 434.4 ops/s | 🟢▲ +0.66% | 0.54% |
| concurrent/1 | kqueue | ops_per_sec | 19.59K ops/s | 19.41K ops/s | 🔴▼ -0.66% | 0.76% |
| concurrent/16 | kqueue | ops_per_sec | 35.24K ops/s | 35.35K ops/s | 🟢▲ +0.30% | 0.87% |
| concurrent/4 | kqueue | ops_per_sec | 29.14K ops/s | 29.48K ops/s | 🟢▲ +0.79% | 1.27% |
| sequential | kqueue | ops_per_sec | 19.91K ops/s | 19.86K ops/s | 🔴▼ -0.17% | 0.71% |
| sequential_lockless | kqueue | ops_per_sec | 19.62K ops/s | 19.90K ops/s | 🟢▲ +1.47% | 0.67% |
fan_out
| Benchmark | Backend | Metric | Base | Head | Δ | Noise |
|---|---|---|---|---|---|---|
| concurrent_parents/1 | kqueue | ops_per_sec | 7.72K ops/s | 7.73K ops/s | 🟢▲ +0.01% | 1.25% |
| concurrent_parents/16 | kqueue | ops_per_sec | 6.99K ops/s | 7.10K ops/s | 🟢▲ +2.42% | 19.50% |
| concurrent_parents/4 | kqueue | ops_per_sec | 8.18K ops/s | 8.18K ops/s | 🔴▼ -0.12% | 2.08% |
| concurrent_parents_lockless/1 | kqueue | ops_per_sec | 7.77K ops/s | 7.77K ops/s | 🟢▲ +0.27% | 1.19% |
| concurrent_parents_lockless/16 | kqueue | ops_per_sec | 7.03K ops/s | 7.05K ops/s | 🔴▼ -0.38% | 20.69% |
| concurrent_parents_lockless/4 | kqueue | ops_per_sec | 8.27K ops/s | 8.25K ops/s | 🔴▼ -0.19% | 1.71% |
| fork_join/1 | kqueue | ops_per_sec | 46.06K ops/s | 45.88K ops/s | 🔴▼ -0.18% | 0.75% |
| fork_join/16 | kqueue | ops_per_sec | 7.69K ops/s | 7.71K ops/s | 🟢▲ +0.19% | 0.77% |
| fork_join/4 | kqueue | ops_per_sec | 21.70K ops/s | 21.61K ops/s | 🟢▲ +0.16% | 0.75% |
| fork_join/64 | kqueue | ops_per_sec | 2.04K ops/s | 2.06K ops/s | 🟢▲ +0.39% | 2.05% |
| fork_join_lockless/1 | kqueue | ops_per_sec | 46.94K ops/s | 47.05K ops/s | 🟢▲ +0.31% | 0.18% |
| fork_join_lockless/16 | kqueue | ops_per_sec | 7.77K ops/s | 7.80K ops/s | 🟢▲ +0.41% | 0.88% |
| fork_join_lockless/4 | kqueue | ops_per_sec | 21.81K ops/s | 21.78K ops/s | 🔴▼ -0.18% | 0.82% |
| fork_join_lockless/64 | kqueue | ops_per_sec | 2.06K ops/s | 2.07K ops/s | 🟢▲ +0.17% | 2.02% |
| nested/16 | kqueue | ops_per_sec | 2.01K ops/s | 2.03K ops/s | 🟢▲ +0.37% | 1.77% |
| nested/4 | kqueue | ops_per_sec | 7.06K ops/s | 7.08K ops/s | 🟢▲ +0.27% | 0.90% |
| nested_lockless/16 | kqueue | ops_per_sec | 2.03K ops/s | 2.05K ops/s | 🟢▲ +0.47% | 1.96% |
| nested_lockless/4 | kqueue | ops_per_sec | 7.19K ops/s | 7.20K ops/s | 🟢▲ +0.32% | 1.15% |
http_server
| Benchmark | Backend | Metric | Base | Head | Δ | Noise |
|---|---|---|---|---|---|---|
| concurrent/1 | kqueue | ops_per_sec | 49.62K ops/s | 49.67K ops/s | 🟢▲ +0.08% | 0.22% |
| concurrent/16 | kqueue | ops_per_sec | 128.3K ops/s | 127.6K ops/s | 🔴▼ -0.40% | 0.75% |
| concurrent/32 | kqueue | ops_per_sec | 128.0K ops/s | 128.3K ops/s | 🟢▲ +0.91% | 1.54% |
| concurrent/4 | kqueue | ops_per_sec | 88.40K ops/s | 87.88K ops/s | 🔴▼ -0.23% | 0.85% |
| multithread/1 | kqueue | ops_per_sec | 127.9K ops/s | 128.1K ops/s | 🟢▲ +0.75% | 1.34% |
| multithread/16 | kqueue | ops_per_sec | 127.5K ops/s | 128.1K ops/s | 🟢▲ +0.54% | 1.28% |
| multithread/2 | kqueue | ops_per_sec | 177.6K ops/s | 173.8K ops/s | 🔴▼ -3.04% | 1.72% |
| multithread/4 | kqueue | ops_per_sec | 161.2K ops/s | 161.2K ops/s | 🔴▼ -0.41% | 1.18% |
| multithread/8 | kqueue | ops_per_sec | 132.2K ops/s | 133.0K ops/s | 🔴▼ -0.20% | 1.28% |
| single_conn | kqueue | ops_per_sec | 49.62K ops/s | 49.61K ops/s | 🟢▲ +0.07% | 0.40% |
| single_conn_lockless | kqueue | ops_per_sec | 49.78K ops/s | 49.84K ops/s | 🟢▲ +0.05% | 0.34% |
local_socket_latency
| Benchmark | Backend | Metric | Base | Head | Δ | Noise |
|---|---|---|---|---|---|---|
| concurrent/1 | kqueue | latency_mean_ns | 2.07 µs | 2.06 µs | 🟢▲ +0.26% | 0.35% |
| concurrent/16 | kqueue | latency_mean_ns | 30.68 µs | 30.54 µs | 🟢▲ +0.21% | 0.57% |
| concurrent/4 | kqueue | latency_mean_ns | 7.68 µs | 7.66 µs | 🟢▲ +0.09% | 0.58% |
| concurrent_lockless/1 | kqueue | latency_mean_ns | 2.04 µs | 2.03 µs | 🟢▲ +0.18% | 0.67% |
| concurrent_lockless/16 | kqueue | latency_mean_ns | 30.22 µs | 30.15 µs | 🟢▲ +0.24% | 0.24% |
| concurrent_lockless/4 | kqueue | latency_mean_ns | 7.56 µs | 7.53 µs | 🟢▲ +0.37% | 0.45% |
| pingpong/1 | kqueue | latency_mean_ns | 2.06 µs | 2.06 µs | 🟢▲ +0.35% | 0.73% |
| pingpong/1024 | kqueue | latency_mean_ns | 2.16 µs | 2.16 µs | 🟢▲ +0.02% | 0.57% |
| pingpong/64 | kqueue | latency_mean_ns | 2.06 µs | 2.06 µs | 🟢▲ +0.14% | 0.77% |
| pingpong_lockless/1 | kqueue | latency_mean_ns | 2.03 µs | 2.02 µs | 🟢▲ +0.25% | 0.78% |
| pingpong_lockless/1024 | kqueue | latency_mean_ns | 2.14 µs | 2.13 µs | 🟢▲ +0.13% | 0.47% |
| pingpong_lockless/64 | kqueue | latency_mean_ns | 2.03 µs | 2.03 µs | 🟢▲ +0.31% | 0.58% |
local_socket_throughput
| Benchmark | Backend | Metric | Base | Head | Δ | Noise |
|---|---|---|---|---|---|---|
| bidirectional/1024 | kqueue | bytes_per_sec | 1.22 GB/s | 1.22 GB/s | 🔴▼ -0.11% | 0.78% |
| bidirectional/1048576 | kqueue | bytes_per_sec | 3.84 GB/s | 3.83 GB/s | 🔴▼ -0.33% | 0.55% |
| bidirectional/16384 | kqueue | bytes_per_sec | 3.85 GB/s | 3.83 GB/s | 🔴▼ -0.26% | 0.72% |
| bidirectional/262144 | kqueue | bytes_per_sec | 3.84 GB/s | 3.81 GB/s | 🔴▼ -1.09% | 0.72% |
| bidirectional/4096 | kqueue | bytes_per_sec | 2.90 GB/s | 2.90 GB/s | 🟢▲ +0.26% | 0.75% |
| bidirectional/65536 | kqueue | bytes_per_sec | 3.85 GB/s | 3.83 GB/s | 🔴▼ -0.71% | 0.67% |
| bidirectional_lockless/1024 | kqueue | bytes_per_sec | 1.23 GB/s | 1.23 GB/s | 🟢▲ +0.10% | 1.14% |
| bidirectional_lockless/1048576 | kqueue | bytes_per_sec | 3.90 GB/s | 3.92 GB/s | 🟢▲ +0.58% | 0.69% |
| bidirectional_lockless/16384 | kqueue | bytes_per_sec | 3.90 GB/s | 3.91 GB/s | 🟢▲ +0.14% | 0.85% |
| bidirectional_lockless/262144 | kqueue | bytes_per_sec | 3.92 GB/s | 3.91 GB/s | 🔴▼ -0.25% | 0.68% |
| bidirectional_lockless/4096 | kqueue | bytes_per_sec | 2.95 GB/s | 2.94 GB/s | 🔴▼ -0.21% | 0.51% |
| bidirectional_lockless/65536 | kqueue | bytes_per_sec | 3.89 GB/s | 3.90 GB/s | 🟢▲ +0.44% | 0.79% |
| unidirectional/1024 | kqueue | bytes_per_sec | 1.19 GB/s | 1.18 GB/s | 🔴▼ -0.47% | 1.20% |
| unidirectional/1048576 | kqueue | bytes_per_sec | 3.47 GB/s | 3.45 GB/s | 🔴▼ -0.40% | 0.52% |
| unidirectional/16384 | kqueue | bytes_per_sec | 3.46 GB/s | 3.46 GB/s | 🟢▲ +0.03% | 0.63% |
| unidirectional/262144 | kqueue | bytes_per_sec | 3.46 GB/s | 3.46 GB/s | 🟢▲ +0.15% | 0.47% |
| unidirectional/4096 | kqueue | bytes_per_sec | 2.69 GB/s | 2.67 GB/s | 🔴▼ -0.67% | 0.85% |
| unidirectional/65536 | kqueue | bytes_per_sec | 3.46 GB/s | 3.46 GB/s | 🔴▼ -0.09% | 0.58% |
| unidirectional_lockless/1024 | kqueue | bytes_per_sec | 1.20 GB/s | 1.19 GB/s | 🔴▼ -0.33% | 1.06% |
| unidirectional_lockless/1048576 | kqueue | bytes_per_sec | 3.52 GB/s | 3.52 GB/s | 🟢▲ +0.04% | 0.58% |
| unidirectional_lockless/16384 | kqueue | bytes_per_sec | 3.51 GB/s | 3.51 GB/s | 🟢▲ +0.16% | 0.64% |
| unidirectional_lockless/262144 | kqueue | bytes_per_sec | 3.52 GB/s | 3.50 GB/s | 🔴▼ -0.39% | 0.57% |
| unidirectional_lockless/4096 | kqueue | bytes_per_sec | 2.72 GB/s | 2.71 GB/s | 🟢▲ +0.10% | 0.87% |
| unidirectional_lockless/65536 | kqueue | bytes_per_sec | 3.52 GB/s | 3.51 GB/s | 🔴▼ -0.25% | 0.61% |
socket_latency
| Benchmark | Backend | Metric | Base | Head | Δ | Noise |
|---|---|---|---|---|---|---|
| concurrent/1 | kqueue | latency_mean_ns | 18.81 µs | 18.70 µs | 🟢▲ +0.50% | 0.72% |
| concurrent/16 | kqueue | latency_mean_ns | 121.00 µs | 120.41 µs | 🟢▲ +0.37% | 0.44% |
| concurrent/4 | kqueue | latency_mean_ns | 44.09 µs | 43.76 µs | 🟢▲ +0.42% | 0.99% |
| concurrent_lockless/1 | kqueue | latency_mean_ns | 18.76 µs | 18.66 µs | 🟢▲ +0.58% | 0.35% |
| concurrent_lockless/16 | kqueue | latency_mean_ns | 120.38 µs | 120.74 µs | 🔴▼ -0.38% | 0.16% |
| concurrent_lockless/4 | kqueue | latency_mean_ns | 43.44 µs | 42.97 µs | 🟢▲ +0.70% | 1.24% |
| pingpong/1 | kqueue | latency_mean_ns | 15.45 µs | 15.42 µs | 🟢▲ +0.25% | 0.30% |
| pingpong/1024 | kqueue | latency_mean_ns | 18.90 µs | 18.91 µs | 🔴▼ -0.13% | 0.33% |
| pingpong/64 | kqueue | latency_mean_ns | 18.74 µs | 18.69 µs | 🟢▲ +0.27% | 0.40% |
| pingpong_lockless/1 | kqueue | latency_mean_ns | 15.41 µs | 15.41 µs | 🟢▲ +0.15% | 0.54% |
| pingpong_lockless/1024 | kqueue | latency_mean_ns | 18.95 µs | 18.89 µs | 🟢▲ +0.26% | 0.19% |
| pingpong_lockless/64 | kqueue | latency_mean_ns | 18.70 µs | 18.65 µs | 🟢▲ +0.26% | 0.23% |
socket_throughput
| Benchmark | Backend | Metric | Base | Head | Δ | Noise |
|---|---|---|---|---|---|---|
| bidirectional/1024 | kqueue | bytes_per_sec | 410.0 MB/s | 406.1 MB/s | 🔴▼ -0.55% | 1.09% |
| bidirectional/1048576 | kqueue | bytes_per_sec | 7.80 GB/s | 7.63 GB/s | 🔴▼ -1.10% | 4.28% |
| bidirectional/16384 | kqueue | bytes_per_sec | 4.00 GB/s | 3.96 GB/s | 🔴▼ -1.33% | 0.80% |
| bidirectional/262144 | kqueue | bytes_per_sec | 8.89 GB/s | 8.79 GB/s | 🔴▼ -1.77% | 3.18% |
| bidirectional/4096 | kqueue | bytes_per_sec | 1.50 GB/s | 1.49 GB/s | 🔴▼ -0.47% | 0.68% |
| bidirectional/65536 | kqueue | bytes_per_sec | 7.68 GB/s | 7.57 GB/s | 🔴▼ -2.08% | 2.60% |
| bidirectional_lockless/1024 | kqueue | bytes_per_sec | 411.4 MB/s | 412.4 MB/s | 🟢▲ +0.15% | 1.42% |
| bidirectional_lockless/1048576 | kqueue | bytes_per_sec | 7.76 GB/s | 7.69 GB/s | 🟢▲ +0.86% | 5.63% |
| bidirectional_lockless/16384 | kqueue | bytes_per_sec | 4.04 GB/s | 3.98 GB/s | 🔴▼ -1.99% | 1.18% |
| bidirectional_lockless/262144 | kqueue | bytes_per_sec | 9.01 GB/s | 8.70 GB/s | 🔴▼ -3.42% | 6.32% |
| bidirectional_lockless/4096 | kqueue | bytes_per_sec | 1.50 GB/s | 1.49 GB/s | 🔴▼ -0.39% | 0.95% |
| bidirectional_lockless/65536 | kqueue | bytes_per_sec | 7.61 GB/s | 7.62 GB/s | 🟢▲ +0.43% | 1.30% |
| multithread/2 | kqueue | bytes_per_sec | 7.60 GB/s | 7.45 GB/s | 🟢▲ +0.41% | 3.68% |
| multithread/4 | kqueue | bytes_per_sec | 3.66 GB/s | 3.59 GB/s | 🔴▼ -2.29% | 3.95% |
| multithread/8 | kqueue | bytes_per_sec | 3.42 GB/s | 3.28 GB/s | 🔴▼ -5.30% | 4.56% |
| unidirectional/1024 | kqueue | bytes_per_sec | 319.2 MB/s | 318.4 MB/s | 🔴▼ -0.64% | 1.06% |
| unidirectional/1048576 | kqueue | bytes_per_sec | 9.01 GB/s | 8.75 GB/s | 🔴▼ -0.92% | 5.37% |
| unidirectional/16384 | kqueue | bytes_per_sec | 3.73 GB/s | 3.73 GB/s | 🟢▲ +0.04% | 0.94% |
| unidirectional/262144 | kqueue | bytes_per_sec | 8.99 GB/s | 8.93 GB/s | 🟢▲ +0.18% | 2.67% |
| unidirectional/4096 | kqueue | bytes_per_sec | 1.23 GB/s | 1.24 GB/s | 🔴▼ -0.24% | 2.08% |
| unidirectional/65536 | kqueue | bytes_per_sec | 7.28 GB/s | 7.29 GB/s | 🟢▲ +0.81% | 1.39% |
| unidirectional_lockless/1024 | kqueue | bytes_per_sec | 328.0 MB/s | 327.4 MB/s | 🔴▼ -0.20% | 0.36% |
| unidirectional_lockless/1048576 | kqueue | bytes_per_sec | 9.04 GB/s | 8.80 GB/s | 🔴▼ -0.66% | 4.25% |
| unidirectional_lockless/16384 | kqueue | bytes_per_sec | 3.74 GB/s | 3.76 GB/s | 🔴▼ -0.18% | 1.34% |
| unidirectional_lockless/262144 | kqueue | bytes_per_sec | 8.97 GB/s | 8.97 GB/s | 🟢▲ +0.26% | 2.46% |
| unidirectional_lockless/4096 | kqueue | bytes_per_sec | 1.25 GB/s | 1.25 GB/s | 🟢▲ +0.09% | 0.35% |
| unidirectional_lockless/65536 | kqueue | bytes_per_sec | 7.34 GB/s | 7.29 GB/s | 🔴▼ -0.63% | 1.20% |
Run & raw JSON artifacts · flag rule: |median Δ| > max(2%, 3×CV of the noisier side) · advisory only
1137e95 to
60bf84c
Compare
local::connect_pair relies on socketpair(), which has no Windows implementation and throws operation_not_supported at runtime, taking the whole comparison run down with it. The corosio local socket suites are already POSIX-only, so Windows loses no comparison coverage.
Only the connecting side carried linger(0), so on loopback a server FIN racing the client RST could still park connections in TIME_WAIT. At production durations the leak overflowed the macOS PCB table mid-benchmark (70k against a 12k drain threshold), socket creation started failing, and the corosio loop ignored the open() error before set_option threw and took down the whole suite. The listener now carries the churn socket options -- accepted sockets inherit them on every supported platform -- so both sides RST at close without adding per-connection syscalls to the measured loop, and a failed open() now ends the benchmark instead of aborting the process.
Replaces the hand-written February benchmark page with a pipeline that regenerates it from fresh runs on the three dedicated machines (closes #352): - benchmark-report.yml: dispatch-only workflow running the comparison suite (corosio, asio coroutines, asio callbacks) on every platform, uploading raw per-iteration JSON and an environment capture. Linux builds asio against both epoll and io_uring so each corosio configuration is measured against a same-reactor asio. - report_page.py: stdlib-only generator producing the four Antora pages and theme-aware inline SVG charts; medians across iterations, CV-based noise classification, diverging bars against the asio-coroutines baseline. - Scenario descriptions in the bench harness (describe and category_description), rendered as category intros and chart hover text. - bench/README.md: how to run the suite, dispatch the workflow, and regenerate the pages. - Generated pages and charts from a full 7x2 production run; the old benchmark-report.adoc URL survives via a page alias, nav gains the per-platform entries, and the lint baseline follows the page swap.
60bf84c to
99008d2
Compare
|
An automated preview of the documentation is available at https://377.corosio.prtest3.cppalliance.org/index.html If more commits are pushed to the pull request, the docs will rebuild at the same URL. 2026-10-02 22:00:20 UTC |
Closes #352.
The published benchmark page is now fully generated from fresh runs on the three dedicated machines, replacing the hand-written February report.
What's here
.github/workflows/benchmark-report.yml— dispatch-only workflow that runs the full comparison suite (corosio / asio coroutines / asio callbacks) on the Linux, Windows, and macOS runners and uploads raw per-iteration JSON plus an environment capture. Linux builds asio twice (epoll and io_uring reactors) so every corosio configuration is compared against a same-reactor asio..github/bench/report_page.py— stdlib-only generator: median-across-iterations aggregation with CV-based noise classification, theme-aware inline SVG charts (diverging bars vs the asio-coroutines baseline), four Antora pages (methodology landing + per-platform Summary / Test Environment / Results).bench/README.md— how to run the suite, dispatch the workflow, and regenerate the pages.describe()/category_description()) rendered as category intros and chart hover text.benchmark-report.adocURL stays alive via a page alias.Bench fixes surfaced by production runs
local::connect_pairrelies onsocketpair(), which asio stubs out asoperation_not_supportedthere — the thrown error aborted every full-suite run. They are now POSIX-only, matching the corosio suites.Reproducing
Dispatch benchmark-report from the Actions tab (defaults: 7 × 2 s),
gh run downloadthe artifacts, runreport_page.py, review the Antora build, open a PR — seebench/README.md.