Repository navigation
Conversation
|
GCOVR code coverage report https://416.corosio.prtest3.cppalliance.org/gcovr/index.html Build time: 2026-11-13 06:22:12 UTC |
7c6bd6d to
1e59c16
Compare
|
An automated preview of the documentation is available at https://416.corosio.prtest3.cppalliance.org/index.html If more commits are pushed to the pull request, the docs will rebuild at the same URL. 2026-11-12 19:25:00 UTC |
Benchmark report
|
| Platform | Backend | Benchmark | Metric | Base | Head | Δ | Noise |
|---|---|---|---|---|---|---|---|
| linux | epoll | local_socket_latency/concurrent_lockless/1 | latency_mean_ns | 7.00 µs | 6.67 µs | 🟢▲ +5.08% | 1.04% |
| linux | epoll | local_socket_throughput/unidirectional/1024 | bytes_per_sec | 299.1 MB/s | 308.5 MB/s | 🟢▲ +3.37% | 0.96% |
| linux | epoll | socket_latency/concurrent_lockless/1 | latency_mean_ns | 14.68 µs | 14.39 µs | 🟢▲ +2.05% | 0.45% |
| linux | epoll | socket_latency/pingpong/1024 | latency_mean_ns | 15.04 µs | 14.69 µs | 🟢▲ +2.51% | 0.83% |
| macos | kqueue | accept_churn/burst_lockless/10 | ops_per_sec | 4.62K ops/s | 4.84K ops/s | 🟢▲ +5.15% | 0.71% |
| macos | kqueue | fan_out/fork_join/4 | ops_per_sec | 23.53K ops/s | 24.11K ops/s | 🟢▲ +2.55% | 0.73% |
| macos | kqueue | fan_out/fork_join_lockless/1 | ops_per_sec | 50.35K ops/s | 51.51K ops/s | 🟢▲ +2.40% | 0.35% |
| macos | kqueue | fan_out/fork_join_lockless/4 | ops_per_sec | 23.68K ops/s | 24.26K ops/s | 🟢▲ +2.50% | 0.42% |
| macos | kqueue | local_socket_latency/concurrent/1 | latency_mean_ns | 1.84 µs | 1.71 µs | 🟢▲ +6.65% | 0.68% |
| macos | kqueue | local_socket_latency/concurrent/4 | latency_mean_ns | 6.86 µs | 6.69 µs | 🟢▲ +2.48% | 0.54% |
| macos | kqueue | local_socket_latency/concurrent_lockless/1 | latency_mean_ns | 1.81 µs | 1.70 µs | 🟢▲ +6.33% | 0.69% |
| macos | kqueue | local_socket_latency/pingpong/1 | latency_mean_ns | 1.83 µs | 1.71 µs | 🟢▲ +6.42% | 0.65% |
| macos | kqueue | local_socket_latency/pingpong/1024 | latency_mean_ns | 1.93 µs | 1.81 µs | 🟢▲ +6.18% | 0.69% |
| macos | kqueue | local_socket_latency/pingpong/64 | latency_mean_ns | 1.83 µs | 1.72 µs | 🟢▲ +5.95% | 0.51% |
| macos | kqueue | local_socket_latency/pingpong_lockless/1 | latency_mean_ns | 1.81 µs | 1.70 µs | 🟢▲ +6.02% | 0.82% |
| macos | kqueue | local_socket_latency/pingpong_lockless/1024 | latency_mean_ns | 1.92 µs | 1.80 µs | 🟢▲ +5.87% | 0.55% |
| macos | kqueue | local_socket_latency/pingpong_lockless/64 | latency_mean_ns | 1.82 µs | 1.70 µs | 🟢▲ +6.16% | 0.68% |
| macos | kqueue | local_socket_throughput/unidirectional/1024 | bytes_per_sec | 1.27 GB/s | 1.31 GB/s | 🟢▲ +3.12% | 0.39% |
| macos | kqueue | local_socket_throughput/unidirectional_lockless/1024 | bytes_per_sec | 1.28 GB/s | 1.32 GB/s | 🟢▲ +3.42% | 0.61% |
linux — full results (226 benchmarks, 5 iterations, 1.5s each)
accept_churn
| Benchmark | Backend | Metric | Base | Head | Δ | Noise |
|---|---|---|---|---|---|---|
| burst/10 | epoll | ops_per_sec | 2.00K ops/s | 2.01K ops/s | 🟢▲ +0.18% | 0.31% |
| burst/10 | uring | ops_per_sec | 2.39K ops/s | 2.40K ops/s | 🟢▲ +0.14% | 0.22% |
| burst/100 | epoll | ops_per_sec | 203.4 ops/s | 203.8 ops/s | 🟢▲ +0.22% | 0.26% |
| burst/100 | uring | ops_per_sec | 246.7 ops/s | 247.6 ops/s | 🟢▲ +0.09% | 0.62% |
| burst_lockless/10 | epoll | ops_per_sec | 2.03K ops/s | 2.03K ops/s | 🟢▲ +0.20% | 0.36% |
| burst_lockless/10 | uring | ops_per_sec | 2.41K ops/s | 2.41K ops/s | 🔴▼ -0.10% | 0.19% |
| burst_lockless/100 | epoll | ops_per_sec | 206.0 ops/s | 206.1 ops/s | 🟢▲ +0.02% | 0.32% |
| burst_lockless/100 | uring | ops_per_sec | 247.8 ops/s | 248.0 ops/s | 🔴▼ -0.02% | 0.42% |
| concurrent/1 | epoll | ops_per_sec | 15.93K ops/s | 15.99K ops/s | 🟢▲ +0.52% | 0.94% |
| concurrent/1 | uring | ops_per_sec | 17.14K ops/s | 17.14K ops/s | ⚪ 0.00% | 0.45% |
| concurrent/16 | epoll | ops_per_sec | 15.91K ops/s | 16.02K ops/s | 🟢▲ +0.58% | 0.62% |
| concurrent/16 | uring | ops_per_sec | 18.76K ops/s | 18.74K ops/s | 🔴▼ -0.19% | 0.27% |
| concurrent/4 | epoll | ops_per_sec | 15.94K ops/s | 15.99K ops/s | 🔴▼ -0.02% | 0.57% |
| concurrent/4 | uring | ops_per_sec | 17.74K ops/s | 17.74K ops/s | 🟢▲ +0.14% | 0.33% |
| sequential | epoll | ops_per_sec | 15.89K ops/s | 15.98K ops/s | 🟢▲ +0.55% | 0.90% |
| sequential | uring | ops_per_sec | 17.20K ops/s | 17.16K ops/s | 🟢▲ +0.33% | 1.34% |
| sequential_lockless | epoll | ops_per_sec | 16.12K ops/s | 16.17K ops/s | 🟢▲ +0.66% | 0.96% |
| sequential_lockless | uring | ops_per_sec | 17.29K ops/s | 17.30K ops/s | 🟢▲ +0.12% | 0.50% |
fan_out
| Benchmark | Backend | Metric | Base | Head | Δ | Noise |
|---|---|---|---|---|---|---|
| concurrent_parents/1 | epoll | ops_per_sec | 3.84K ops/s | 3.87K ops/s | 🟢▲ +0.14% | 1.27% |
| concurrent_parents/1 | uring | ops_per_sec | 4.01K ops/s | 3.98K ops/s | 🔴▼ -0.33% | 0.96% |
| concurrent_parents/16 | epoll | ops_per_sec | 3.78K ops/s | 3.80K ops/s | 🟢▲ +0.15% | 1.05% |
| concurrent_parents/16 | uring | ops_per_sec | 3.94K ops/s | 3.92K ops/s | 🔴▼ -0.22% | 1.02% |
| concurrent_parents/4 | epoll | ops_per_sec | 3.78K ops/s | 3.80K ops/s | 🔴▼ -0.02% | 1.11% |
| concurrent_parents/4 | uring | ops_per_sec | 3.98K ops/s | 3.95K ops/s | 🔴▼ -0.10% | 1.00% |
| concurrent_parents_lockless/1 | epoll | ops_per_sec | 3.91K ops/s | 3.91K ops/s | 🔴▼ -0.10% | 1.10% |
| concurrent_parents_lockless/1 | uring | ops_per_sec | 4.05K ops/s | 4.04K ops/s | 🔴▼ -0.02% | 0.91% |
| concurrent_parents_lockless/16 | epoll | ops_per_sec | 3.82K ops/s | 3.81K ops/s | 🔴▼ -0.15% | 0.96% |
| concurrent_parents_lockless/16 | uring | ops_per_sec | 3.99K ops/s | 3.98K ops/s | 🔴▼ -0.19% | 1.08% |
| concurrent_parents_lockless/4 | epoll | ops_per_sec | 3.83K ops/s | 3.83K ops/s | 🔴▼ -0.19% | 1.13% |
| concurrent_parents_lockless/4 | uring | ops_per_sec | 4.02K ops/s | 4.02K ops/s | 🟢▲ +0.12% | 1.04% |
| fork_join/1 | epoll | ops_per_sec | 56.38K ops/s | 57.34K ops/s | 🟢▲ +1.76% | 0.29% |
| fork_join/1 | uring | ops_per_sec | 54.33K ops/s | 54.31K ops/s | 🟢▲ +0.11% | 0.31% |
| fork_join/16 | epoll | ops_per_sec | 3.86K ops/s | 3.85K ops/s | 🟢▲ +0.11% | 1.14% |
| fork_join/16 | uring | ops_per_sec | 3.99K ops/s | 4.00K ops/s | 🟢▲ +0.09% | 0.28% |
| fork_join/4 | epoll | ops_per_sec | 15.22K ops/s | 15.24K ops/s | 🟢▲ +0.25% | 0.70% |
| fork_join/4 | uring | ops_per_sec | 14.98K ops/s | 14.92K ops/s | 🔴▼ -0.41% | 0.45% |
| fork_join/64 | epoll | ops_per_sec | 949.6 ops/s | 945.3 ops/s | 🔴▼ -0.23% | 0.91% |
| fork_join/64 | uring | ops_per_sec | 993.1 ops/s | 990.3 ops/s | 🔴▼ -0.34% | 0.22% |
| fork_join_lockless/1 | epoll | ops_per_sec | 57.41K ops/s | 58.30K ops/s | 🟢▲ +1.97% | 1.08% |
| fork_join_lockless/1 | uring | ops_per_sec | 55.91K ops/s | 55.93K ops/s | 🟢▲ +0.24% | 0.63% |
| fork_join_lockless/16 | epoll | ops_per_sec | 3.91K ops/s | 3.89K ops/s | 🔴▼ -0.35% | 0.99% |
| fork_join_lockless/16 | uring | ops_per_sec | 4.07K ops/s | 4.04K ops/s | 🔴▼ -0.47% | 0.89% |
| fork_join_lockless/4 | epoll | ops_per_sec | 15.44K ops/s | 15.42K ops/s | 🟢▲ +0.34% | 1.25% |
| fork_join_lockless/4 | uring | ops_per_sec | 15.30K ops/s | 15.24K ops/s | 🔴▼ -0.06% | 0.85% |
| fork_join_lockless/64 | epoll | ops_per_sec | 959.1 ops/s | 953.4 ops/s | 🔴▼ -0.35% | 0.97% |
| fork_join_lockless/64 | uring | ops_per_sec | 1.01K ops/s | 1.00K ops/s | 🔴▼ -0.21% | 0.94% |
| nested/16 | epoll | ops_per_sec | 941.9 ops/s | 940.8 ops/s | 🔴▼ -0.09% | 0.25% |
| nested/16 | uring | ops_per_sec | 991.7 ops/s | 985.9 ops/s | 🔴▼ -0.05% | 0.94% |
| nested/4 | epoll | ops_per_sec | 3.83K ops/s | 3.82K ops/s | 🔴▼ -0.21% | 0.37% |
| nested/4 | uring | ops_per_sec | 4.00K ops/s | 3.97K ops/s | 🔴▼ -0.52% | 0.98% |
| nested_lockless/16 | epoll | ops_per_sec | 951.9 ops/s | 955.5 ops/s | 🟢▲ +0.02% | 1.18% |
| nested_lockless/16 | uring | ops_per_sec | 1.00K ops/s | 997.5 ops/s | 🟢▲ +0.15% | 0.94% |
| nested_lockless/4 | epoll | ops_per_sec | 3.87K ops/s | 3.87K ops/s | 🟢▲ +0.03% | 0.32% |
| nested_lockless/4 | uring | ops_per_sec | 4.04K ops/s | 4.03K ops/s | 🟢▲ +0.27% | 1.16% |
http_server
| Benchmark | Backend | Metric | Base | Head | Δ | Noise |
|---|---|---|---|---|---|---|
| concurrent/1 | epoll | ops_per_sec | 56.93K ops/s | 56.61K ops/s | 🔴▼ -0.41% | 1.14% |
| concurrent/1 | uring | ops_per_sec | 53.49K ops/s | 52.99K ops/s | 🔴▼ -0.80% | 0.90% |
| concurrent/16 | epoll | ops_per_sec | 60.20K ops/s | 59.84K ops/s | 🔴▼ -0.32% | 0.94% |
| concurrent/16 | uring | ops_per_sec | 63.66K ops/s | 63.35K ops/s | 🔴▼ -0.06% | 1.09% |
| concurrent/32 | epoll | ops_per_sec | 59.64K ops/s | 59.38K ops/s | 🔴▼ -0.14% | 1.02% |
| concurrent/32 | uring | ops_per_sec | 63.83K ops/s | 63.48K ops/s | 🔴▼ -0.54% | 0.93% |
| concurrent/4 | epoll | ops_per_sec | 59.55K ops/s | 59.05K ops/s | 🔴▼ -0.13% | 1.31% |
| concurrent/4 | uring | ops_per_sec | 61.31K ops/s | 60.85K ops/s | 🔴▼ -0.55% | 0.96% |
| multithread/1 | epoll | ops_per_sec | 59.56K ops/s | 59.27K ops/s | 🔴▼ -0.01% | 0.89% |
| multithread/1 | uring | ops_per_sec | 63.66K ops/s | 63.42K ops/s | 🔴▼ -0.56% | 1.11% |
| multithread/16 | epoll | ops_per_sec | 163.5K ops/s | 163.6K ops/s | 🟢▲ +0.04% | 0.44% |
| multithread/16 | uring | ops_per_sec | 100.9K ops/s | 100.9K ops/s | 🔴▼ -0.35% | 0.48% |
| multithread/2 | epoll | ops_per_sec | 87.51K ops/s | 87.56K ops/s | 🔴▼ -0.06% | 0.77% |
| multithread/2 | uring | ops_per_sec | 75.10K ops/s | 74.86K ops/s | 🔴▼ -0.45% | 0.47% |
| multithread/4 | epoll | ops_per_sec | 159.6K ops/s | 159.9K ops/s | 🔴▼ -0.16% | 1.70% |
| multithread/4 | uring | ops_per_sec | 120.2K ops/s | 119.4K ops/s | 🔴▼ -0.60% | 1.22% |
| multithread/8 | epoll | ops_per_sec | 162.4K ops/s | 161.6K ops/s | 🔴▼ -0.46% | 0.66% |
| multithread/8 | uring | ops_per_sec | 112.2K ops/s | 111.9K ops/s | 🔴▼ -0.43% | 0.54% |
| single_conn | epoll | ops_per_sec | 56.93K ops/s | 56.57K ops/s | 🔴▼ -0.53% | 1.12% |
| single_conn | uring | ops_per_sec | 53.77K ops/s | 53.03K ops/s | 🔴▼ -0.89% | 1.11% |
| single_conn_lockless | epoll | ops_per_sec | 57.62K ops/s | 57.46K ops/s | 🟢▲ +0.08% | 1.10% |
| single_conn_lockless | uring | ops_per_sec | 55.44K ops/s | 54.85K ops/s | 🔴▼ -0.55% | 1.11% |
local_socket_latency
| Benchmark | Backend | Metric | Base | Head | Δ | Noise |
|---|---|---|---|---|---|---|
| concurrent/1 | epoll | latency_mean_ns | 7.12 µs | 7.03 µs | 🟢▲ +4.69% | 5.22% |
| concurrent/1 | uring | latency_mean_ns | 5.80 µs | 6.05 µs | 🔴▼ -10.65% | 5.58% |
| concurrent/16 | epoll | latency_mean_ns | 110.08 µs | 108.19 µs | 🟢▲ +1.72% | 0.75% |
| concurrent/16 | uring | latency_mean_ns | 93.20 µs | 93.29 µs | 🔴▼ -0.13% | 0.60% |
| concurrent/4 | epoll | latency_mean_ns | 27.83 µs | 27.28 µs | 🟢▲ +2.47% | 0.97% |
| concurrent/4 | uring | latency_mean_ns | 23.27 µs | 23.33 µs | 🔴▼ -0.35% | 1.41% |
| concurrent_lockless/1 | epoll | latency_mean_ns | 7.00 µs | 6.67 µs | 🟢▲ +5.08% | 1.04% |
| concurrent_lockless/1 | uring | latency_mean_ns | 5.64 µs | 5.65 µs | 🔴▼ -0.13% | 0.69% |
| concurrent_lockless/16 | epoll | latency_mean_ns | 108.55 µs | 106.74 µs | 🟢▲ +1.69% | 0.83% |
| concurrent_lockless/16 | uring | latency_mean_ns | 92.83 µs | 92.81 µs | 🟢▲ +0.25% | 1.14% |
| concurrent_lockless/4 | epoll | latency_mean_ns | 27.43 µs | 26.72 µs | 🟢▲ +2.59% | 1.22% |
| concurrent_lockless/4 | uring | latency_mean_ns | 22.98 µs | 22.89 µs | 🟢▲ +1.25% | 1.53% |
| pingpong/1 | epoll | latency_mean_ns | 7.21 µs | 6.83 µs | 🟢▲ +5.45% | 4.68% |
| pingpong/1 | uring | latency_mean_ns | 5.60 µs | 5.73 µs | 🔴▼ -0.68% | 3.49% |
| pingpong/1024 | epoll | latency_mean_ns | 7.79 µs | 7.49 µs | 🟢▲ +4.37% | 4.22% |
| pingpong/1024 | uring | latency_mean_ns | 6.21 µs | 6.43 µs | 🔴▼ -6.85% | 5.09% |
| pingpong/64 | epoll | latency_mean_ns | 7.25 µs | 7.01 µs | 🟢▲ +4.95% | 5.48% |
| pingpong/64 | uring | latency_mean_ns | 5.94 µs | 5.79 µs | 🟢▲ +2.88% | 6.49% |
| pingpong_lockless/1 | epoll | latency_mean_ns | 7.10 µs | 6.66 µs | 🟢▲ +4.71% | 4.25% |
| pingpong_lockless/1 | uring | latency_mean_ns | 5.88 µs | 5.72 µs | 🟢▲ +1.14% | 6.19% |
| pingpong_lockless/1024 | epoll | latency_mean_ns | 7.53 µs | 7.23 µs | 🟢▲ +4.10% | 5.08% |
| pingpong_lockless/1024 | uring | latency_mean_ns | 6.26 µs | 6.27 µs | 🔴▼ -0.24% | 6.21% |
| pingpong_lockless/64 | epoll | latency_mean_ns | 7.16 µs | 6.82 µs | 🟢▲ +5.06% | 4.56% |
| pingpong_lockless/64 | uring | latency_mean_ns | 5.79 µs | 6.03 µs | 🔴▼ -9.75% | 5.92% |
local_socket_throughput
| Benchmark | Backend | Metric | Base | Head | Δ | Noise |
|---|---|---|---|---|---|---|
| bidirectional/1024 | epoll | bytes_per_sec | 307.0 MB/s | 311.7 MB/s | 🟢▲ +1.82% | 1.59% |
| bidirectional/1024 | uring | bytes_per_sec | 353.6 MB/s | 353.7 MB/s | 🟢▲ +0.57% | 1.27% |
| bidirectional/1048576 | epoll | bytes_per_sec | 3.27 GB/s | 3.25 GB/s | 🔴▼ -0.57% | 1.81% |
| bidirectional/1048576 | uring | bytes_per_sec | 3.56 GB/s | 3.59 GB/s | 🟢▲ +1.06% | 2.80% |
| bidirectional/16384 | epoll | bytes_per_sec | 3.06 GB/s | 3.11 GB/s | 🟢▲ +1.90% | 2.57% |
| bidirectional/16384 | uring | bytes_per_sec | 2.99 GB/s | 3.02 GB/s | 🟢▲ +1.30% | 1.59% |
| bidirectional/262144 | epoll | bytes_per_sec | 3.22 GB/s | 3.25 GB/s | 🟢▲ +0.33% | 1.92% |
| bidirectional/262144 | uring | bytes_per_sec | 3.55 GB/s | 3.49 GB/s | 🔴▼ -3.43% | 2.05% |
| bidirectional/4096 | epoll | bytes_per_sec | 1.00 GB/s | 1.02 GB/s | 🟢▲ +1.86% | 0.36% |
| bidirectional/4096 | uring | bytes_per_sec | 1.12 GB/s | 1.13 GB/s | 🟢▲ +1.25% | 1.11% |
| bidirectional/65536 | epoll | bytes_per_sec | 3.00 GB/s | 3.00 GB/s | 🟢▲ +1.25% | 3.04% |
| bidirectional/65536 | uring | bytes_per_sec | 3.49 GB/s | 3.48 GB/s | 🟢▲ +1.02% | 1.98% |
| bidirectional_lockless/1024 | epoll | bytes_per_sec | 308.7 MB/s | 312.8 MB/s | 🟢▲ +0.83% | 1.45% |
| bidirectional_lockless/1024 | uring | bytes_per_sec | 353.6 MB/s | 353.5 MB/s | 🔴▼ -0.35% | 0.87% |
| bidirectional_lockless/1048576 | epoll | bytes_per_sec | 3.29 GB/s | 3.27 GB/s | 🔴▼ -2.26% | 1.97% |
| bidirectional_lockless/1048576 | uring | bytes_per_sec | 3.56 GB/s | 3.58 GB/s | 🟢▲ +0.54% | 2.70% |
| bidirectional_lockless/16384 | epoll | bytes_per_sec | 3.03 GB/s | 3.19 GB/s | 🟢▲ +4.16% | 3.82% |
| bidirectional_lockless/16384 | uring | bytes_per_sec | 3.04 GB/s | 2.98 GB/s | 🔴▼ -1.51% | 3.83% |
| bidirectional_lockless/262144 | epoll | bytes_per_sec | 3.23 GB/s | 3.27 GB/s | 🟢▲ +0.86% | 1.67% |
| bidirectional_lockless/262144 | uring | bytes_per_sec | 3.56 GB/s | 3.50 GB/s | 🔴▼ -2.57% | 1.61% |
| bidirectional_lockless/4096 | epoll | bytes_per_sec | 1.01 GB/s | 1.02 GB/s | 🟢▲ +1.61% | 0.49% |
| bidirectional_lockless/4096 | uring | bytes_per_sec | 1.13 GB/s | 1.13 GB/s | 🟢▲ +0.22% | 1.51% |
| bidirectional_lockless/65536 | epoll | bytes_per_sec | 3.00 GB/s | 3.01 GB/s | 🟢▲ +1.45% | 3.02% |
| bidirectional_lockless/65536 | uring | bytes_per_sec | 3.53 GB/s | 3.49 GB/s | 🔴▼ -0.99% | 1.35% |
| unidirectional/1024 | epoll | bytes_per_sec | 299.1 MB/s | 308.5 MB/s | 🟢▲ +3.37% | 0.96% |
| unidirectional/1024 | uring | bytes_per_sec | 352.4 MB/s | 352.1 MB/s | 🔴▼ -0.29% | 1.01% |
| unidirectional/1048576 | epoll | bytes_per_sec | 3.40 GB/s | 3.35 GB/s | 🔴▼ -2.19% | 1.79% |
| unidirectional/1048576 | uring | bytes_per_sec | 3.56 GB/s | 3.58 GB/s | 🟢▲ +0.44% | 2.13% |
| unidirectional/16384 | epoll | bytes_per_sec | 3.06 GB/s | 3.13 GB/s | 🟢▲ +2.89% | 2.35% |
| unidirectional/16384 | uring | bytes_per_sec | 3.02 GB/s | 3.05 GB/s | 🟢▲ +0.19% | 2.30% |
| unidirectional/262144 | epoll | bytes_per_sec | 3.30 GB/s | 3.32 GB/s | 🔴▼ -0.01% | 2.26% |
| unidirectional/262144 | uring | bytes_per_sec | 3.56 GB/s | 3.47 GB/s | 🔴▼ -1.96% | 1.72% |
| unidirectional/4096 | epoll | bytes_per_sec | 979.4 MB/s | 1.01 GB/s | 🟢▲ +2.43% | 1.08% |
| unidirectional/4096 | uring | bytes_per_sec | 1.13 GB/s | 1.14 GB/s | 🟢▲ +0.58% | 1.05% |
| unidirectional/65536 | epoll | bytes_per_sec | 3.27 GB/s | 3.21 GB/s | 🔴▼ -0.64% | 5.09% |
| unidirectional/65536 | uring | bytes_per_sec | 3.51 GB/s | 3.53 GB/s | 🔴▼ -0.24% | 2.72% |
| unidirectional_lockless/1024 | epoll | bytes_per_sec | 302.3 MB/s | 311.3 MB/s | 🟢▲ +2.53% | 1.11% |
| unidirectional_lockless/1024 | uring | bytes_per_sec | 354.6 MB/s | 353.7 MB/s | 🔴▼ -0.50% | 0.81% |
| unidirectional_lockless/1048576 | epoll | bytes_per_sec | 3.41 GB/s | 3.37 GB/s | 🔴▼ -2.47% | 2.36% |
| unidirectional_lockless/1048576 | uring | bytes_per_sec | 3.55 GB/s | 3.57 GB/s | 🟢▲ +0.23% | 2.05% |
| unidirectional_lockless/16384 | epoll | bytes_per_sec | 3.13 GB/s | 3.13 GB/s | 🔴▼ -0.69% | 2.21% |
| unidirectional_lockless/16384 | uring | bytes_per_sec | 2.99 GB/s | 3.00 GB/s | 🔴▼ -0.37% | 2.82% |
| unidirectional_lockless/262144 | epoll | bytes_per_sec | 3.32 GB/s | 3.36 GB/s | 🟢▲ +2.07% | 2.33% |
| unidirectional_lockless/262144 | uring | bytes_per_sec | 3.55 GB/s | 3.46 GB/s | 🔴▼ -2.57% | 1.93% |
| unidirectional_lockless/4096 | epoll | bytes_per_sec | 988.3 MB/s | 1.02 GB/s | 🟢▲ +2.39% | 1.11% |
| unidirectional_lockless/4096 | uring | bytes_per_sec | 1.14 GB/s | 1.13 GB/s | 🔴▼ -0.66% | 0.80% |
| unidirectional_lockless/65536 | epoll | bytes_per_sec | 3.28 GB/s | 3.26 GB/s | 🟢▲ +0.19% | 5.28% |
| unidirectional_lockless/65536 | uring | bytes_per_sec | 3.57 GB/s | 3.53 GB/s | 🔴▼ -2.21% | 1.70% |
socket_latency
| Benchmark | Backend | Metric | Base | Head | Δ | Noise |
|---|---|---|---|---|---|---|
| concurrent/1 | epoll | latency_mean_ns | 14.74 µs | 14.43 µs | 🟢▲ +2.34% | 0.93% |
| concurrent/1 | uring | latency_mean_ns | 13.63 µs | 13.61 µs | 🟢▲ +0.09% | 1.21% |
| concurrent/16 | epoll | latency_mean_ns | 233.16 µs | 230.63 µs | 🟢▲ +1.17% | 0.22% |
| concurrent/16 | uring | latency_mean_ns | 220.53 µs | 219.99 µs | 🟢▲ +0.23% | 1.21% |
| concurrent/4 | epoll | latency_mean_ns | 58.01 µs | 57.47 µs | 🟢▲ +1.40% | 0.96% |
| concurrent/4 | uring | latency_mean_ns | 54.71 µs | 54.60 µs | 🟢▲ +0.18% | 1.22% |
| concurrent_lockless/1 | epoll | latency_mean_ns | 14.68 µs | 14.39 µs | 🟢▲ +2.05% | 0.45% |
| concurrent_lockless/1 | uring | latency_mean_ns | 13.62 µs | 13.56 µs | 🟢▲ +0.48% | 1.21% |
| concurrent_lockless/16 | epoll | latency_mean_ns | 231.18 µs | 229.86 µs | 🟢▲ +1.11% | 1.16% |
| concurrent_lockless/16 | uring | latency_mean_ns | 219.31 µs | 220.69 µs | 🔴▼ -0.06% | 0.99% |
| concurrent_lockless/4 | epoll | latency_mean_ns | 57.69 µs | 57.32 µs | 🟢▲ +1.10% | 1.21% |
| concurrent_lockless/4 | uring | latency_mean_ns | 54.70 µs | 54.58 µs | 🟢▲ +0.28% | 0.80% |
| pingpong/1 | epoll | latency_mean_ns | 14.74 µs | 14.30 µs | 🟢▲ +2.75% | 1.02% |
| pingpong/1 | uring | latency_mean_ns | 13.58 µs | 13.62 µs | 🔴▼ -0.18% | 0.87% |
| pingpong/1024 | epoll | latency_mean_ns | 15.04 µs | 14.69 µs | 🟢▲ +2.51% | 0.83% |
| pingpong/1024 | uring | latency_mean_ns | 13.83 µs | 13.94 µs | 🔴▼ -0.60% | 1.08% |
| pingpong/64 | epoll | latency_mean_ns | 14.77 µs | 14.36 µs | 🟢▲ +2.41% | 1.06% |
| pingpong/64 | uring | latency_mean_ns | 13.59 µs | 13.67 µs | 🔴▼ -0.19% | 1.00% |
| pingpong_lockless/1 | epoll | latency_mean_ns | 14.51 µs | 14.30 µs | 🟢▲ +1.78% | 0.83% |
| pingpong_lockless/1 | uring | latency_mean_ns | 13.48 µs | 13.56 µs | 🔴▼ -0.12% | 1.18% |
| pingpong_lockless/1024 | epoll | latency_mean_ns | 14.93 µs | 14.67 µs | 🟢▲ +1.81% | 0.72% |
| pingpong_lockless/1024 | uring | latency_mean_ns | 13.86 µs | 13.81 µs | 🟢▲ +0.47% | 1.28% |
| pingpong_lockless/64 | epoll | latency_mean_ns | 14.62 µs | 14.36 µs | 🟢▲ +2.21% | 0.98% |
| pingpong_lockless/64 | uring | latency_mean_ns | 13.58 µs | 13.57 µs | 🟢▲ +0.06% | 1.20% |
socket_throughput
| Benchmark | Backend | Metric | Base | Head | Δ | Noise |
|---|---|---|---|---|---|---|
| bidirectional/1024 | epoll | bytes_per_sec | 133.5 MB/s | 134.0 MB/s | 🟢▲ +0.36% | 0.19% |
| bidirectional/1024 | uring | bytes_per_sec | 150.1 MB/s | 149.9 MB/s | 🔴▼ -0.02% | 0.84% |
| bidirectional/1048576 | epoll | bytes_per_sec | 3.27 GB/s | 3.35 GB/s | 🟢▲ +2.24% | 1.61% |
| bidirectional/1048576 | uring | bytes_per_sec | 3.33 GB/s | 3.31 GB/s | 🔴▼ -1.25% | 1.09% |
| bidirectional/16384 | epoll | bytes_per_sec | 1.62 GB/s | 1.64 GB/s | 🟢▲ +1.03% | 1.01% |
| bidirectional/16384 | uring | bytes_per_sec | 1.61 GB/s | 1.61 GB/s | 🔴▼ -0.04% | 0.87% |
| bidirectional/262144 | epoll | bytes_per_sec | 3.22 GB/s | 3.22 GB/s | 🟢▲ +0.09% | 0.80% |
| bidirectional/262144 | uring | bytes_per_sec | 3.27 GB/s | 3.25 GB/s | 🔴▼ -1.62% | 1.51% |
| bidirectional/4096 | epoll | bytes_per_sec | 502.9 MB/s | 504.3 MB/s | 🟢▲ +0.24% | 0.38% |
| bidirectional/4096 | uring | bytes_per_sec | 522.8 MB/s | 522.3 MB/s | 🟢▲ +0.20% | 0.85% |
| bidirectional/65536 | epoll | bytes_per_sec | 2.61 GB/s | 2.61 GB/s | 🔴▼ -0.51% | 3.83% |
| bidirectional/65536 | uring | bytes_per_sec | 2.85 GB/s | 2.86 GB/s | 🔴▼ -0.38% | 1.72% |
| bidirectional_lockless/1024 | epoll | bytes_per_sec | 134.7 MB/s | 134.6 MB/s | 🟢▲ +0.33% | 1.10% |
| bidirectional_lockless/1024 | uring | bytes_per_sec | 150.6 MB/s | 150.3 MB/s | 🟢▲ +0.21% | 0.96% |
| bidirectional_lockless/1048576 | epoll | bytes_per_sec | 3.28 GB/s | 3.37 GB/s | 🟢▲ +2.48% | 1.32% |
| bidirectional_lockless/1048576 | uring | bytes_per_sec | 3.33 GB/s | 3.32 GB/s | 🟢▲ +0.52% | 1.33% |
| bidirectional_lockless/16384 | epoll | bytes_per_sec | 1.63 GB/s | 1.62 GB/s | 🔴▼ -0.43% | 1.39% |
| bidirectional_lockless/16384 | uring | bytes_per_sec | 1.63 GB/s | 1.62 GB/s | 🟢▲ +0.76% | 1.08% |
| bidirectional_lockless/262144 | epoll | bytes_per_sec | 3.23 GB/s | 3.24 GB/s | 🟢▲ +0.25% | 0.59% |
| bidirectional_lockless/262144 | uring | bytes_per_sec | 3.25 GB/s | 3.24 GB/s | 🟢▲ +0.16% | 2.28% |
| bidirectional_lockless/4096 | epoll | bytes_per_sec | 508.0 MB/s | 508.8 MB/s | 🟢▲ +0.30% | 0.78% |
| bidirectional_lockless/4096 | uring | bytes_per_sec | 524.4 MB/s | 524.1 MB/s | 🟢▲ +0.18% | 1.06% |
| bidirectional_lockless/65536 | epoll | bytes_per_sec | 2.66 GB/s | 2.62 GB/s | 🔴▼ -0.48% | 2.86% |
| bidirectional_lockless/65536 | uring | bytes_per_sec | 2.91 GB/s | 2.92 GB/s | 🔴▼ -0.22% | 1.45% |
| multithread/2 | epoll | bytes_per_sec | 3.70 GB/s | 3.72 GB/s | 🟢▲ +0.81% | 0.73% |
| multithread/2 | uring | bytes_per_sec | 4.19 GB/s | 4.20 GB/s | 🟢▲ +0.34% | 0.40% |
| multithread/4 | epoll | bytes_per_sec | 5.89 GB/s | 6.05 GB/s | 🟢▲ +2.65% | 0.99% |
| multithread/4 | uring | bytes_per_sec | 6.69 GB/s | 6.64 GB/s | 🔴▼ -0.78% | 0.48% |
| multithread/8 | epoll | bytes_per_sec | 6.36 GB/s | 6.42 GB/s | 🟢▲ +1.05% | 0.80% |
| multithread/8 | uring | bytes_per_sec | 6.79 GB/s | 6.81 GB/s | 🟢▲ +0.69% | 0.36% |
| unidirectional/1024 | epoll | bytes_per_sec | 124.9 MB/s | 125.8 MB/s | 🟢▲ +0.69% | 0.44% |
| unidirectional/1024 | uring | bytes_per_sec | 148.3 MB/s | 148.3 MB/s | 🟢▲ +0.47% | 1.21% |
| unidirectional/1048576 | epoll | bytes_per_sec | 3.37 GB/s | 3.36 GB/s | 🔴▼ -0.64% | 0.70% |
| unidirectional/1048576 | uring | bytes_per_sec | 3.41 GB/s | 3.37 GB/s | 🔴▼ -0.86% | 1.14% |
| unidirectional/16384 | epoll | bytes_per_sec | 1.54 GB/s | 1.53 GB/s | 🔴▼ -0.17% | 1.72% |
| unidirectional/16384 | uring | bytes_per_sec | 1.70 GB/s | 1.67 GB/s | 🔴▼ -0.37% | 4.05% |
| unidirectional/262144 | epoll | bytes_per_sec | 3.31 GB/s | 3.33 GB/s | 🟢▲ +0.02% | 1.36% |
| unidirectional/262144 | uring | bytes_per_sec | 3.27 GB/s | 3.23 GB/s | 🔴▼ -1.56% | 0.87% |
| unidirectional/4096 | epoll | bytes_per_sec | 469.7 MB/s | 473.4 MB/s | 🟢▲ +0.50% | 0.57% |
| unidirectional/4096 | uring | bytes_per_sec | 519.0 MB/s | 519.1 MB/s | 🔴▼ -0.47% | 1.15% |
| unidirectional/65536 | epoll | bytes_per_sec | 2.69 GB/s | 2.63 GB/s | 🔴▼ -1.90% | 4.26% |
| unidirectional/65536 | uring | bytes_per_sec | 2.79 GB/s | 2.83 GB/s | 🔴▼ -0.91% | 3.32% |
| unidirectional_lockless/1024 | epoll | bytes_per_sec | 126.1 MB/s | 126.4 MB/s | 🟢▲ +0.18% | 0.22% |
| unidirectional_lockless/1024 | uring | bytes_per_sec | 147.8 MB/s | 149.4 MB/s | 🟢▲ +1.02% | 1.17% |
| unidirectional_lockless/1048576 | epoll | bytes_per_sec | 3.29 GB/s | 3.30 GB/s | 🟢▲ +0.47% | 1.51% |
| unidirectional_lockless/1048576 | uring | bytes_per_sec | 3.42 GB/s | 3.35 GB/s | 🔴▼ -2.45% | 1.81% |
| unidirectional_lockless/16384 | epoll | bytes_per_sec | 1.54 GB/s | 1.56 GB/s | 🟢▲ +1.61% | 1.67% |
| unidirectional_lockless/16384 | uring | bytes_per_sec | 1.71 GB/s | 1.72 GB/s | 🟢▲ +0.53% | 1.42% |
| unidirectional_lockless/262144 | epoll | bytes_per_sec | 3.31 GB/s | 3.32 GB/s | 🟢▲ +1.09% | 1.25% |
| unidirectional_lockless/262144 | uring | bytes_per_sec | 3.29 GB/s | 3.26 GB/s | 🔴▼ -1.18% | 1.84% |
| unidirectional_lockless/4096 | epoll | bytes_per_sec | 472.7 MB/s | 475.5 MB/s | 🟢▲ +0.80% | 0.65% |
| unidirectional_lockless/4096 | uring | bytes_per_sec | 525.3 MB/s | 523.9 MB/s | 🔴▼ -0.31% | 1.34% |
| unidirectional_lockless/65536 | epoll | bytes_per_sec | 2.78 GB/s | 2.79 GB/s | 🟢▲ +0.39% | 2.02% |
| unidirectional_lockless/65536 | uring | bytes_per_sec | 2.81 GB/s | 2.82 GB/s | 🔴▼ -0.93% | 2.61% |
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.55K ops/s | 1.55K ops/s | 🔴▼ -0.44% | 0.36% |
| burst/100 | iocp | ops_per_sec | 155.4 ops/s | 155.7 ops/s | 🟢▲ +0.10% | 0.77% |
| burst_lockless/10 | iocp | ops_per_sec | 1.56K ops/s | 1.55K ops/s | 🔴▼ -0.32% | 0.18% |
| burst_lockless/100 | iocp | ops_per_sec | 158.4 ops/s | 158.6 ops/s | 🔴▼ -0.31% | 0.65% |
| concurrent/1 | iocp | ops_per_sec | 12.37K ops/s | 12.34K ops/s | 🔴▼ -0.18% | 0.34% |
| concurrent/16 | iocp | ops_per_sec | 13.32K ops/s | 13.30K ops/s | 🔴▼ -0.18% | 0.38% |
| concurrent/4 | iocp | ops_per_sec | 13.01K ops/s | 12.99K ops/s | 🔴▼ -0.34% | 0.47% |
| sequential | iocp | ops_per_sec | 12.24K ops/s | 12.28K ops/s | 🔴▼ -0.11% | 2.21% |
| sequential_lockless | iocp | ops_per_sec | 12.37K ops/s | 12.31K ops/s | 🔴▼ -0.42% | 0.26% |
fan_out
| Benchmark | Backend | Metric | Base | Head | Δ | Noise |
|---|---|---|---|---|---|---|
| concurrent_parents/1 | iocp | ops_per_sec | 7.31K ops/s | 7.28K ops/s | 🔴▼ -0.44% | 0.23% |
| concurrent_parents/16 | iocp | ops_per_sec | 6.73K ops/s | 6.69K ops/s | 🔴▼ -0.54% | 1.01% |
| concurrent_parents/4 | iocp | ops_per_sec | 7.21K ops/s | 7.22K ops/s | 🟢▲ +0.19% | 0.82% |
| concurrent_parents_lockless/1 | iocp | ops_per_sec | 7.32K ops/s | 7.33K ops/s | 🟢▲ +0.15% | 0.19% |
| concurrent_parents_lockless/16 | iocp | ops_per_sec | 6.76K ops/s | 6.72K ops/s | 🔴▼ -0.50% | 1.37% |
| concurrent_parents_lockless/4 | iocp | ops_per_sec | 7.22K ops/s | 7.23K ops/s | 🔴▼ -0.07% | 0.83% |
| fork_join/1 | iocp | ops_per_sec | 111.4K ops/s | 110.9K ops/s | 🔴▼ -0.32% | 0.41% |
| fork_join/16 | iocp | ops_per_sec | 7.30K ops/s | 7.29K ops/s | 🟢▲ +0.04% | 0.34% |
| fork_join/4 | iocp | ops_per_sec | 29.05K ops/s | 28.88K ops/s | 🔴▼ -0.50% | 0.39% |
| fork_join/64 | iocp | ops_per_sec | 1.80K ops/s | 1.81K ops/s | 🔴▼ -0.20% | 1.90% |
| fork_join_lockless/1 | iocp | ops_per_sec | 112.0K ops/s | 111.3K ops/s | 🔴▼ -0.51% | 0.47% |
| fork_join_lockless/16 | iocp | ops_per_sec | 7.30K ops/s | 7.29K ops/s | 🔴▼ -0.09% | 0.36% |
| fork_join_lockless/4 | iocp | ops_per_sec | 29.05K ops/s | 28.92K ops/s | 🔴▼ -0.28% | 0.41% |
| fork_join_lockless/64 | iocp | ops_per_sec | 1.81K ops/s | 1.81K ops/s | 🔴▼ -0.15% | 0.95% |
| nested/16 | iocp | ops_per_sec | 1.78K ops/s | 1.78K ops/s | 🔴▼ -0.19% | 0.89% |
| nested/4 | iocp | ops_per_sec | 7.17K ops/s | 7.15K ops/s | 🔴▼ -0.31% | 0.28% |
| nested_lockless/16 | iocp | ops_per_sec | 1.78K ops/s | 1.78K ops/s | 🔴▼ -0.08% | 0.67% |
| nested_lockless/4 | iocp | ops_per_sec | 7.17K ops/s | 7.14K ops/s | 🔴▼ -0.35% | 0.33% |
http_server
| Benchmark | Backend | Metric | Base | Head | Δ | Noise |
|---|---|---|---|---|---|---|
| concurrent/1 | iocp | ops_per_sec | 110.6K ops/s | 110.4K ops/s | 🔴▼ -0.07% | 0.35% |
| concurrent/16 | iocp | ops_per_sec | 107.6K ops/s | 107.2K ops/s | 🔴▼ -0.40% | 0.23% |
| concurrent/32 | iocp | ops_per_sec | 106.9K ops/s | 106.8K ops/s | 🔴▼ -0.16% | 0.25% |
| concurrent/4 | iocp | ops_per_sec | 108.4K ops/s | 108.1K ops/s | 🔴▼ -0.42% | 0.39% |
| multithread/1 | iocp | ops_per_sec | 106.9K ops/s | 106.8K ops/s | 🔴▼ -0.09% | 0.29% |
| multithread/16 | iocp | ops_per_sec | 266.3K ops/s | 267.1K ops/s | 🟢▲ +0.24% | 0.42% |
| multithread/2 | iocp | ops_per_sec | 178.6K ops/s | 180.4K ops/s | 🟢▲ +1.04% | 1.06% |
| multithread/4 | iocp | ops_per_sec | 225.6K ops/s | 225.3K ops/s | 🔴▼ -0.53% | 0.77% |
| multithread/8 | iocp | ops_per_sec | 266.9K ops/s | 266.6K ops/s | 🟢▲ +0.09% | 0.54% |
| single_conn | iocp | ops_per_sec | 110.5K ops/s | 110.0K ops/s | 🔴▼ -0.21% | 0.37% |
| single_conn_lockless | iocp | ops_per_sec | 110.5K ops/s | 110.4K ops/s | 🔴▼ -0.10% | 0.27% |
socket_latency
| Benchmark | Backend | Metric | Base | Head | Δ | Noise |
|---|---|---|---|---|---|---|
| concurrent/1 | iocp | latency_mean_ns | 7.71 µs | 7.71 µs | 🔴▼ -0.08% | 0.23% |
| concurrent/16 | iocp | latency_mean_ns | 132.51 µs | 128.61 µs | 🟢▲ +3.31% | 4.26% |
| concurrent/4 | iocp | latency_mean_ns | 30.79 µs | 30.83 µs | 🟢▲ +0.16% | 0.29% |
| concurrent_lockless/1 | iocp | latency_mean_ns | 7.69 µs | 7.74 µs | 🔴▼ -0.68% | 0.32% |
| concurrent_lockless/16 | iocp | latency_mean_ns | 122.60 µs | 123.02 µs | 🟢▲ +0.06% | 0.78% |
| concurrent_lockless/4 | iocp | latency_mean_ns | 30.77 µs | 30.87 µs | 🔴▼ -0.28% | 0.34% |
| pingpong/1 | iocp | latency_mean_ns | 7.71 µs | 7.70 µs | 🟢▲ +0.29% | 0.25% |
| pingpong/1024 | iocp | latency_mean_ns | 7.79 µs | 7.79 µs | 🟢▲ +0.22% | 0.54% |
| pingpong/64 | iocp | latency_mean_ns | 7.70 µs | 7.71 µs | 🔴▼ -0.11% | 0.45% |
| pingpong_lockless/1 | iocp | latency_mean_ns | 7.65 µs | 7.69 µs | 🔴▼ -0.46% | 0.31% |
| pingpong_lockless/1024 | iocp | latency_mean_ns | 7.80 µs | 7.80 µs | 🟢▲ +0.14% | 0.31% |
| pingpong_lockless/64 | iocp | latency_mean_ns | 7.69 µs | 7.74 µs | 🔴▼ -0.64% | 0.27% |
socket_throughput
| Benchmark | Backend | Metric | Base | Head | Δ | Noise |
|---|---|---|---|---|---|---|
| bidirectional/1024 | iocp | bytes_per_sec | 278.4 MB/s | 278.5 MB/s | 🟢▲ +0.04% | 0.31% |
| bidirectional/1048576 | iocp | bytes_per_sec | 4.64 GB/s | 4.94 GB/s | 🟢▲ +5.89% | 5.86% |
| bidirectional/16384 | iocp | bytes_per_sec | 3.73 GB/s | 3.62 GB/s | 🔴▼ -0.95% | 4.78% |
| bidirectional/262144 | iocp | bytes_per_sec | 9.56 GB/s | 8.93 GB/s | 🔴▼ -0.54% | 10.38% |
| bidirectional/4096 | iocp | bytes_per_sec | 1.07 GB/s | 1.06 GB/s | 🔴▼ -1.80% | 1.30% |
| bidirectional/65536 | iocp | bytes_per_sec | 9.11 GB/s | 8.37 GB/s | 🔴▼ -1.63% | 11.72% |
| bidirectional_lockless/1024 | iocp | bytes_per_sec | 278.8 MB/s | 277.7 MB/s | 🔴▼ -0.38% | 0.37% |
| bidirectional_lockless/1048576 | iocp | bytes_per_sec | 4.94 GB/s | 5.15 GB/s | 🟢▲ +3.56% | 5.67% |
| bidirectional_lockless/16384 | iocp | bytes_per_sec | 3.71 GB/s | 3.69 GB/s | 🔴▼ -0.81% | 0.63% |
| bidirectional_lockless/262144 | iocp | bytes_per_sec | 9.66 GB/s | 9.14 GB/s | 🔴▼ -1.04% | 7.62% |
| bidirectional_lockless/4096 | iocp | bytes_per_sec | 1.07 GB/s | 1.06 GB/s | 🔴▼ -0.41% | 0.33% |
| bidirectional_lockless/65536 | iocp | bytes_per_sec | 9.00 GB/s | 8.94 GB/s | 🔴▼ -0.71% | 1.16% |
| multithread/2 | iocp | bytes_per_sec | 12.69 GB/s | 12.61 GB/s | 🔴▼ -0.74% | 0.79% |
| multithread/4 | iocp | bytes_per_sec | 17.00 GB/s | 16.99 GB/s | 🟢▲ +0.35% | 0.99% |
| multithread/8 | iocp | bytes_per_sec | 18.25 GB/s | 18.38 GB/s | 🟢▲ +0.16% | 1.20% |
| unidirectional/1024 | iocp | bytes_per_sec | 281.1 MB/s | 281.5 MB/s | 🟢▲ +0.25% | 0.46% |
| unidirectional/1048576 | iocp | bytes_per_sec | 3.94 GB/s | 3.83 GB/s | 🔴▼ -4.67% | 5.18% |
| unidirectional/16384 | iocp | bytes_per_sec | 3.76 GB/s | 3.77 GB/s | 🟢▲ +0.13% | 0.51% |
| unidirectional/262144 | iocp | bytes_per_sec | 8.34 GB/s | 8.52 GB/s | 🟢▲ +2.57% | 6.74% |
| unidirectional/4096 | iocp | bytes_per_sec | 1.08 GB/s | 1.08 GB/s | 🔴▼ -0.15% | 0.40% |
| unidirectional/65536 | iocp | bytes_per_sec | 8.83 GB/s | 9.12 GB/s | 🔴▼ -0.54% | 10.70% |
| unidirectional_lockless/1024 | iocp | bytes_per_sec | 281.9 MB/s | 281.9 MB/s | 🔴▼ -0.12% | 0.30% |
| unidirectional_lockless/1048576 | iocp | bytes_per_sec | 4.36 GB/s | 4.48 GB/s | 🟢▲ +5.89% | 5.08% |
| unidirectional_lockless/16384 | iocp | bytes_per_sec | 3.78 GB/s | 3.77 GB/s | 🔴▼ -0.24% | 0.53% |
| unidirectional_lockless/262144 | iocp | bytes_per_sec | 9.76 GB/s | 9.69 GB/s | 🟢▲ +0.13% | 2.16% |
| unidirectional_lockless/4096 | iocp | bytes_per_sec | 1.08 GB/s | 1.08 GB/s | 🔴▼ -0.31% | 0.53% |
| unidirectional_lockless/65536 | iocp | bytes_per_sec | 9.31 GB/s | 9.35 GB/s | 🔴▼ -0.19% | 1.51% |
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.56K ops/s | 4.82K ops/s | 🟢▲ +4.61% | 1.79% |
| burst/100 | kqueue | ops_per_sec | 467.9 ops/s | 471.4 ops/s | 🟢▲ +1.51% | 1.39% |
| burst_lockless/10 | kqueue | ops_per_sec | 4.62K ops/s | 4.84K ops/s | 🟢▲ +5.15% | 0.71% |
| burst_lockless/100 | kqueue | ops_per_sec | 475.3 ops/s | 472.3 ops/s | 🟢▲ +0.14% | 2.05% |
| concurrent/1 | kqueue | ops_per_sec | 20.59K ops/s | 20.56K ops/s | 🔴▼ -0.08% | 0.89% |
| concurrent/16 | kqueue | ops_per_sec | 37.70K ops/s | 37.54K ops/s | 🔴▼ -0.56% | 0.68% |
| concurrent/4 | kqueue | ops_per_sec | 29.30K ops/s | 29.46K ops/s | 🟢▲ +0.46% | 0.36% |
| sequential | kqueue | ops_per_sec | 21.08K ops/s | 20.91K ops/s | 🔴▼ -0.31% | 0.88% |
| sequential_lockless | kqueue | ops_per_sec | 20.95K ops/s | 20.94K ops/s | 🔴▼ -0.09% | 0.87% |
fan_out
| Benchmark | Backend | Metric | Base | Head | Δ | Noise |
|---|---|---|---|---|---|---|
| concurrent_parents/1 | kqueue | ops_per_sec | 8.16K ops/s | 8.17K ops/s | 🟢▲ +0.04% | 1.57% |
| concurrent_parents/16 | kqueue | ops_per_sec | 7.14K ops/s | 6.65K ops/s | 🔴▼ -2.48% | 21.10% |
| concurrent_parents/4 | kqueue | ops_per_sec | 8.39K ops/s | 8.54K ops/s | 🟢▲ +0.82% | 1.60% |
| concurrent_parents_lockless/1 | kqueue | ops_per_sec | 8.25K ops/s | 8.28K ops/s | 🟢▲ +0.27% | 1.77% |
| concurrent_parents_lockless/16 | kqueue | ops_per_sec | 7.17K ops/s | 7.09K ops/s | 🟢▲ +3.91% | 21.86% |
| concurrent_parents_lockless/4 | kqueue | ops_per_sec | 8.48K ops/s | 8.48K ops/s | 🟢▲ +0.80% | 2.20% |
| fork_join/1 | kqueue | ops_per_sec | 49.15K ops/s | 49.96K ops/s | 🟢▲ +1.60% | 0.74% |
| fork_join/16 | kqueue | ops_per_sec | 8.17K ops/s | 8.20K ops/s | 🟢▲ +0.56% | 1.06% |
| fork_join/4 | kqueue | ops_per_sec | 23.53K ops/s | 24.11K ops/s | 🟢▲ +2.55% | 0.73% |
| fork_join/64 | kqueue | ops_per_sec | 2.12K ops/s | 2.13K ops/s | 🟢▲ +0.77% | 2.80% |
| fork_join_lockless/1 | kqueue | ops_per_sec | 50.35K ops/s | 51.51K ops/s | 🟢▲ +2.40% | 0.35% |
| fork_join_lockless/16 | kqueue | ops_per_sec | 8.29K ops/s | 8.29K ops/s | 🔴▼ -0.20% | 1.87% |
| fork_join_lockless/4 | kqueue | ops_per_sec | 23.68K ops/s | 24.26K ops/s | 🟢▲ +2.50% | 0.42% |
| fork_join_lockless/64 | kqueue | ops_per_sec | 2.14K ops/s | 2.15K ops/s | 🟢▲ +0.69% | 2.52% |
| nested/16 | kqueue | ops_per_sec | 2.10K ops/s | 2.15K ops/s | 🟢▲ +0.91% | 2.83% |
| nested/4 | kqueue | ops_per_sec | 8.10K ops/s | 8.18K ops/s | 🟢▲ +1.49% | 1.34% |
| nested_lockless/16 | kqueue | ops_per_sec | 2.13K ops/s | 2.17K ops/s | 🟢▲ +0.91% | 2.12% |
| nested_lockless/4 | kqueue | ops_per_sec | 8.21K ops/s | 8.36K ops/s | 🟢▲ +2.03% | 1.50% |
http_server
| Benchmark | Backend | Metric | Base | Head | Δ | Noise |
|---|---|---|---|---|---|---|
| concurrent/1 | kqueue | ops_per_sec | 49.73K ops/s | 49.55K ops/s | 🔴▼ -0.42% | 0.34% |
| concurrent/16 | kqueue | ops_per_sec | 130.6K ops/s | 130.6K ops/s | 🟢▲ +0.52% | 0.54% |
| concurrent/32 | kqueue | ops_per_sec | 129.5K ops/s | 130.2K ops/s | 🟢▲ +1.11% | 1.08% |
| concurrent/4 | kqueue | ops_per_sec | 89.93K ops/s | 90.54K ops/s | 🟢▲ +0.79% | 1.01% |
| multithread/1 | kqueue | ops_per_sec | 129.8K ops/s | 129.2K ops/s | 🔴▼ -1.61% | 1.22% |
| multithread/16 | kqueue | ops_per_sec | 133.3K ops/s | 132.8K ops/s | 🔴▼ -0.70% | 0.44% |
| multithread/2 | kqueue | ops_per_sec | 184.7K ops/s | 185.3K ops/s | 🟢▲ +0.84% | 1.00% |
| multithread/4 | kqueue | ops_per_sec | 162.9K ops/s | 161.9K ops/s | 🔴▼ -1.07% | 0.56% |
| multithread/8 | kqueue | ops_per_sec | 138.5K ops/s | 137.4K ops/s | 🔴▼ -1.24% | 1.32% |
| single_conn | kqueue | ops_per_sec | 49.61K ops/s | 49.51K ops/s | 🔴▼ -0.50% | 0.59% |
| single_conn_lockless | kqueue | ops_per_sec | 50.12K ops/s | 49.78K ops/s | 🔴▼ -0.51% | 0.44% |
local_socket_latency
| Benchmark | Backend | Metric | Base | Head | Δ | Noise |
|---|---|---|---|---|---|---|
| concurrent/1 | kqueue | latency_mean_ns | 1.84 µs | 1.71 µs | 🟢▲ +6.65% | 0.68% |
| concurrent/16 | kqueue | latency_mean_ns | 27.34 µs | 26.89 µs | 🟢▲ +1.79% | 0.53% |
| concurrent/4 | kqueue | latency_mean_ns | 6.86 µs | 6.69 µs | 🟢▲ +2.48% | 0.54% |
| concurrent_lockless/1 | kqueue | latency_mean_ns | 1.81 µs | 1.70 µs | 🟢▲ +6.33% | 0.69% |
| concurrent_lockless/16 | kqueue | latency_mean_ns | 27.07 µs | 26.65 µs | 🟢▲ +1.29% | 0.68% |
| concurrent_lockless/4 | kqueue | latency_mean_ns | 6.80 µs | 6.64 µs | 🟢▲ +2.30% | 0.95% |
| pingpong/1 | kqueue | latency_mean_ns | 1.83 µs | 1.71 µs | 🟢▲ +6.42% | 0.65% |
| pingpong/1024 | kqueue | latency_mean_ns | 1.93 µs | 1.81 µs | 🟢▲ +6.18% | 0.69% |
| pingpong/64 | kqueue | latency_mean_ns | 1.83 µs | 1.72 µs | 🟢▲ +5.95% | 0.51% |
| pingpong_lockless/1 | kqueue | latency_mean_ns | 1.81 µs | 1.70 µs | 🟢▲ +6.02% | 0.82% |
| pingpong_lockless/1024 | kqueue | latency_mean_ns | 1.92 µs | 1.80 µs | 🟢▲ +5.87% | 0.55% |
| pingpong_lockless/64 | kqueue | latency_mean_ns | 1.82 µs | 1.70 µs | 🟢▲ +6.16% | 0.68% |
local_socket_throughput
| Benchmark | Backend | Metric | Base | Head | Δ | Noise |
|---|---|---|---|---|---|---|
| bidirectional/1024 | kqueue | bytes_per_sec | 1.29 GB/s | 1.32 GB/s | 🟢▲ +1.92% | 0.55% |
| bidirectional/1048576 | kqueue | bytes_per_sec | 3.92 GB/s | 3.90 GB/s | 🔴▼ -0.98% | 0.60% |
| bidirectional/16384 | kqueue | bytes_per_sec | 3.92 GB/s | 3.90 GB/s | 🔴▼ -0.31% | 0.75% |
| bidirectional/262144 | kqueue | bytes_per_sec | 3.89 GB/s | 3.90 GB/s | 🔴▼ -0.42% | 0.85% |
| bidirectional/4096 | kqueue | bytes_per_sec | 2.94 GB/s | 2.93 GB/s | 🔴▼ -0.29% | 0.52% |
| bidirectional/65536 | kqueue | bytes_per_sec | 3.90 GB/s | 3.90 GB/s | 🔴▼ -0.66% | 0.92% |
| bidirectional_lockless/1024 | kqueue | bytes_per_sec | 1.30 GB/s | 1.32 GB/s | 🟢▲ +1.73% | 0.65% |
| bidirectional_lockless/1048576 | kqueue | bytes_per_sec | 3.95 GB/s | 3.96 GB/s | 🔴▼ -0.25% | 1.14% |
| bidirectional_lockless/16384 | kqueue | bytes_per_sec | 4.00 GB/s | 3.96 GB/s | 🔴▼ -1.31% | 0.70% |
| bidirectional_lockless/262144 | kqueue | bytes_per_sec | 3.98 GB/s | 3.97 GB/s | 🔴▼ -0.43% | 0.83% |
| bidirectional_lockless/4096 | kqueue | bytes_per_sec | 2.99 GB/s | 2.97 GB/s | 🔴▼ -0.50% | 0.52% |
| bidirectional_lockless/65536 | kqueue | bytes_per_sec | 3.98 GB/s | 3.98 GB/s | 🔴▼ -0.40% | 1.09% |
| unidirectional/1024 | kqueue | bytes_per_sec | 1.27 GB/s | 1.31 GB/s | 🟢▲ +3.12% | 0.39% |
| unidirectional/1048576 | kqueue | bytes_per_sec | 3.54 GB/s | 3.55 GB/s | 🟢▲ +0.39% | 0.73% |
| unidirectional/16384 | kqueue | bytes_per_sec | 3.55 GB/s | 3.55 GB/s | 🔴▼ -0.05% | 0.62% |
| unidirectional/262144 | kqueue | bytes_per_sec | 3.55 GB/s | 3.55 GB/s | 🟢▲ +0.01% | 0.73% |
| unidirectional/4096 | kqueue | bytes_per_sec | 2.73 GB/s | 2.73 GB/s | 🟢▲ +0.09% | 0.32% |
| unidirectional/65536 | kqueue | bytes_per_sec | 3.55 GB/s | 3.55 GB/s | 🟢▲ +0.44% | 0.53% |
| unidirectional_lockless/1024 | kqueue | bytes_per_sec | 1.28 GB/s | 1.32 GB/s | 🟢▲ +3.42% | 0.61% |
| unidirectional_lockless/1048576 | kqueue | bytes_per_sec | 3.61 GB/s | 3.60 GB/s | 🔴▼ -0.18% | 0.70% |
| unidirectional_lockless/16384 | kqueue | bytes_per_sec | 3.62 GB/s | 3.62 GB/s | 🟢▲ +0.38% | 0.64% |
| unidirectional_lockless/262144 | kqueue | bytes_per_sec | 3.61 GB/s | 3.61 GB/s | 🟢▲ +0.16% | 0.63% |
| unidirectional_lockless/4096 | kqueue | bytes_per_sec | 2.76 GB/s | 2.76 GB/s | 🟢▲ +0.02% | 0.58% |
| unidirectional_lockless/65536 | kqueue | bytes_per_sec | 3.61 GB/s | 3.60 GB/s | 🔴▼ -0.60% | 0.56% |
socket_latency
| Benchmark | Backend | Metric | Base | Head | Δ | Noise |
|---|---|---|---|---|---|---|
| concurrent/1 | kqueue | latency_mean_ns | 18.70 µs | 18.64 µs | 🟢▲ +0.38% | 0.42% |
| concurrent/16 | kqueue | latency_mean_ns | 120.84 µs | 120.73 µs | 🔴▼ -0.14% | 1.02% |
| concurrent/4 | kqueue | latency_mean_ns | 43.03 µs | 42.93 µs | 🟢▲ +1.00% | 0.84% |
| concurrent_lockless/1 | kqueue | latency_mean_ns | 18.65 µs | 18.61 µs | 🟢▲ +0.40% | 0.37% |
| concurrent_lockless/16 | kqueue | latency_mean_ns | 120.56 µs | 120.35 µs | 🟢▲ +0.14% | 1.13% |
| concurrent_lockless/4 | kqueue | latency_mean_ns | 42.44 µs | 42.42 µs | 🟢▲ +0.53% | 0.52% |
| pingpong/1 | kqueue | latency_mean_ns | 15.45 µs | 15.39 µs | 🟢▲ +0.82% | 1.17% |
| pingpong/1024 | kqueue | latency_mean_ns | 19.02 µs | 19.05 µs | 🔴▼ -0.22% | 0.25% |
| pingpong/64 | kqueue | latency_mean_ns | 18.72 µs | 18.67 µs | 🟢▲ +0.24% | 0.51% |
| pingpong_lockless/1 | kqueue | latency_mean_ns | 15.36 µs | 15.29 µs | 🟢▲ +0.44% | 0.31% |
| pingpong_lockless/1024 | kqueue | latency_mean_ns | 19.05 µs | 19.13 µs | 🔴▼ -0.49% | 0.30% |
| pingpong_lockless/64 | kqueue | latency_mean_ns | 18.67 µs | 18.62 µs | 🟢▲ +0.49% | 0.55% |
socket_throughput
| Benchmark | Backend | Metric | Base | Head | Δ | Noise |
|---|---|---|---|---|---|---|
| bidirectional/1024 | kqueue | bytes_per_sec | 475.6 MB/s | 475.3 MB/s | 🟢▲ +0.23% | 0.99% |
| bidirectional/1048576 | kqueue | bytes_per_sec | 7.85 GB/s | 6.87 GB/s | 🔴▼ -12.32% | 4.87% |
| bidirectional/16384 | kqueue | bytes_per_sec | 4.56 GB/s | 4.53 GB/s | 🔴▼ -0.55% | 1.71% |
| bidirectional/262144 | kqueue | bytes_per_sec | 8.97 GB/s | 8.83 GB/s | 🟢▲ +0.44% | 3.65% |
| bidirectional/4096 | kqueue | bytes_per_sec | 1.83 GB/s | 1.82 GB/s | 🔴▼ -0.09% | 0.71% |
| bidirectional/65536 | kqueue | bytes_per_sec | 7.58 GB/s | 7.55 GB/s | 🟢▲ +0.13% | 2.08% |
| bidirectional_lockless/1024 | kqueue | bytes_per_sec | 478.2 MB/s | 476.5 MB/s | 🟢▲ +0.01% | 0.90% |
| bidirectional_lockless/1048576 | kqueue | bytes_per_sec | 7.71 GB/s | 6.96 GB/s | 🔴▼ -10.80% | 6.21% |
| bidirectional_lockless/16384 | kqueue | bytes_per_sec | 4.57 GB/s | 4.58 GB/s | 🔴▼ -0.10% | 1.57% |
| bidirectional_lockless/262144 | kqueue | bytes_per_sec | 8.87 GB/s | 8.91 GB/s | 🔴▼ -0.41% | 2.59% |
| bidirectional_lockless/4096 | kqueue | bytes_per_sec | 1.83 GB/s | 1.83 GB/s | 🟢▲ +0.13% | 0.80% |
| bidirectional_lockless/65536 | kqueue | bytes_per_sec | 7.52 GB/s | 7.52 GB/s | 🟢▲ +0.23% | 1.24% |
| multithread/2 | kqueue | bytes_per_sec | 7.57 GB/s | 7.35 GB/s | 🔴▼ -2.97% | 4.22% |
| multithread/4 | kqueue | bytes_per_sec | 3.66 GB/s | 3.75 GB/s | 🟢▲ +4.64% | 6.06% |
| multithread/8 | kqueue | bytes_per_sec | 3.23 GB/s | 3.43 GB/s | 🟢▲ +5.52% | 8.41% |
| unidirectional/1024 | kqueue | bytes_per_sec | 457.7 MB/s | 459.2 MB/s | 🟢▲ +0.39% | 2.90% |
| unidirectional/1048576 | kqueue | bytes_per_sec | 9.03 GB/s | 8.80 GB/s | 🔴▼ -0.35% | 5.69% |
| unidirectional/16384 | kqueue | bytes_per_sec | 4.49 GB/s | 4.50 GB/s | 🟢▲ +0.71% | 1.90% |
| unidirectional/262144 | kqueue | bytes_per_sec | 9.19 GB/s | 9.05 GB/s | 🔴▼ -1.10% | 4.23% |
| unidirectional/4096 | kqueue | bytes_per_sec | 1.80 GB/s | 1.82 GB/s | 🟢▲ +0.87% | 1.13% |
| unidirectional/65536 | kqueue | bytes_per_sec | 7.47 GB/s | 7.35 GB/s | 🔴▼ -0.55% | 2.16% |
| unidirectional_lockless/1024 | kqueue | bytes_per_sec | 478.0 MB/s | 483.8 MB/s | 🟢▲ +2.16% | 2.74% |
| unidirectional_lockless/1048576 | kqueue | bytes_per_sec | 9.04 GB/s | 8.87 GB/s | 🟢▲ +0.36% | 4.96% |
| unidirectional_lockless/16384 | kqueue | bytes_per_sec | 4.53 GB/s | 4.49 GB/s | 🔴▼ -1.38% | 2.51% |
| unidirectional_lockless/262144 | kqueue | bytes_per_sec | 9.05 GB/s | 9.08 GB/s | 🟢▲ +1.21% | 3.90% |
| unidirectional_lockless/4096 | kqueue | bytes_per_sec | 1.81 GB/s | 1.83 GB/s | 🟢▲ +0.97% | 1.69% |
| unidirectional_lockless/65536 | kqueue | bytes_per_sec | 7.42 GB/s | 7.49 GB/s | 🟢▲ +0.60% | 1.82% |
Run & raw JSON artifacts · flag rule: |median Δ| > max(2%, 3×CV of the noisier side) · advisory only
1e59c16 to
f4b0d0d
Compare
|
Important Draft PR not reviewedDraft PRs are not automatically reviewed by default.
To automatically review draft PRs, update your CodeRabbit configuration: reviews:
auto_review:
drafts: true
|
When the reactor sentinel reached the front with handlers still queued, the scheduler polled the reactor without blocking. Those handlers were mostly posted by the pass that just ran, such as a coroutine an I/O completion woke, so the poll usually found nothing. The sentinel now moves behind the queued handlers once and polls on its next turn regardless, so handlers that keep reposting still cannot starve I/O. restart() forgets a deferral still pending, so a run stopped with the sentinel moved back doesn't cost the next run its own. poll() and poll_one() are unchanged.
f4b0d0d to
97fbd80
Compare
When the reactor sentinel reached the front of the queue with handlers still behind it, the scheduler ran a non-blocking reactor poll. Those handlers were mostly posted by the pass that just ran, such as a coroutine an I/O completion woke, so the poll usually found nothing. On
fan_out/fork_join/1that was one emptyepoll_wait(0)per lap.The sentinel now moves behind the queued handlers once, then polls on its next turn regardless, so handlers that keep reposting still cannot starve I/O.
poll()andpoll_one()are unchanged.testPostedWakeRunsBeforeNextPollin the reactor fault suite counts the backend's wait calls to check that a posted wake runs before the next poll.Pairs with cppalliance/capy
pr/recycling-free-list, which lets the frame allocator cache a wide fan-out. CI resolves that capy branch by name. The benchmark A/B builds both sides against it, so the A/B measures only the scheduler change.Local A/B on one pinned P-core, 5 interleaved runs of 2 s each, both changes vs develop:
fork_join/1fork_join/64nested/16concurrent_parents/4concurrent_parents/16concurrent_parents_lockless/16io_context multithreaded/8measured −0.9% locally, within noise. The CI run should settle it.