@swarmmachina/swm-uws 0.7.2 / raw HTTP

Замеры swm-uws

Изолированный raw HTTP прогон нативного биндинга против закреплённого uWebSockets.js на одном сервере, одном обработчике и одном стенде.

473 570медиана запросов в секунду

+5,81% к пропускной способности закреплённого upstream

100
connections
10
pipelining
6 × 5s
прогон
p95 3,782 ms
swm-uws
p99 4,344 ms
swm-uws
регрессионный порог пройден

Все 6 пар. Без отбора.

Порядок менялся AB/BA, чтобы прогрев и дрейф стенда не давали одной стороне постоянного преимущества. swm-uws выиграл по throughput в 4 из 6 пар.

  1. 01
    swm-uws
    433 346 запр/с
    upstream uWS
    436 476 запр/с
    дельта
    -0,72%
    p99
    4,565 / 4,656 мс
  2. 02
    swm-uws
    411 926 запр/с
    upstream uWS
    453 706 запр/с
    дельта
    -9,21%
    p99
    4,749 / 4,387 мс
  3. 03
    swm-uws
    487 614 запр/с
    upstream uWS
    452 755 запр/с
    дельта
    +7,70%
    p99
    4,387 / 4,475 мс
  4. 04
    swm-uws
    470 326 запр/с
    upstream uWS
    441 473 запр/с
    дельта
    +6,54%
    p99
    4,301 / 4,565 мс
  5. 05
    swm-uws
    476 814 запр/с
    upstream uWS
    401 785 запр/с
    дельта
    +18,67%
    p99
    4,301 / 4,941 мс
  6. 06
    swm-uws
    477 410 запр/с
    upstream uWS
    454 353 запр/с
    дельта
    +5,07%
    p99
    4,301 / 4,475 мс

Throughput, хвосты и runtime

Throughput читается вместе с p95, p99, ELU и памятью. Меньшая задержка и память здесь важны не меньше итогового темпа.

Метрикаswm-uwsupstream uWSдельтаКак читать
Throughput473 570 запр/с447 114 запр/с+5,81%больше лучше
Задержка p953,782 мс4,013 мс-5,77%меньше лучше
Задержка p994,344 мс4,520 мс-3,88%меньше лучше
ELU сервера96,64%96,70%-0,07%контекст
RSS после прогрева58,94 MiB59,65 MiB-1,20%меньше лучше
Heap used после прогрева5,22 MiB6,07 MiB-14,00%меньше лучше

Вывод по хвостам: медиана p95 у swm-uws составила 3,782 мс, p99 - 4,344 мс. У закреплённого upstream: 4,013 и 4,520 мс соответственно. Ошибок запросов не было.

CPU-счётчики на один ответ

Независимый perf stat запуск повторил профиль нагрузки и нормализовал аппаратные счётчики на один HTTP-ответ.

463 062запр/с

p99 4,475мс

5 851,51
cycles · на запрос
9 427,79
instructions · на запрос
2 072,49
branches · на запрос
8,670
branch misses · на запрос
72,70
cache references · на запрос
0,056
cache misses · на запрос

swm-core 5.1.0: проверка биндинга

Отдельный balanced-прогон показывает биндинг в реальном серверном слое. HTTP и WebSocket измерялись по четыре раза с теми же версиями swm-uws и upstream.

СценарийПрогоныswm-uwsupstream uWSp95 / p99ELU / RSS
HTTP GET /base-sync4 × 6s219 044 запр/с +3,44%211 768 запр/с4,656 / 8,862 мс98,72% / 80,42 MiB
WebSocket echo · 64 B4 × 6s104 033 msg/s +1,04%102 967 msg/s0,857 / 0,900 мс97,98% / 67,17 MiB

Как воспроизвести

Основной релизный результат получен на Linux x64: 100 connections, pipelining 10, 2 секунды прогрева, 5 секунд измерения, 6 сбалансированных пар и 4 client workers.

Команда релизного Linux-прогона

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
Стенд
Node.js 22.23.1 · Linux 6.17.0-40-generic x64 · Intel Xeon CPU E5-2680 v4
Сборка
Clang 18 · PGO balanced · LTO · generic x86-64