@swarmmachina/swm-uws 0.7.2 / 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.

473,570median requests per second

+5.81% throughput against the pinned upstream

100
connections
10
pipelining
6 × 5s
round
p95 3.782 ms
swm-uws
p99 4.344 ms
swm-uws
regression gate passed

All 6 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 4 of 6 pairs.

  1. 01
    swm-uws
    433,346 req/s
    upstream uWS
    436,476 req/s
    delta
    -0.72%
    p99
    4.565 / 4.656 ms
  2. 02
    swm-uws
    411,926 req/s
    upstream uWS
    453,706 req/s
    delta
    -9.21%
    p99
    4.749 / 4.387 ms
  3. 03
    swm-uws
    487,614 req/s
    upstream uWS
    452,755 req/s
    delta
    +7.70%
    p99
    4.387 / 4.475 ms
  4. 04
    swm-uws
    470,326 req/s
    upstream uWS
    441,473 req/s
    delta
    +6.54%
    p99
    4.301 / 4.565 ms
  5. 05
    swm-uws
    476,814 req/s
    upstream uWS
    401,785 req/s
    delta
    +18.67%
    p99
    4.301 / 4.941 ms
  6. 06
    swm-uws
    477,410 req/s
    upstream uWS
    454,353 req/s
    delta
    +5.07%
    p99
    4.301 / 4.475 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.

Metricswm-uwsupstream uWSdeltaDirection
Throughput473,570 req/s447,114 req/s+5.81%higher is better
p95 latency3.782 ms4.013 ms-5.77%lower is better
p99 latency4.344 ms4.520 ms-3.88%lower is better
Server ELU96.64%96.70%-0.07%context
RSS after warm-up58.94 MiB59.65 MiB-1.20%lower is better
Heap used after warm-up5.22 MiB6.07 MiB-14.00%lower is better

Tail conclusion: swm-uws median p95 was 3.782 ms and p99 was 4.344 ms. The pinned upstream measured 4.013 ms and 4.520 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.

463,062req/s

p99 4.475ms

5,851.51
cycles · per request
9,427.79
instructions · per request
2,072.49
branches · per request
8.670
branch misses · per request
72.70
cache references · per request
0.056
cache misses · per request

swm-core 5.1.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.

ScenarioRunsswm-uwsupstream uWSp95 / p99ELU / RSS
HTTP GET /base-sync4 × 6s219,044 req/s +3.44%211,768 req/s4.656 / 8.862 ms98.72% / 80.42 MiB
WebSocket echo · 64 B4 × 6s104,033 msg/s +1.04%102,967 msg/s0.857 / 0.900 ms97.98% / 67.17 MiB

How to reproduce it

The primary release result ran on Linux x64 with 100 connections, pipelining 10, a 2-second warm-up, a 5-second measurement, 6 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.23.1 · Linux 6.17.0-40-generic x64 · Intel Xeon CPU E5-2680 v4
Build
Clang 18 · PGO balanced · LTO · generic x86-64