Skip to content

fix: never release the process-lifetime Winsock hold - #407

Merged
sgerbino merged 1 commit into
cppalliance:developfrom
sgerbino:pr/wsa-exit-cleanup
Oct 28, 2026
Merged

sgerbino merged 1 commit into
cppalliance:developfrom
sgerbino:pr/wsa-exit-cleanup

Conversation

@sgerbino

Copy link
Copy Markdown
Collaborator

The boost.corosio.resolver test sometimes crashes on Windows after every test has passed. develop CI hit it on the MinGW static leg (run 40588449659) with an ACCESS_VIOLATION at ffffffff00000000.

The process-lifetime Winsock hold still releases its reference from a static destructor, so WSACleanup runs at exit. An asynchronous GetAddrInfoExW can still be running inside ws2_32 at that point. WSACleanup unloads the name-service providers under it, and a system thread-pool worker faults with no corosio frame on its stack. This is the race from 039fe65, moved to process exit.

The hold is now taken once and never released. Process teardown reclaims Winsock.

Captured under gdb on the MinGW static build, every crash shows the same three threads:

  • The main thread is in exit → win_wsa_hold_process()::holder::~holder → WSACleanup.
  • A Windows DNS thread is still in GetAddrInfoExW → DnsQueryEx.
  • A thread-pool worker jumps to 0xffffffff00000000.

A Windows debug job ran resolver.exe in a loop on 4 vCPUs: 24,000 runs on 8 parallel workers, then up to 1,800 runs under gdb on 6 workers.

  • Before: 8 crashes in the 24,000 plain runs, and a crash in about 1 of every 40 gdb runs.
  • After (run 40686626558): 0 crashes in 24,000 plain runs and 0 in all 1,800 gdb runs.

The process hold kept the Winsock count above zero between io_contexts but still released it from a static destructor, so WSACleanup ran at exit. An asynchronous GetAddrInfoExW can still be settling inside ws2_32 then, and WSACleanup unloads the name-service providers under it: a system thread-pool worker faults with no corosio frame on its stack, after every test has passed. Take the hold once and never drop it; process teardown reclaims Winsock.
@cppalliance-bot

Copy link
Copy Markdown

An automated preview of the documentation is available at https://407.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-28 12:53:11 UTC

@cppalliance-bot

Copy link
Copy Markdown

GCOVR code coverage report https://407.corosio.prtest3.cppalliance.org/gcovr/index.html
LCOV code coverage report https://407.corosio.prtest3.cppalliance.org/genhtml/index.html
Coverage Diff Report https://407.corosio.prtest3.cppalliance.org/diff-report/index.html

Build time: 2026-10-28 12:54:23 UTC

@github-actions

Copy link
Copy Markdown

Benchmark report

70adbd5aff90 (base) vs 04917a516c65 (head)

  • ✅ linux — clean (epoll, uring)
  • ✅ windows — clean (iocp)
  • ✅ macos — clean (kqueue)
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.92K ops/s 1.90K ops/s 🔴▼ -0.70% 1.17%
burst/10 uring ops_per_sec 1.83K ops/s 1.81K ops/s 🔴▼ -0.39% 1.16%
burst/100 epoll ops_per_sec 193.4 ops/s 192.2 ops/s 🔴▼ -0.39% 1.10%
burst/100 uring ops_per_sec 188.6 ops/s 186.9 ops/s 🔴▼ -0.43% 1.06%
burst_lockless/10 epoll ops_per_sec 1.93K ops/s 1.92K ops/s 🔴▼ -0.42% 0.30%
burst_lockless/10 uring ops_per_sec 1.96K ops/s 1.96K ops/s 🔴▼ -0.08% 1.41%
burst_lockless/100 epoll ops_per_sec 194.8 ops/s 194.5 ops/s 🔴▼ -0.28% 0.27%
burst_lockless/100 uring ops_per_sec 200.8 ops/s 200.2 ops/s 🟢▲ +0.05% 0.95%
concurrent/1 epoll ops_per_sec 15.29K ops/s 15.11K ops/s 🔴▼ -0.85% 1.31%
concurrent/1 uring ops_per_sec 13.67K ops/s 13.62K ops/s 🔴▼ -0.43% 1.10%
concurrent/16 epoll ops_per_sec 15.36K ops/s 15.22K ops/s 🔴▼ -1.02% 1.25%
concurrent/16 uring ops_per_sec 13.63K ops/s 13.58K ops/s 🔴▼ -0.10% 1.33%
concurrent/4 epoll ops_per_sec 15.31K ops/s 15.18K ops/s 🔴▼ -0.46% 1.51%
concurrent/4 uring ops_per_sec 13.64K ops/s 13.58K ops/s 🔴▼ -0.20% 1.15%
sequential epoll ops_per_sec 15.26K ops/s 15.18K ops/s 🔴▼ -0.29% 1.08%
sequential uring ops_per_sec 13.66K ops/s 13.68K ops/s 🔴▼ -0.40% 1.36%
sequential_lockless epoll ops_per_sec 15.49K ops/s 15.31K ops/s 🔴▼ -1.29% 1.15%
sequential_lockless uring ops_per_sec 14.62K ops/s 14.57K ops/s 🔴▼ -0.24% 1.35%

fan_out

Benchmark Backend Metric Base Head Δ Noise
concurrent_parents/1 epoll ops_per_sec 3.68K ops/s 3.68K ops/s 🔴▼ -0.01% 0.22%
concurrent_parents/1 uring ops_per_sec 3.44K ops/s 3.45K ops/s 🔴▼ -0.06% 0.84%
concurrent_parents/16 epoll ops_per_sec 3.57K ops/s 3.57K ops/s 🔴▼ -0.16% 0.27%
concurrent_parents/16 uring ops_per_sec 3.34K ops/s 3.34K ops/s 🟢▲ +0.20% 1.09%
concurrent_parents/4 epoll ops_per_sec 3.58K ops/s 3.59K ops/s 🟢▲ +0.11% 0.28%
concurrent_parents/4 uring ops_per_sec 3.35K ops/s 3.35K ops/s 🟢▲ +0.21% 1.03%
concurrent_parents_lockless/1 epoll ops_per_sec 3.72K ops/s 3.72K ops/s 🔴▼ -0.08% 0.33%
concurrent_parents_lockless/1 uring ops_per_sec 3.50K ops/s 3.49K ops/s 🔴▼ -0.35% 1.20%
concurrent_parents_lockless/16 epoll ops_per_sec 3.62K ops/s 3.60K ops/s 🔴▼ -0.14% 0.56%
concurrent_parents_lockless/16 uring ops_per_sec 3.40K ops/s 3.36K ops/s 🔴▼ -0.25% 1.14%
concurrent_parents_lockless/4 epoll ops_per_sec 3.62K ops/s 3.62K ops/s 🔴▼ -0.12% 0.34%
concurrent_parents_lockless/4 uring ops_per_sec 3.42K ops/s 3.39K ops/s 🟢▲ +0.06% 1.23%
fork_join/1 epoll ops_per_sec 54.42K ops/s 54.41K ops/s 🟢▲ +0.14% 0.28%
fork_join/1 uring ops_per_sec 53.41K ops/s 52.96K ops/s 🟢▲ +0.17% 1.29%
fork_join/16 epoll ops_per_sec 3.68K ops/s 3.68K ops/s 🟢▲ +0.03% 0.27%
fork_join/16 uring ops_per_sec 3.47K ops/s 3.44K ops/s 🔴▼ -0.54% 1.10%
fork_join/4 epoll ops_per_sec 14.60K ops/s 14.56K ops/s 🔴▼ -0.19% 0.23%
fork_join/4 uring ops_per_sec 13.85K ops/s 13.70K ops/s 🔴▼ -0.24% 1.28%
fork_join/64 epoll ops_per_sec 898.5 ops/s 897.0 ops/s 🔴▼ -0.11% 0.28%
fork_join/64 uring ops_per_sec 820.9 ops/s 813.2 ops/s 🔴▼ -0.10% 1.20%
fork_join_lockless/1 epoll ops_per_sec 55.48K ops/s 55.05K ops/s 🔴▼ -0.36% 1.06%
fork_join_lockless/1 uring ops_per_sec 54.02K ops/s 53.51K ops/s 🔴▼ -0.29% 0.92%
fork_join_lockless/16 epoll ops_per_sec 3.76K ops/s 3.71K ops/s 🔴▼ -0.51% 1.46%
fork_join_lockless/16 uring ops_per_sec 3.49K ops/s 3.49K ops/s 🔴▼ -0.34% 1.07%
fork_join_lockless/4 epoll ops_per_sec 14.90K ops/s 14.70K ops/s 🔴▼ -0.71% 1.32%
fork_join_lockless/4 uring ops_per_sec 13.93K ops/s 13.86K ops/s 🟢▲ +0.03% 0.87%
fork_join_lockless/64 epoll ops_per_sec 915.0 ops/s 904.8 ops/s 🔴▼ -0.56% 1.35%
fork_join_lockless/64 uring ops_per_sec 824.7 ops/s 826.2 ops/s 🔴▼ -0.32% 1.14%
nested/16 epoll ops_per_sec 899.8 ops/s 891.6 ops/s 🔴▼ -0.26% 1.32%
nested/16 uring ops_per_sec 804.1 ops/s 807.1 ops/s 🟢▲ +0.02% 1.04%
nested/4 epoll ops_per_sec 3.69K ops/s 3.66K ops/s 🔴▼ -0.47% 1.32%
nested/4 uring ops_per_sec 3.39K ops/s 3.41K ops/s 🟢▲ +0.24% 1.06%
nested_lockless/16 epoll ops_per_sec 903.2 ops/s 900.3 ops/s 🔴▼ -0.20% 0.61%
nested_lockless/16 uring ops_per_sec 814.4 ops/s 817.4 ops/s 🟢▲ +0.11% 1.01%
nested_lockless/4 epoll ops_per_sec 3.73K ops/s 3.70K ops/s 🔴▼ -0.15% 1.14%
nested_lockless/4 uring ops_per_sec 3.44K ops/s 3.45K ops/s 🔴▼ -0.02% 1.11%

http_server

Benchmark Backend Metric Base Head Δ Noise
concurrent/1 epoll ops_per_sec 54.90K ops/s 54.82K ops/s 🔴▼ -0.41% 0.45%
concurrent/1 uring ops_per_sec 53.71K ops/s 53.88K ops/s 🟢▲ +0.05% 1.14%
concurrent/16 epoll ops_per_sec 57.76K ops/s 57.57K ops/s 🔴▼ -0.18% 0.37%
concurrent/16 uring ops_per_sec 53.27K ops/s 53.35K ops/s 🟢▲ +0.07% 1.22%
concurrent/32 epoll ops_per_sec 57.58K ops/s 57.20K ops/s 🔴▼ -0.06% 1.19%
concurrent/32 uring ops_per_sec 52.84K ops/s 52.82K ops/s 🟢▲ +0.17% 1.08%
concurrent/4 epoll ops_per_sec 57.01K ops/s 56.96K ops/s 🟢▲ +0.03% 0.35%
concurrent/4 uring ops_per_sec 53.32K ops/s 53.46K ops/s 🟢▲ +0.15% 1.16%
multithread/1 epoll ops_per_sec 57.51K ops/s 57.11K ops/s 🔴▼ -0.07% 1.19%
multithread/1 uring ops_per_sec 52.80K ops/s 52.70K ops/s 🟢▲ +0.18% 1.19%
multithread/16 epoll ops_per_sec 159.7K ops/s 159.8K ops/s 🟢▲ +0.03% 0.40%
multithread/16 uring ops_per_sec 82.33K ops/s 82.32K ops/s 🔴▼ -0.10% 0.50%
multithread/2 epoll ops_per_sec 86.34K ops/s 86.98K ops/s 🟢▲ +0.65% 0.64%
multithread/2 uring ops_per_sec 89.99K ops/s 90.54K ops/s 🟢▲ +0.50% 0.73%
multithread/4 epoll ops_per_sec 157.2K ops/s 158.5K ops/s 🟢▲ +1.26% 0.59%
multithread/4 uring ops_per_sec 79.97K ops/s 79.67K ops/s 🔴▼ -0.22% 1.04%
multithread/8 epoll ops_per_sec 159.4K ops/s 159.0K ops/s 🔴▼ -0.42% 0.34%
multithread/8 uring ops_per_sec 77.88K ops/s 77.93K ops/s 🟢▲ +0.11% 0.30%
single_conn epoll ops_per_sec 54.88K ops/s 54.90K ops/s 🔴▼ -0.17% 0.36%
single_conn uring ops_per_sec 53.85K ops/s 53.97K ops/s 🟢▲ +0.17% 1.06%
single_conn_lockless epoll ops_per_sec 55.58K ops/s 55.46K ops/s 🔴▼ -0.40% 0.33%
single_conn_lockless uring ops_per_sec 54.52K ops/s 54.48K ops/s 🟢▲ +0.01% 1.10%

local_socket_latency

Benchmark Backend Metric Base Head Δ Noise
concurrent/1 epoll latency_mean_ns 7.28 µs 7.16 µs 🟢▲ +0.15% 3.32%
concurrent/1 uring latency_mean_ns 6.90 µs 6.90 µs 🟢▲ +0.23% 5.35%
concurrent/16 epoll latency_mean_ns 110.16 µs 110.49 µs 🔴▼ -0.23% 0.92%
concurrent/16 uring latency_mean_ns 109.17 µs 108.95 µs 🟢▲ +0.08% 0.61%
concurrent/4 epoll latency_mean_ns 27.90 µs 27.70 µs 🟢▲ +0.08% 1.50%
concurrent/4 uring latency_mean_ns 27.40 µs 27.39 µs 🟢▲ +0.10% 0.19%
concurrent_lockless/1 epoll latency_mean_ns 7.17 µs 7.04 µs 🟢▲ +0.07% 4.62%
concurrent_lockless/1 uring latency_mean_ns 6.62 µs 6.75 µs 🔴▼ -0.28% 4.60%
concurrent_lockless/16 epoll latency_mean_ns 108.89 µs 109.05 µs 🔴▼ -0.17% 0.21%
concurrent_lockless/16 uring latency_mean_ns 109.03 µs 108.14 µs 🟢▲ +0.47% 0.74%
concurrent_lockless/4 epoll latency_mean_ns 27.38 µs 27.73 µs 🔴▼ -0.31% 1.72%
concurrent_lockless/4 uring latency_mean_ns 27.24 µs 27.09 µs 🔴▼ -0.05% 1.88%
pingpong/1 epoll latency_mean_ns 7.09 µs 7.25 µs 🟢▲ +0.04% 4.39%
pingpong/1 uring latency_mean_ns 6.85 µs 6.68 µs 🟢▲ +1.24% 5.17%
pingpong/1024 epoll latency_mean_ns 7.69 µs 7.68 µs 🟢▲ +0.61% 5.06%
pingpong/1024 uring latency_mean_ns 7.02 µs 7.17 µs 🟢▲ +0.32% 4.40%
pingpong/64 epoll latency_mean_ns 7.27 µs 7.15 µs 🟢▲ +0.32% 4.64%
pingpong/64 uring latency_mean_ns 6.64 µs 6.74 µs 🟢▲ +0.21% 4.83%
pingpong_lockless/1 epoll latency_mean_ns 7.03 µs 7.28 µs 🔴▼ -0.61% 5.22%
pingpong_lockless/1 uring latency_mean_ns 6.59 µs 6.84 µs 🟢▲ +0.02% 5.76%
pingpong_lockless/1024 epoll latency_mean_ns 7.51 µs 7.82 µs 🔴▼ -0.41% 5.24%
pingpong_lockless/1024 uring latency_mean_ns 7.41 µs 7.26 µs 🟢▲ +0.51% 5.02%
pingpong_lockless/64 epoll latency_mean_ns 7.15 µs 7.04 µs 🔴▼ -0.29% 4.53%
pingpong_lockless/64 uring latency_mean_ns 6.76 µs 6.65 µs 🟢▲ +0.29% 4.32%

local_socket_throughput

Benchmark Backend Metric Base Head Δ Noise
bidirectional/1024 epoll bytes_per_sec 304.4 MB/s 303.9 MB/s 🔴▼ -0.72% 1.17%
bidirectional/1024 uring bytes_per_sec 302.3 MB/s 300.6 MB/s 🔴▼ -0.62% 1.14%
bidirectional/1048576 epoll bytes_per_sec 3.17 GB/s 3.14 GB/s 🔴▼ -0.38% 2.66%
bidirectional/1048576 uring bytes_per_sec 3.26 GB/s 3.32 GB/s 🟢▲ +0.85% 2.96%
bidirectional/16384 epoll bytes_per_sec 3.06 GB/s 3.02 GB/s 🟢▲ +0.77% 5.69%
bidirectional/16384 uring bytes_per_sec 2.40 GB/s 2.37 GB/s 🔴▼ -1.66% 1.84%
bidirectional/262144 epoll bytes_per_sec 3.15 GB/s 3.17 GB/s 🟢▲ +1.21% 2.47%
bidirectional/262144 uring bytes_per_sec 3.28 GB/s 3.32 GB/s 🟢▲ +1.48% 1.61%
bidirectional/4096 epoll bytes_per_sec 1.00 GB/s 1.00 GB/s 🟢▲ +0.61% 1.27%
bidirectional/4096 uring bytes_per_sec 993.3 MB/s 989.6 MB/s 🔴▼ -1.26% 1.42%
bidirectional/65536 epoll bytes_per_sec 2.95 GB/s 2.92 GB/s 🟢▲ +0.78% 3.52%
bidirectional/65536 uring bytes_per_sec 2.95 GB/s 2.96 GB/s 🟢▲ +0.17% 4.28%
bidirectional_lockless/1024 epoll bytes_per_sec 308.8 MB/s 305.1 MB/s 🔴▼ -1.61% 1.06%
bidirectional_lockless/1024 uring bytes_per_sec 301.9 MB/s 301.6 MB/s 🔴▼ -0.19% 0.59%
bidirectional_lockless/1048576 epoll bytes_per_sec 3.17 GB/s 3.16 GB/s 🟢▲ +0.85% 2.20%
bidirectional_lockless/1048576 uring bytes_per_sec 3.26 GB/s 3.34 GB/s 🟢▲ +1.47% 3.01%
bidirectional_lockless/16384 epoll bytes_per_sec 3.08 GB/s 3.05 GB/s 🟢▲ +0.70% 5.08%
bidirectional_lockless/16384 uring bytes_per_sec 2.42 GB/s 2.40 GB/s 🔴▼ -1.63% 1.62%
bidirectional_lockless/262144 epoll bytes_per_sec 3.14 GB/s 3.20 GB/s 🟢▲ +2.80% 2.34%
bidirectional_lockless/262144 uring bytes_per_sec 3.29 GB/s 3.33 GB/s 🟢▲ +0.65% 1.70%
bidirectional_lockless/4096 epoll bytes_per_sec 1.02 GB/s 1.01 GB/s 🔴▼ -0.35% 1.20%
bidirectional_lockless/4096 uring bytes_per_sec 992.4 MB/s 992.0 MB/s 🔴▼ -0.18% 0.65%
bidirectional_lockless/65536 epoll bytes_per_sec 2.96 GB/s 2.94 GB/s 🟢▲ +0.85% 3.18%
bidirectional_lockless/65536 uring bytes_per_sec 2.97 GB/s 2.98 GB/s 🟢▲ +1.18% 4.39%
unidirectional/1024 epoll bytes_per_sec 297.5 MB/s 294.9 MB/s 🔴▼ -0.73% 0.80%
unidirectional/1024 uring bytes_per_sec 304.9 MB/s 300.7 MB/s 🔴▼ -1.02% 1.30%
unidirectional/1048576 epoll bytes_per_sec 3.25 GB/s 3.26 GB/s 🟢▲ +2.12% 2.46%
unidirectional/1048576 uring bytes_per_sec 3.39 GB/s 3.45 GB/s 🔴▼ -0.23% 3.69%
unidirectional/16384 epoll bytes_per_sec 3.06 GB/s 3.08 GB/s 🔴▼ -0.63% 1.85%
unidirectional/16384 uring bytes_per_sec 2.62 GB/s 2.65 GB/s 🟢▲ +0.99% 1.41%
unidirectional/262144 epoll bytes_per_sec 3.19 GB/s 3.28 GB/s 🟢▲ +3.16% 1.76%
unidirectional/262144 uring bytes_per_sec 3.42 GB/s 3.41 GB/s 🟢▲ +0.84% 2.57%
unidirectional/4096 epoll bytes_per_sec 986.5 MB/s 981.5 MB/s 🔴▼ -0.67% 1.82%
unidirectional/4096 uring bytes_per_sec 1.00 GB/s 985.9 MB/s 🔴▼ -2.46% 1.33%
unidirectional/65536 epoll bytes_per_sec 3.21 GB/s 3.14 GB/s 🔴▼ -0.17% 8.45%
unidirectional/65536 uring bytes_per_sec 3.13 GB/s 3.19 GB/s 🟢▲ +2.47% 8.22%
unidirectional_lockless/1024 epoll bytes_per_sec 301.6 MB/s 299.1 MB/s 🔴▼ -1.06% 1.00%
unidirectional_lockless/1024 uring bytes_per_sec 303.0 MB/s 301.3 MB/s 🔴▼ -0.40% 0.39%
unidirectional_lockless/1048576 epoll bytes_per_sec 3.24 GB/s 3.26 GB/s 🔴▼ -0.17% 2.96%
unidirectional_lockless/1048576 uring bytes_per_sec 3.41 GB/s 3.48 GB/s 🟢▲ +2.09% 3.43%
unidirectional_lockless/16384 epoll bytes_per_sec 3.07 GB/s 3.05 GB/s 🔴▼ -2.62% 2.41%
unidirectional_lockless/16384 uring bytes_per_sec 2.65 GB/s 2.67 GB/s 🟢▲ +1.65% 1.88%
unidirectional_lockless/262144 epoll bytes_per_sec 3.17 GB/s 3.28 GB/s 🟢▲ +4.80% 2.05%
unidirectional_lockless/262144 uring bytes_per_sec 3.43 GB/s 3.43 GB/s 🟢▲ +0.71% 1.68%
unidirectional_lockless/4096 epoll bytes_per_sec 985.3 MB/s 990.8 MB/s 🟢▲ +0.66% 0.85%
unidirectional_lockless/4096 uring bytes_per_sec 994.1 MB/s 989.6 MB/s 🔴▼ -0.37% 0.71%
unidirectional_lockless/65536 epoll bytes_per_sec 3.22 GB/s 3.14 GB/s 🟢▲ +2.29% 9.52%
unidirectional_lockless/65536 uring bytes_per_sec 3.16 GB/s 3.22 GB/s 🟢▲ +2.93% 7.30%

socket_latency

Benchmark Backend Metric Base Head Δ Noise
concurrent/1 epoll latency_mean_ns 14.72 µs 14.79 µs 🟢▲ +0.22% 1.33%
concurrent/1 uring latency_mean_ns 14.50 µs 14.57 µs 🟢▲ +0.09% 1.22%
concurrent/16 epoll latency_mean_ns 231.94 µs 233.02 µs 🔴▼ -0.14% 1.12%
concurrent/16 uring latency_mean_ns 234.40 µs 236.01 µs ⚪ 0.00% 1.27%
concurrent/4 epoll latency_mean_ns 57.99 µs 58.20 µs 🔴▼ -0.09% 1.22%
concurrent/4 uring latency_mean_ns 58.14 µs 58.52 µs 🟢▲ +0.07% 1.24%
concurrent_lockless/1 epoll latency_mean_ns 14.63 µs 14.68 µs 🟢▲ +0.05% 1.22%
concurrent_lockless/1 uring latency_mean_ns 14.49 µs 14.55 µs 🔴▼ -0.07% 1.41%
concurrent_lockless/16 epoll latency_mean_ns 231.93 µs 231.70 µs 🟢▲ +0.07% 0.26%
concurrent_lockless/16 uring latency_mean_ns 234.36 µs 235.18 µs 🔴▼ -0.14% 1.24%
concurrent_lockless/4 epoll latency_mean_ns 57.90 µs 57.86 µs 🟢▲ +0.04% 0.16%
concurrent_lockless/4 uring latency_mean_ns 58.21 µs 58.44 µs 🟢▲ +0.05% 1.32%
pingpong/1 epoll latency_mean_ns 14.75 µs 14.76 µs 🔴▼ -0.20% 0.37%
pingpong/1 uring latency_mean_ns 14.50 µs 14.53 µs 🔴▼ -0.38% 0.76%
pingpong/1024 epoll latency_mean_ns 15.13 µs 15.09 µs 🟢▲ +0.49% 0.49%
pingpong/1024 uring latency_mean_ns 14.73 µs 14.83 µs 🔴▼ -0.07% 1.33%
pingpong/64 epoll latency_mean_ns 14.81 µs 14.83 µs 🔴▼ -0.04% 0.31%
pingpong/64 uring latency_mean_ns 14.59 µs 14.63 µs 🔴▼ -0.16% 0.43%
pingpong_lockless/1 epoll latency_mean_ns 14.57 µs 14.65 µs 🔴▼ -0.31% 0.64%
pingpong_lockless/1 uring latency_mean_ns 14.40 µs 14.53 µs 🔴▼ -0.35% 1.15%
pingpong_lockless/1024 epoll latency_mean_ns 14.90 µs 15.00 µs 🔴▼ -0.22% 1.18%
pingpong_lockless/1024 uring latency_mean_ns 14.72 µs 14.78 µs 🟢▲ +0.10% 1.32%
pingpong_lockless/64 epoll latency_mean_ns 14.62 µs 14.71 µs 🔴▼ -0.01% 1.20%
pingpong_lockless/64 uring latency_mean_ns 14.48 µs 14.57 µs 🟢▲ +0.12% 1.27%

socket_throughput

Benchmark Backend Metric Base Head Δ Noise
bidirectional/1024 epoll bytes_per_sec 133.7 MB/s 134.1 MB/s 🟢▲ +0.26% 1.21%
bidirectional/1024 uring bytes_per_sec 140.8 MB/s 140.2 MB/s 🟢▲ +0.05% 1.04%
bidirectional/1048576 epoll bytes_per_sec 3.32 GB/s 3.25 GB/s 🔴▼ -2.39% 2.81%
bidirectional/1048576 uring bytes_per_sec 3.28 GB/s 3.23 GB/s 🔴▼ -1.51% 1.68%
bidirectional/16384 epoll bytes_per_sec 1.63 GB/s 1.63 GB/s 🟢▲ +0.31% 1.34%
bidirectional/16384 uring bytes_per_sec 1.52 GB/s 1.53 GB/s 🟢▲ +0.37% 1.33%
bidirectional/262144 epoll bytes_per_sec 3.22 GB/s 3.20 GB/s 🔴▼ -0.65% 0.80%
bidirectional/262144 uring bytes_per_sec 3.20 GB/s 3.17 GB/s 🔴▼ -1.01% 1.23%
bidirectional/4096 epoll bytes_per_sec 504.3 MB/s 503.6 MB/s 🔴▼ -0.71% 1.41%
bidirectional/4096 uring bytes_per_sec 493.6 MB/s 491.2 MB/s 🟢▲ +0.06% 1.13%
bidirectional/65536 epoll bytes_per_sec 2.58 GB/s 2.51 GB/s 🔴▼ -1.73% 3.35%
bidirectional/65536 uring bytes_per_sec 2.78 GB/s 2.74 GB/s 🔴▼ -1.27% 1.67%
bidirectional_lockless/1024 epoll bytes_per_sec 135.1 MB/s 134.4 MB/s 🔴▼ -0.26% 1.27%
bidirectional_lockless/1024 uring bytes_per_sec 140.4 MB/s 140.3 MB/s 🔴▼ -0.09% 0.23%
bidirectional_lockless/1048576 epoll bytes_per_sec 3.31 GB/s 3.24 GB/s 🔴▼ -4.10% 3.17%
bidirectional_lockless/1048576 uring bytes_per_sec 3.25 GB/s 3.24 GB/s 🔴▼ -0.75% 1.19%
bidirectional_lockless/16384 epoll bytes_per_sec 1.64 GB/s 1.63 GB/s 🔴▼ -0.25% 1.76%
bidirectional_lockless/16384 uring bytes_per_sec 1.52 GB/s 1.53 GB/s 🔴▼ -0.12% 0.92%
bidirectional_lockless/262144 epoll bytes_per_sec 3.21 GB/s 3.20 GB/s 🔴▼ -0.11% 1.67%
bidirectional_lockless/262144 uring bytes_per_sec 3.16 GB/s 3.14 GB/s 🔴▼ -0.04% 1.39%
bidirectional_lockless/4096 epoll bytes_per_sec 509.1 MB/s 507.3 MB/s 🟢▲ +0.04% 1.22%
bidirectional_lockless/4096 uring bytes_per_sec 492.6 MB/s 491.7 MB/s 🔴▼ -0.08% 0.20%
bidirectional_lockless/65536 epoll bytes_per_sec 2.60 GB/s 2.63 GB/s 🟢▲ +0.04% 5.12%
bidirectional_lockless/65536 uring bytes_per_sec 2.75 GB/s 2.76 GB/s 🟢▲ +0.29% 0.87%
multithread/2 epoll bytes_per_sec 3.56 GB/s 3.55 GB/s 🔴▼ -0.15% 0.56%
multithread/2 uring bytes_per_sec 3.79 GB/s 3.80 GB/s 🟢▲ +0.13% 0.77%
multithread/4 epoll bytes_per_sec 5.36 GB/s 5.36 GB/s 🔴▼ -0.08% 0.70%
multithread/4 uring bytes_per_sec 5.48 GB/s 5.48 GB/s 🟢▲ +0.17% 0.58%
multithread/8 epoll bytes_per_sec 5.51 GB/s 5.48 GB/s 🔴▼ -0.07% 0.89%
multithread/8 uring bytes_per_sec 5.54 GB/s 5.56 GB/s 🟢▲ +0.27% 0.41%
unidirectional/1024 epoll bytes_per_sec 125.3 MB/s 126.9 MB/s 🟢▲ +1.83% 1.49%
unidirectional/1024 uring bytes_per_sec 138.8 MB/s 138.8 MB/s 🟢▲ +0.05% 0.21%
unidirectional/1048576 epoll bytes_per_sec 3.34 GB/s 3.36 GB/s 🟢▲ +0.20% 1.48%
unidirectional/1048576 uring bytes_per_sec 3.41 GB/s 3.39 GB/s 🔴▼ -0.45% 0.75%
unidirectional/16384 epoll bytes_per_sec 1.53 GB/s 1.54 GB/s 🔴▼ -1.15% 2.46%
unidirectional/16384 uring bytes_per_sec 1.58 GB/s 1.56 GB/s 🔴▼ -1.44% 3.30%
unidirectional/262144 epoll bytes_per_sec 3.33 GB/s 3.32 GB/s 🔴▼ -0.53% 1.04%
unidirectional/262144 uring bytes_per_sec 3.21 GB/s 3.17 GB/s 🔴▼ -1.36% 1.55%
unidirectional/4096 epoll bytes_per_sec 469.2 MB/s 476.5 MB/s 🟢▲ +1.85% 1.45%
unidirectional/4096 uring bytes_per_sec 487.0 MB/s 486.8 MB/s 🔴▼ -0.24% 0.40%
unidirectional/65536 epoll bytes_per_sec 2.61 GB/s 2.74 GB/s 🟢▲ +5.34% 3.96%
unidirectional/65536 uring bytes_per_sec 2.72 GB/s 2.72 GB/s 🔴▼ -0.60% 1.22%
unidirectional_lockless/1024 epoll bytes_per_sec 125.9 MB/s 126.7 MB/s 🟢▲ +0.08% 1.67%
unidirectional_lockless/1024 uring bytes_per_sec 139.7 MB/s 139.1 MB/s 🟢▲ +0.07% 1.11%
unidirectional_lockless/1048576 epoll bytes_per_sec 3.31 GB/s 3.30 GB/s 🔴▼ -0.96% 1.27%
unidirectional_lockless/1048576 uring bytes_per_sec 3.37 GB/s 3.36 GB/s 🔴▼ -0.24% 1.16%
unidirectional_lockless/16384 epoll bytes_per_sec 1.53 GB/s 1.54 GB/s 🔴▼ -0.32% 1.83%
unidirectional_lockless/16384 uring bytes_per_sec 1.59 GB/s 1.59 GB/s 🟢▲ +0.37% 3.36%
unidirectional_lockless/262144 epoll bytes_per_sec 3.30 GB/s 3.30 GB/s 🟢▲ +0.13% 1.38%
unidirectional_lockless/262144 uring bytes_per_sec 3.22 GB/s 3.22 GB/s 🟢▲ +0.72% 1.59%
unidirectional_lockless/4096 epoll bytes_per_sec 471.8 MB/s 475.9 MB/s 🟢▲ +0.84% 1.36%
unidirectional_lockless/4096 uring bytes_per_sec 487.0 MB/s 488.1 MB/s 🟢▲ +0.36% 0.52%
unidirectional_lockless/65536 epoll bytes_per_sec 2.72 GB/s 2.71 GB/s 🟢▲ +1.12% 4.78%
unidirectional_lockless/65536 uring bytes_per_sec 2.75 GB/s 2.71 GB/s 🔴▼ -0.21% 3.01%
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.57K ops/s 1.57K ops/s 🟢▲ +0.05% 0.77%
burst/100 iocp ops_per_sec 157.4 ops/s 156.8 ops/s 🟢▲ +0.03% 0.92%
burst_lockless/10 iocp ops_per_sec 1.58K ops/s 1.58K ops/s 🔴▼ -0.07% 0.22%
burst_lockless/100 iocp ops_per_sec 159.0 ops/s 160.2 ops/s 🟢▲ +0.81% 0.80%
concurrent/1 iocp ops_per_sec 12.53K ops/s 12.54K ops/s 🟢▲ +0.05% 0.36%
concurrent/16 iocp ops_per_sec 13.50K ops/s 13.50K ops/s 🟢▲ +0.15% 0.54%
concurrent/4 iocp ops_per_sec 13.20K ops/s 13.19K ops/s 🔴▼ -0.11% 0.32%
sequential iocp ops_per_sec 12.47K ops/s 12.49K ops/s 🟢▲ +0.19% 0.40%
sequential_lockless iocp ops_per_sec 12.55K ops/s 12.55K ops/s 🟢▲ +0.17% 0.24%

fan_out

Benchmark Backend Metric Base Head Δ Noise
concurrent_parents/1 iocp ops_per_sec 7.30K ops/s 7.30K ops/s 🟢▲ +0.22% 0.64%
concurrent_parents/16 iocp ops_per_sec 6.13K ops/s 6.23K ops/s 🟢▲ +2.66% 1.46%
concurrent_parents/4 iocp ops_per_sec 6.84K ops/s 6.89K ops/s 🟢▲ +0.81% 0.99%
concurrent_parents_lockless/1 iocp ops_per_sec 7.29K ops/s 7.32K ops/s 🔴▼ -0.09% 0.60%
concurrent_parents_lockless/16 iocp ops_per_sec 6.31K ops/s 6.34K ops/s 🟢▲ +0.14% 1.78%
concurrent_parents_lockless/4 iocp ops_per_sec 6.88K ops/s 6.92K ops/s 🔴▼ -0.32% 1.09%
fork_join/1 iocp ops_per_sec 111.8K ops/s 111.9K ops/s 🟢▲ +0.13% 0.39%
fork_join/16 iocp ops_per_sec 7.29K ops/s 7.30K ops/s 🟢▲ +0.04% 0.52%
fork_join/4 iocp ops_per_sec 28.98K ops/s 29.10K ops/s 🟢▲ +0.12% 0.47%
fork_join/64 iocp ops_per_sec 1.72K ops/s 1.72K ops/s 🔴▼ -0.16% 1.79%
fork_join_lockless/1 iocp ops_per_sec 111.5K ops/s 112.1K ops/s 🟢▲ +0.49% 0.32%
fork_join_lockless/16 iocp ops_per_sec 7.30K ops/s 7.33K ops/s 🟢▲ +0.47% 0.56%
fork_join_lockless/4 iocp ops_per_sec 28.97K ops/s 29.10K ops/s 🟢▲ +0.72% 0.55%
fork_join_lockless/64 iocp ops_per_sec 1.72K ops/s 1.72K ops/s 🟢▲ +0.02% 0.92%
nested/16 iocp ops_per_sec 1.67K ops/s 1.68K ops/s 🟢▲ +0.11% 1.15%
nested/4 iocp ops_per_sec 7.08K ops/s 7.11K ops/s 🟢▲ +0.34% 0.84%
nested_lockless/16 iocp ops_per_sec 1.67K ops/s 1.68K ops/s 🟢▲ +0.80% 0.92%
nested_lockless/4 iocp ops_per_sec 7.08K ops/s 7.12K ops/s 🟢▲ +0.20% 0.70%

http_server

Benchmark Backend Metric Base Head Δ Noise
concurrent/1 iocp ops_per_sec 110.6K ops/s 110.6K ops/s 🔴▼ -0.43% 0.66%
concurrent/16 iocp ops_per_sec 107.6K ops/s 107.9K ops/s 🟢▲ +0.06% 0.37%
concurrent/32 iocp ops_per_sec 107.0K ops/s 107.4K ops/s 🟢▲ +0.35% 0.40%
concurrent/4 iocp ops_per_sec 108.2K ops/s 108.4K ops/s 🟢▲ +0.05% 0.57%
multithread/1 iocp ops_per_sec 106.9K ops/s 107.2K ops/s 🟢▲ +0.15% 0.42%
multithread/16 iocp ops_per_sec 266.3K ops/s 268.0K ops/s 🟢▲ +0.66% 0.61%
multithread/2 iocp ops_per_sec 180.6K ops/s 181.4K ops/s 🟢▲ +0.28% 0.63%
multithread/4 iocp ops_per_sec 224.6K ops/s 225.7K ops/s 🟢▲ +0.49% 0.87%
multithread/8 iocp ops_per_sec 265.5K ops/s 266.9K ops/s 🟢▲ +0.58% 0.35%
single_conn iocp ops_per_sec 110.6K ops/s 110.8K ops/s 🟢▲ +0.18% 0.93%
single_conn_lockless iocp ops_per_sec 110.4K ops/s 110.9K ops/s 🟢▲ +0.71% 0.63%

socket_latency

Benchmark Backend Metric Base Head Δ Noise
concurrent/1 iocp latency_mean_ns 7.70 µs 7.62 µs 🟢▲ +1.01% 0.36%
concurrent/16 iocp latency_mean_ns 132.72 µs 130.08 µs 🟢▲ +4.09% 4.94%
concurrent/4 iocp latency_mean_ns 30.77 µs 30.67 µs 🟢▲ +0.20% 0.41%
concurrent_lockless/1 iocp latency_mean_ns 7.70 µs 7.65 µs 🟢▲ +1.11% 0.53%
concurrent_lockless/16 iocp latency_mean_ns 122.72 µs 122.15 µs 🟢▲ +0.59% 0.55%
concurrent_lockless/4 iocp latency_mean_ns 30.88 µs 30.65 µs 🟢▲ +0.48% 0.43%
pingpong/1 iocp latency_mean_ns 7.69 µs 7.63 µs 🟢▲ +0.67% 0.25%
pingpong/1024 iocp latency_mean_ns 7.82 µs 7.76 µs 🟢▲ +0.81% 0.53%
pingpong/64 iocp latency_mean_ns 7.71 µs 7.66 µs 🟢▲ +0.59% 0.32%
pingpong_lockless/1 iocp latency_mean_ns 7.68 µs 7.61 µs 🟢▲ +1.24% 0.44%
pingpong_lockless/1024 iocp latency_mean_ns 7.80 µs 7.74 µs 🟢▲ +0.91% 0.56%
pingpong_lockless/64 iocp latency_mean_ns 7.69 µs 7.64 µs 🟢▲ +0.69% 0.32%

socket_throughput

Benchmark Backend Metric Base Head Δ Noise
bidirectional/1024 iocp bytes_per_sec 280.3 MB/s 279.4 MB/s 🔴▼ -0.45% 0.66%
bidirectional/1048576 iocp bytes_per_sec 5.20 GB/s 5.83 GB/s 🟢▲ +10.18% 6.35%
bidirectional/16384 iocp bytes_per_sec 3.68 GB/s 3.72 GB/s 🟢▲ +0.11% 3.12%
bidirectional/262144 iocp bytes_per_sec 9.55 GB/s 9.43 GB/s 🔴▼ -1.11% 4.63%
bidirectional/4096 iocp bytes_per_sec 1.07 GB/s 1.07 GB/s 🟢▲ +0.30% 1.05%
bidirectional/65536 iocp bytes_per_sec 9.00 GB/s 8.85 GB/s 🔴▼ -0.14% 6.66%
bidirectional_lockless/1024 iocp bytes_per_sec 278.9 MB/s 280.4 MB/s 🟢▲ +0.86% 0.48%
bidirectional_lockless/1048576 iocp bytes_per_sec 5.58 GB/s 6.13 GB/s 🟢▲ +13.56% 8.62%
bidirectional_lockless/16384 iocp bytes_per_sec 3.70 GB/s 3.70 GB/s 🟢▲ +0.80% 0.85%
bidirectional_lockless/262144 iocp bytes_per_sec 9.51 GB/s 9.78 GB/s 🟢▲ +2.07% 2.94%
bidirectional_lockless/4096 iocp bytes_per_sec 1.07 GB/s 1.07 GB/s 🟢▲ +0.62% 0.72%
bidirectional_lockless/65536 iocp bytes_per_sec 8.97 GB/s 8.99 GB/s 🟢▲ +0.71% 1.38%
multithread/2 iocp bytes_per_sec 12.78 GB/s 12.78 GB/s 🟢▲ +0.45% 0.65%
multithread/4 iocp bytes_per_sec 16.98 GB/s 17.14 GB/s 🟢▲ +1.47% 1.00%
multithread/8 iocp bytes_per_sec 18.32 GB/s 18.35 GB/s 🔴▼ -0.12% 0.42%
unidirectional/1024 iocp bytes_per_sec 282.8 MB/s 282.9 MB/s 🟢▲ +0.10% 0.82%
unidirectional/1048576 iocp bytes_per_sec 4.48 GB/s 4.39 GB/s 🔴▼ -4.01% 4.74%
unidirectional/16384 iocp bytes_per_sec 3.78 GB/s 3.78 GB/s 🟢▲ +0.12% 0.71%
unidirectional/262144 iocp bytes_per_sec 8.94 GB/s 8.62 GB/s 🟢▲ +3.73% 13.89%
unidirectional/4096 iocp bytes_per_sec 1.09 GB/s 1.09 GB/s 🔴▼ -0.30% 0.82%
unidirectional/65536 iocp bytes_per_sec 9.33 GB/s 9.13 GB/s 🔴▼ -0.73% 4.23%
unidirectional_lockless/1024 iocp bytes_per_sec 283.9 MB/s 283.2 MB/s 🟢▲ +0.07% 1.09%
unidirectional_lockless/1048576 iocp bytes_per_sec 4.81 GB/s 5.10 GB/s 🟢▲ +11.50% 4.82%
unidirectional_lockless/16384 iocp bytes_per_sec 3.78 GB/s 3.77 GB/s 🟢▲ +0.03% 0.84%
unidirectional_lockless/262144 iocp bytes_per_sec 9.54 GB/s 9.76 GB/s 🟢▲ +3.22% 2.33%
unidirectional_lockless/4096 iocp bytes_per_sec 1.09 GB/s 1.08 GB/s 🔴▼ -0.51% 1.72%
unidirectional_lockless/65536 iocp bytes_per_sec 9.29 GB/s 9.33 GB/s 🟢▲ +0.31% 2.27%
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.32K ops/s 4.34K ops/s 🟢▲ +0.13% 0.75%
burst/100 kqueue ops_per_sec 444.1 ops/s 444.1 ops/s 🟢▲ +0.14% 0.79%
burst_lockless/10 kqueue ops_per_sec 4.37K ops/s 4.35K ops/s 🔴▼ -0.61% 0.83%
burst_lockless/100 kqueue ops_per_sec 446.5 ops/s 448.0 ops/s 🟢▲ +0.19% 0.91%
concurrent/1 kqueue ops_per_sec 20.02K ops/s 19.93K ops/s 🔴▼ -0.46% 0.87%
concurrent/16 kqueue ops_per_sec 36.07K ops/s 36.21K ops/s 🟢▲ +0.80% 0.56%
concurrent/4 kqueue ops_per_sec 29.20K ops/s 29.35K ops/s 🟢▲ +0.72% 0.69%
sequential kqueue ops_per_sec 20.48K ops/s 20.41K ops/s 🟢▲ +0.07% 0.62%
sequential_lockless kqueue ops_per_sec 20.28K ops/s 20.12K ops/s 🔴▼ -0.80% 0.96%

fan_out

Benchmark Backend Metric Base Head Δ Noise
concurrent_parents/1 kqueue ops_per_sec 8.05K ops/s 8.08K ops/s 🟢▲ +0.06% 1.43%
concurrent_parents/16 kqueue ops_per_sec 6.58K ops/s 6.47K ops/s 🔴▼ -2.43% 18.09%
concurrent_parents/4 kqueue ops_per_sec 8.28K ops/s 8.29K ops/s 🟢▲ +0.26% 1.10%
concurrent_parents_lockless/1 kqueue ops_per_sec 8.18K ops/s 8.20K ops/s 🔴▼ -0.23% 1.30%
concurrent_parents_lockless/16 kqueue ops_per_sec 6.65K ops/s 6.68K ops/s 🔴▼ -0.37% 16.79%
concurrent_parents_lockless/4 kqueue ops_per_sec 8.36K ops/s 8.37K ops/s 🟢▲ +0.08% 1.16%
fork_join/1 kqueue ops_per_sec 48.91K ops/s 48.91K ops/s 🔴▼ -0.41% 0.95%
fork_join/16 kqueue ops_per_sec 8.05K ops/s 8.08K ops/s 🟢▲ +0.13% 1.35%
fork_join/4 kqueue ops_per_sec 23.45K ops/s 23.58K ops/s 🟢▲ +1.02% 0.67%
fork_join/64 kqueue ops_per_sec 2.08K ops/s 2.06K ops/s 🔴▼ -0.45% 1.88%
fork_join_lockless/1 kqueue ops_per_sec 50.24K ops/s 50.03K ops/s 🔴▼ -0.32% 0.28%
fork_join_lockless/16 kqueue ops_per_sec 8.14K ops/s 8.18K ops/s 🟢▲ +0.23% 1.56%
fork_join_lockless/4 kqueue ops_per_sec 23.49K ops/s 23.55K ops/s 🟢▲ +0.32% 0.54%
fork_join_lockless/64 kqueue ops_per_sec 2.09K ops/s 2.08K ops/s 🔴▼ -0.36% 1.90%
nested/16 kqueue ops_per_sec 2.05K ops/s 2.05K ops/s 🟢▲ +0.07% 1.42%
nested/4 kqueue ops_per_sec 7.94K ops/s 7.98K ops/s 🟢▲ +0.37% 1.27%
nested_lockless/16 kqueue ops_per_sec 2.07K ops/s 2.07K ops/s 🟢▲ +0.05% 1.48%
nested_lockless/4 kqueue ops_per_sec 8.06K ops/s 8.10K ops/s 🔴▼ -0.04% 1.18%

http_server

Benchmark Backend Metric Base Head Δ Noise
concurrent/1 kqueue ops_per_sec 49.47K ops/s 49.38K ops/s 🔴▼ -0.23% 0.29%
concurrent/16 kqueue ops_per_sec 130.2K ops/s 130.2K ops/s 🟢▲ +0.01% 0.45%
concurrent/32 kqueue ops_per_sec 129.7K ops/s 130.2K ops/s 🔴▼ -0.11% 1.42%
concurrent/4 kqueue ops_per_sec 89.85K ops/s 89.93K ops/s 🔴▼ -0.25% 1.16%
multithread/1 kqueue ops_per_sec 129.7K ops/s 130.4K ops/s 🔴▼ -0.19% 1.06%
multithread/16 kqueue ops_per_sec 132.7K ops/s 132.8K ops/s 🔴▼ -0.02% 0.55%
multithread/2 kqueue ops_per_sec 184.3K ops/s 184.2K ops/s 🟢▲ +0.07% 0.99%
multithread/4 kqueue ops_per_sec 162.3K ops/s 163.0K ops/s 🔴▼ -0.20% 0.63%
multithread/8 kqueue ops_per_sec 137.8K ops/s 140.1K ops/s 🟢▲ +2.24% 1.31%
single_conn kqueue ops_per_sec 49.46K ops/s 49.34K ops/s 🔴▼ -0.11% 0.34%
single_conn_lockless kqueue ops_per_sec 49.75K ops/s 49.61K ops/s 🔴▼ -0.40% 0.60%

local_socket_latency

Benchmark Backend Metric Base Head Δ Noise
concurrent/1 kqueue latency_mean_ns 1.84 µs 1.85 µs 🔴▼ -0.69% 0.84%
concurrent/16 kqueue latency_mean_ns 27.31 µs 27.43 µs 🔴▼ -0.40% 0.31%
concurrent/4 kqueue latency_mean_ns 6.87 µs 6.89 µs 🔴▼ -0.28% 0.40%
concurrent_lockless/1 kqueue latency_mean_ns 1.82 µs 1.83 µs 🔴▼ -0.20% 0.60%
concurrent_lockless/16 kqueue latency_mean_ns 27.19 µs 27.22 µs 🔴▼ -0.29% 0.50%
concurrent_lockless/4 kqueue latency_mean_ns 6.82 µs 6.86 µs 🔴▼ -0.81% 0.53%
pingpong/1 kqueue latency_mean_ns 1.84 µs 1.84 µs 🔴▼ -0.65% 0.82%
pingpong/1024 kqueue latency_mean_ns 1.93 µs 1.94 µs 🔴▼ -0.93% 0.62%
pingpong/64 kqueue latency_mean_ns 1.83 µs 1.85 µs 🔴▼ -0.51% 0.43%
pingpong_lockless/1 kqueue latency_mean_ns 1.82 µs 1.82 µs 🔴▼ -0.33% 0.52%
pingpong_lockless/1024 kqueue latency_mean_ns 1.92 µs 1.93 µs 🔴▼ -0.16% 0.77%
pingpong_lockless/64 kqueue latency_mean_ns 1.82 µs 1.83 µs 🔴▼ -0.47% 0.66%

local_socket_throughput

Benchmark Backend Metric Base Head Δ Noise
bidirectional/1024 kqueue bytes_per_sec 1.30 GB/s 1.30 GB/s 🔴▼ -0.65% 0.44%
bidirectional/1048576 kqueue bytes_per_sec 3.87 GB/s 3.86 GB/s 🔴▼ -0.27% 0.50%
bidirectional/16384 kqueue bytes_per_sec 3.88 GB/s 3.85 GB/s 🔴▼ -1.02% 1.38%
bidirectional/262144 kqueue bytes_per_sec 3.84 GB/s 3.86 GB/s 🟢▲ +0.17% 1.24%
bidirectional/4096 kqueue bytes_per_sec 2.90 GB/s 2.91 GB/s 🟢▲ +0.56% 0.58%
bidirectional/65536 kqueue bytes_per_sec 3.86 GB/s 3.87 GB/s 🟢▲ +0.35% 0.72%
bidirectional_lockless/1024 kqueue bytes_per_sec 1.31 GB/s 1.31 GB/s 🔴▼ -0.09% 0.36%
bidirectional_lockless/1048576 kqueue bytes_per_sec 3.93 GB/s 3.93 GB/s 🟢▲ +0.33% 0.55%
bidirectional_lockless/16384 kqueue bytes_per_sec 3.96 GB/s 3.95 GB/s 🔴▼ -0.42% 0.56%
bidirectional_lockless/262144 kqueue bytes_per_sec 3.94 GB/s 3.94 GB/s 🔴▼ -0.68% 0.94%
bidirectional_lockless/4096 kqueue bytes_per_sec 2.96 GB/s 2.95 GB/s 🔴▼ -0.44% 0.68%
bidirectional_lockless/65536 kqueue bytes_per_sec 3.95 GB/s 3.92 GB/s 🔴▼ -0.94% 0.76%
unidirectional/1024 kqueue bytes_per_sec 1.28 GB/s 1.27 GB/s 🔴▼ -0.44% 0.64%
unidirectional/1048576 kqueue bytes_per_sec 3.51 GB/s 3.51 GB/s 🔴▼ -0.06% 0.74%
unidirectional/16384 kqueue bytes_per_sec 3.52 GB/s 3.51 GB/s 🔴▼ -0.23% 0.38%
unidirectional/262144 kqueue bytes_per_sec 3.51 GB/s 3.52 GB/s 🟢▲ +0.33% 0.53%
unidirectional/4096 kqueue bytes_per_sec 2.71 GB/s 2.70 GB/s 🔴▼ -0.47% 0.56%
unidirectional/65536 kqueue bytes_per_sec 3.52 GB/s 3.50 GB/s 🔴▼ -0.45% 0.34%
unidirectional_lockless/1024 kqueue bytes_per_sec 1.29 GB/s 1.28 GB/s 🔴▼ -0.22% 0.68%
unidirectional_lockless/1048576 kqueue bytes_per_sec 3.58 GB/s 3.59 GB/s 🟢▲ +0.27% 0.59%
unidirectional_lockless/16384 kqueue bytes_per_sec 3.60 GB/s 3.59 GB/s 🔴▼ -0.57% 0.72%
unidirectional_lockless/262144 kqueue bytes_per_sec 3.59 GB/s 3.59 GB/s 🔴▼ -0.09% 0.47%
unidirectional_lockless/4096 kqueue bytes_per_sec 2.75 GB/s 2.75 GB/s 🔴▼ -0.60% 0.91%
unidirectional_lockless/65536 kqueue bytes_per_sec 3.59 GB/s 3.59 GB/s 🟢▲ +0.02% 0.64%

socket_latency

Benchmark Backend Metric Base Head Δ Noise
concurrent/1 kqueue latency_mean_ns 18.81 µs 18.77 µs 🟢▲ +0.57% 0.44%
concurrent/16 kqueue latency_mean_ns 120.53 µs 120.96 µs 🔴▼ -0.06% 0.59%
concurrent/4 kqueue latency_mean_ns 43.57 µs 43.76 µs 🔴▼ -0.29% 0.94%
concurrent_lockless/1 kqueue latency_mean_ns 18.78 µs 18.71 µs 🟢▲ +0.35% 0.30%
concurrent_lockless/16 kqueue latency_mean_ns 119.95 µs 121.32 µs 🔴▼ -1.98% 1.02%
concurrent_lockless/4 kqueue latency_mean_ns 42.70 µs 43.04 µs 🔴▼ -0.90% 0.72%
pingpong/1 kqueue latency_mean_ns 15.48 µs 15.55 µs 🔴▼ -0.22% 1.59%
pingpong/1024 kqueue latency_mean_ns 19.09 µs 19.06 µs 🟢▲ +0.34% 0.34%
pingpong/64 kqueue latency_mean_ns 18.83 µs 18.78 µs 🟢▲ +0.34% 0.41%
pingpong_lockless/1 kqueue latency_mean_ns 15.37 µs 15.37 µs 🟢▲ +0.11% 0.13%
pingpong_lockless/1024 kqueue latency_mean_ns 19.01 µs 19.05 µs 🔴▼ -0.20% 0.22%
pingpong_lockless/64 kqueue latency_mean_ns 18.74 µs 18.74 µs 🟢▲ +0.34% 0.64%

socket_throughput

Benchmark Backend Metric Base Head Δ Noise
bidirectional/1024 kqueue bytes_per_sec 475.6 MB/s 471.7 MB/s 🔴▼ -0.65% 1.06%
bidirectional/1048576 kqueue bytes_per_sec 7.81 GB/s 7.68 GB/s 🟢▲ +0.50% 5.46%
bidirectional/16384 kqueue bytes_per_sec 4.56 GB/s 4.54 GB/s 🔴▼ -0.49% 1.37%
bidirectional/262144 kqueue bytes_per_sec 8.86 GB/s 8.71 GB/s 🔴▼ -1.30% 2.98%
bidirectional/4096 kqueue bytes_per_sec 1.82 GB/s 1.81 GB/s 🔴▼ -0.57% 0.60%
bidirectional/65536 kqueue bytes_per_sec 7.50 GB/s 7.53 GB/s 🟢▲ +0.56% 1.75%
bidirectional_lockless/1024 kqueue bytes_per_sec 474.9 MB/s 474.2 MB/s 🔴▼ -0.17% 1.01%
bidirectional_lockless/1048576 kqueue bytes_per_sec 7.82 GB/s 7.69 GB/s 🟢▲ +0.12% 5.57%
bidirectional_lockless/16384 kqueue bytes_per_sec 4.56 GB/s 4.54 GB/s 🔴▼ -0.48% 1.21%
bidirectional_lockless/262144 kqueue bytes_per_sec 8.81 GB/s 8.78 GB/s 🔴▼ -1.16% 3.00%
bidirectional_lockless/4096 kqueue bytes_per_sec 1.81 GB/s 1.82 GB/s 🟢▲ +0.04% 1.66%
bidirectional_lockless/65536 kqueue bytes_per_sec 7.56 GB/s 7.53 GB/s 🔴▼ -0.47% 1.75%
multithread/2 kqueue bytes_per_sec 7.66 GB/s 7.46 GB/s 🔴▼ -1.94% 4.24%
multithread/4 kqueue bytes_per_sec 3.68 GB/s 3.63 GB/s 🔴▼ -1.46% 4.09%
multithread/8 kqueue bytes_per_sec 3.29 GB/s 3.18 GB/s 🔴▼ -7.96% 10.14%
unidirectional/1024 kqueue bytes_per_sec 466.4 MB/s 457.1 MB/s 🔴▼ -0.88% 2.40%
unidirectional/1048576 kqueue bytes_per_sec 9.04 GB/s 8.78 GB/s 🔴▼ -0.74% 5.98%
unidirectional/16384 kqueue bytes_per_sec 4.48 GB/s 4.41 GB/s 🔴▼ -1.90% 2.30%
unidirectional/262144 kqueue bytes_per_sec 8.79 GB/s 8.85 GB/s 🔴▼ -0.30% 1.97%
unidirectional/4096 kqueue bytes_per_sec 1.81 GB/s 1.79 GB/s 🔴▼ -1.14% 1.34%
unidirectional/65536 kqueue bytes_per_sec 7.34 GB/s 7.42 GB/s 🟢▲ +1.48% 2.30%
unidirectional_lockless/1024 kqueue bytes_per_sec 482.7 MB/s 475.3 MB/s 🔴▼ -1.14% 2.71%
unidirectional_lockless/1048576 kqueue bytes_per_sec 9.05 GB/s 8.81 GB/s 🟢▲ +0.15% 5.22%
unidirectional_lockless/16384 kqueue bytes_per_sec 4.47 GB/s 4.48 GB/s 🔴▼ -0.32% 2.39%
unidirectional_lockless/262144 kqueue bytes_per_sec 9.04 GB/s 8.94 GB/s 🔴▼ -0.41% 4.20%
unidirectional_lockless/4096 kqueue bytes_per_sec 1.83 GB/s 1.81 GB/s 🔴▼ -1.77% 1.40%
unidirectional_lockless/65536 kqueue bytes_per_sec 7.51 GB/s 7.38 GB/s 🔴▼ -2.53% 1.56%

Run & raw JSON artifacts · flag rule: |median Δ| > max(2%, 3×CV of the noisier side) · advisory only

@sgerbino
sgerbino merged commit 41d0de1 into cppalliance:develop Oct 28, 2026
48 checks passed
@sgerbino
sgerbino deleted the pr/wsa-exit-cleanup branch October 28, 2026 15:39
@github-project-automation github-project-automation Bot moved this from Backlog to Done in Beast2 Oct 28, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

2 participants