Skip to content

Performance ​

Performance

Sova vs Axum vs Actix-web on an identical multi-page fixture site (same HTML/JSON bodies, verified SHA-256), including a realistic POST /api/echo JSON path.

Methodology ​

  • Stand: bench/stand/ — shared fixtures, three release servers (stand_sova, stand_axum, stand_actix).
  • Workspace [profile.release] uses thin LTO (codegen-units = 1) — production-shaped binaries, not dev.
  • Bodies must match byte-for-byte across frameworks before load runs.
  • Load tool: oha.
  • Stability: oha warm-up 5s at full concurrency; 3 round(s) with rotating framework order; reported numbers are the median RPS (min/max kept in JSON for spread).
  • This capture: profile deep, duration 15s, concurrency 100, TOKIO_WORKER_THREADS=4.
  • Captured at 2026-08-09T06:19:10Z on Admins-MacBook-Pro.local.

Pages: /, /about, /blog, /blog/hello, /contact, /api/health, POST /api/echo.

Latest results — GET / (median) ​

FrameworkReq/smin–maxp50 (ms)p99 (ms)
sova122246108062–1231730.7851.831
axum122665115021–1248640.7831.782
actix10064999291–1041360.9342.712

Latest results — POST /api/echo (median) ​

FrameworkReq/sp99 (ms)
sova1228132.106
axum1255801.947
actix1028653.013

Latest results — mean across all paths (of medians) ​

FrameworkMean Req/sMean p99 (ms)max path spread %
sova1175892.27212.4%
axum1204482.0838.6%
actix1035133.0177.4%

Per-path detail (median) ​

FrameworkPathReq Req/smin–maxspread %p50p99
actix/10064999291–1041364.8%0.9342.712
actix/about10467699866–1059185.8%0.9292.751
actix/api/echo102865102147–1069774.7%0.9023.013
actix/api/health107683100091–1080137.4%0.9032.783
actix/blog9964498465–1031544.7%0.9253.448
actix/blog/hello104482103196–1066993.4%0.9083.900
actix/contact104591100530–1061345.4%0.9212.511
axum/122665115021–1248648.0%0.7831.782
axum/about123469115999–1253757.6%0.7811.740
axum/api/echo125580117318–1265867.4%0.7621.947
axum/api/health125295123798–1262081.9%0.7661.774
axum/blog115613114235–1221676.9%0.7792.220
axum/blog/hello117184112162–1222048.6%0.7822.384
axum/contact113332113126–1203286.4%0.7792.737
sova/122246108062–12317312.4%0.7851.831
sova/about115248112862–1153422.2%0.7862.502
sova/api/echo122813120465–1245373.3%0.7632.106
sova/api/health114522113884–1157911.7%0.7732.462
sova/blog118889110540–1193047.4%0.7862.180
sova/blog/hello110984110878–1141743.0%0.7922.712
sova/contact118417109367–12129210.1%0.7872.111

Re-run / regression gate ​

bash
./bench/stand/run.sh                     # deep: 15s × 3 rounds, warm-up, median
PROFILE=quick ./bench/stand/run.sh      # smoke
./bench/stand/run.sh --update-baseline
ROUNDS=5 DURATION=20s ./bench/stand/run.sh

Regression thresholds (vs bench/stand/results/baseline.json): home RPS drop > 15% or p99 rise > 40% fails the script.

Machine-sensitive: compare relative rankings and deltas, not absolute RPS across laptops.