@swarmmachina/swm-uws 0.6.0 / raw HTTP
swm-uws measurements
An isolated raw HTTP run of the native binding against pinned uWebSockets.js with the same server, handler, and host.
+12.71% throughput against the pinned upstream
- 100
- connections
- 10
- pipelining
- 10 × 10s
- round
- p95 3.635 ms
- swm-uws
- p99 3.896 ms
- swm-uws
- regression gate passed
All ten pairs. No cherry-picking.
AB/BA ordering alternated so warm-up and host drift could not consistently favor one side. swm-uws led throughput in all ten pairs.
- 01
- swm-uws
- 481,759 req/s
- upstream uWS
- 429,215 req/s
- delta
- +12.24%
- p99
- 4.053 / 4.475 ms
- 02
- swm-uws
- 484,113 req/s
- upstream uWS
- 425,257 req/s
- delta
- +13.84%
- p99
- 3.974 / 4.475 ms
- 03
- swm-uws
- 499,080 req/s
- upstream uWS
- 434,250 req/s
- delta
- +14.93%
- p99
- 3.896 / 4.387 ms
- 04
- swm-uws
- 500,261 req/s
- upstream uWS
- 448,291 req/s
- delta
- +11.59%
- p99
- 3.896 / 4.301 ms
- 05
- swm-uws
- 497,510 req/s
- upstream uWS
- 439,557 req/s
- delta
- +13.18%
- p99
- 3.896 / 4.387 ms
- 06
- swm-uws
- 483,383 req/s
- upstream uWS
- 441,113 req/s
- delta
- +9.58%
- p99
- 4.053 / 4.387 ms
- 07
- swm-uws
- 506,037 req/s
- upstream uWS
- 430,500 req/s
- delta
- +17.55%
- p99
- 3.819 / 4.475 ms
- 08
- swm-uws
- 495,532 req/s
- upstream uWS
- 434,787 req/s
- delta
- +13.97%
- p99
- 3.896 / 4.387 ms
- 09
- swm-uws
- 495,049 req/s
- upstream uWS
- 443,162 req/s
- delta
- +11.71%
- p99
- 3.896 / 4.301 ms
- 10
- swm-uws
- 490,719 req/s
- upstream uWS
- 440,558 req/s
- delta
- +11.39%
- p99
- 3.974 / 4.387 ms
Throughput, tails, and runtime
Throughput is read alongside p95, p99, ELU, and memory. Lower tail latency and memory matter as much as the final rate.
| Metric | swm-uws | upstream uWS | delta | Direction |
|---|---|---|---|---|
| Throughput | 495,290 req/s | 437,172 req/s | +12.71% | higher is better |
| p95 latency | 3.635 ms | 4.134 ms | -12.07% | lower is better |
| p99 latency | 3.896 ms | 4.387 ms | -11.20% | lower is better |
| Server ELU | 98.29% | 98.27% | +0.01% | context |
| RSS after warm-up | 59.59 MiB | 60.51 MiB | -1.51% | lower is better |
| Heap used after warm-up | 5.71 MiB | 6.07 MiB | -5.86% | lower is better |
Tail conclusion: swm-uws median p95 was 3.635 ms and p99 was 3.896 ms. The pinned upstream measured 4.134 ms and 4.387 ms respectively. There were no request errors.
CPU counters per response
An independent perf stat run repeated the load profile and normalized hardware counters per HTTP response.
490,740req/s
p99 3.974ms
- 5,600.65
- cycles · per request
- 9,177.51
- instructions · per request
- 1,878.95
- branches · per request
- 7.657
- branch misses · per request
- 69.89
- cache references · per request
- 0.131
- cache misses · per request
swm-core 4.3.0 binding check
A separate balanced run measures the binding inside the real server layer. HTTP and WebSocket were each measured four times with the same swm-uws and upstream versions.
| Scenario | Runs | swm-uws | upstream uWS | p95 / p99 | ELU / RSS |
|---|---|---|---|---|---|
| HTTP GET /base-sync | 4 × 6s | 235,200 req/s +12.66% | 208,768 req/s | 4.344 / 8.187 ms | 98.72% / 79.74 MiB |
| WebSocket echo · 64 B | 4 × 6s | 104,706 msg/s -0.94% | 105,697 msg/s | 0.839 / 0.891 ms | 98.09% / 66.99 MiB |
How to reproduce it
The primary release result ran on Linux x64 with 100 connections, pipelining 10, a 2-second warm-up, a 10-second measurement, 10 balanced pairs, and 4 client workers.
Release Linux benchmark command
npm run build:native:pgo
SWM_BENCH_REFERENCE=/path/to/uwebsockets.js/ESM_wrapper.mjs \
npm run bench:compare:pgo:linux -- benchmark/profiles/pgo-balanced-linux- Environment
- Node.js 22.22.3 · Linux 6.17.0-40-generic x64 · Intel Xeon E5-2680 v4
- Build
- Clang 18 · PGO balanced · LTO · generic x86-64