@swarmmachina/swm-uws 0.6.0 / raw HTTP

Замеры swm-uws

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

495 290медиана запросов в секунду

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

100
connections
10
pipelining
10 × 10s
прогон
p95 3,635 ms
swm-uws
p99 3,896 ms
swm-uws
регрессионный порог пройден

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

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

  1. 01
    swm-uws
    481 759 запр/с
    upstream uWS
    429 215 запр/с
    дельта
    +12,24%
    p99
    4,053 / 4,475 мс
  2. 02
    swm-uws
    484 113 запр/с
    upstream uWS
    425 257 запр/с
    дельта
    +13,84%
    p99
    3,974 / 4,475 мс
  3. 03
    swm-uws
    499 080 запр/с
    upstream uWS
    434 250 запр/с
    дельта
    +14,93%
    p99
    3,896 / 4,387 мс
  4. 04
    swm-uws
    500 261 запр/с
    upstream uWS
    448 291 запр/с
    дельта
    +11,59%
    p99
    3,896 / 4,301 мс
  5. 05
    swm-uws
    497 510 запр/с
    upstream uWS
    439 557 запр/с
    дельта
    +13,18%
    p99
    3,896 / 4,387 мс
  6. 06
    swm-uws
    483 383 запр/с
    upstream uWS
    441 113 запр/с
    дельта
    +9,58%
    p99
    4,053 / 4,387 мс
  7. 07
    swm-uws
    506 037 запр/с
    upstream uWS
    430 500 запр/с
    дельта
    +17,55%
    p99
    3,819 / 4,475 мс
  8. 08
    swm-uws
    495 532 запр/с
    upstream uWS
    434 787 запр/с
    дельта
    +13,97%
    p99
    3,896 / 4,387 мс
  9. 09
    swm-uws
    495 049 запр/с
    upstream uWS
    443 162 запр/с
    дельта
    +11,71%
    p99
    3,896 / 4,301 мс
  10. 10
    swm-uws
    490 719 запр/с
    upstream uWS
    440 558 запр/с
    дельта
    +11,39%
    p99
    3,974 / 4,387 мс

Throughput, хвосты и runtime

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

Метрикаswm-uwsupstream uWSдельтаКак читать
Throughput495 290 запр/с437 172 запр/с+12,71%больше лучше
Задержка p953,635 мс4,134 мс-12,07%меньше лучше
Задержка p993,896 мс4,387 мс-11,20%меньше лучше
ELU сервера98,29%98,27%+0,01%контекст
RSS после прогрева59,59 MiB60,51 MiB-1,51%меньше лучше
Heap used после прогрева5,71 MiB6,07 MiB-5,86%меньше лучше

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

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

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

490 740запр/с

p99 3,974мс

5 600,65
cycles · на запрос
9 177,51
instructions · на запрос
1 878,95
branches · на запрос
7,657
branch misses · на запрос
69,89
cache references · на запрос
0,131
cache misses · на запрос

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

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

СценарийПрогоныswm-uwsupstream uWSp95 / p99ELU / RSS
HTTP GET /base-sync4 × 6s235 200 запр/с +12,66%208 768 запр/с4,344 / 8,187 мс98,72% / 79,74 MiB
WebSocket echo · 64 B4 × 6s104 706 msg/s -0,94%105 697 msg/s0,839 / 0,891 мс98,09% / 66,99 MiB

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

Основной релизный результат получен на Linux x64: 100 connections, pipelining 10, 2 секунды прогрева, 10 секунд измерения, 10 сбалансированных пар и 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.22.3 · Linux 6.17.0-40-generic x64 · Intel Xeon E5-2680 v4
Сборка
Clang 18 · PGO balanced · LTO · generic x86-64