Skip to content

zix http1 entry - #998

Open
prothegee wants to merge 77 commits into
MDA2AV:mainfrom
prothegee:zix-http1
Open

zix http1 entry#998
prothegee wants to merge 77 commits into
MDA2AV:mainfrom
prothegee:zix-http1

Conversation

@prothegee

@prothegee prothegee commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Description

zix entry for http1 using 0.5.x branch.

Update:

  • Using dual listener port.
  • Tweak on config init side.
  • Adding new tests:
    • static-tls
    • json-tls
    • json-comp
    • api-4
    • api-16
    • async-db
    • crud

Checklist:

  • /benchmark -f zix
  • /benchmark -f zix --save

@prothegee

Copy link
Copy Markdown
Contributor Author

Testing new approach and database tests entries for H1.

@prothegee

Copy link
Copy Markdown
Contributor Author

/benchmark -f zix

@github-actions

Copy link
Copy Markdown
Contributor

👋 /benchmark request received. A collaborator will review and approve the run.

@github-actions

Copy link
Copy Markdown
Contributor

Benchmark Results

Framework: zix | Test: all tests

Test Conn RPS CPU Mem Δ RPS Δ Mem
baseline 512 4,271,672 6433.6% 541MiB +1.3% +316.2%
baseline 4096 4,421,593 6274.1% 565MiB -1.6% +203.8%
pipelined 512 53,759,494 6441.7% 540MiB +0.3% +303.0%
pipelined 4096 55,456,780 6287.7% 563MiB -0.9% +202.7%
limited-conn 512 2,692,208 5435.0% 545MiB -1.8% +263.3%
limited-conn 4096 2,713,743 5613.0% 576MiB -1.4% +143.0%
json 4096 2,367,341 5563.2% 563MiB +0.8% +94.1%
json-comp 512 2,229,405 5245.1% 551MiB NEW NEW
json-comp 4096 3,081,536 6299.5% 572MiB NEW NEW
json-comp 16384 2,897,019 6390.4% 627MiB NEW NEW
json-tls 4096 1,924,633 4725.9% 691MiB NEW NEW
upload 32 8,202 1042.1% 533MiB +0.2% +329.8%
upload 256 6,667 930.5% 535MiB ~0% +311.5%
api-4 256 67,827 260.7% 96MiB NEW NEW
api-16 1024 249,618 1418.6% 330MiB NEW NEW
static 1024 2,035,434 5566.0% 546MiB +0.5% +290.0%
static 4096 2,020,569 5441.5% 589MiB -0.8% +202.1%
static 6800 1,995,731 5432.8% 625MiB +0.5% +159.3%
async-db 1024 161,571 5287.1% 778MiB NEW NEW
crud 4096 397,237 6125.3% 911MiB NEW NEW
Full log

  1615711 requests in 10.00s, 1615714 responses
  Throughput: 161.53K req/s
  Bandwidth:  622.15MB/s
  Status codes: 2xx=1615714, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 1615713 / 1615714 responses (100.0%)
  Reconnects: 64447
  Per-template: 322384,323182,324038,323664,322445
  Per-template-ok: 322384,323182,324038,323664,322445
[info] CPU 5287.1% | Mem 778MiB

[run 2/3]
gcannon v0.5.3
  Target:    localhost:8080/
  Threads:   64
  Conns:     1024 (16/thread)
  Pipeline:  1
  Req/conn:  25
  Templates: 5
  Expected:  200
  Duration:  10s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   5.87ms   4.02ms   13.30ms   26.40ms   40.20ms

  1597296 requests in 10.00s, 1597296 responses
  Throughput: 159.69K req/s
  Bandwidth:  615.35MB/s
  Status codes: 2xx=1597296, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 1597288 / 1597296 responses (100.0%)
  Reconnects: 63687
  Per-template: 318534,319412,320003,320251,319088
  Per-template-ok: 318534,319412,320003,320251,319088
[info] CPU 5310.1% | Mem 778MiB

[run 3/3]
gcannon v0.5.3
  Target:    localhost:8080/
  Threads:   64
  Conns:     1024 (16/thread)
  Pipeline:  1
  Req/conn:  25
  Templates: 5
  Expected:  200
  Duration:  10s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   5.98ms   4.05ms   13.60ms   27.70ms   42.50ms

  1576268 requests in 10.00s, 1576269 responses
  Throughput: 157.59K req/s
  Bandwidth:  607.15MB/s
  Status codes: 2xx=1576269, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 1576268 / 1576269 responses (100.0%)
  Reconnects: 62916
  Per-template: 314270,315364,315921,316093,314620
  Per-template-ok: 314270,315364,315921,316093,314620
[info] CPU 5283.3% | Mem 780MiB

=== Best: 161571 req/s (CPU: 5287.1%, Mem: 778MiB) ===
[info] input BW: 10.79MB/s (avg template: 70 bytes)
[info] saved results/async-db/1024/zix.json
httparena-bench-zix
httparena-bench-zix

==============================================
=== zix / crud / 4096c (tool=gcannon) ===
==============================================
[info] resetting postgres for a clean per-profile baseline
[info] starting postgres sidecar
httparena-postgres
[info] postgres ready (seeded)
[info] waiting for server...
[info] server ready

[run 1/3]
gcannon v0.5.3
  Target:    localhost:8080/
  Threads:   64
  Conns:     4096 (64/thread)
  Pipeline:  1
  Req/conn:  200
  Templates: 20
  Expected:  200
  Duration:  15s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   9.55ms   4.58ms   26.30ms   53.60ms   82.50ms

  5914586 requests in 15.00s, 5914458 responses
  Throughput: 394.23K req/s
  Bandwidth:  117.30MB/s
  Status codes: 2xx=5914458, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 5914458 / 5914458 responses (100.0%)
  Reconnects: 27558
  Per-template: 276171,225981,237739,245494,247002,252165,260374,272274,298253,322818,332488,336119,334368,335294,337649,335812,346286,332210,292270,293691
  Per-template-ok: 276171,225981,237739,245494,247002,252165,260374,272274,298253,322818,332488,336119,334368,335294,337649,335812,346286,332210,292270,293691
[info] CPU 6079.2% | Mem 836MiB

[run 2/3]
gcannon v0.5.3
  Target:    localhost:8080/
  Threads:   64
  Conns:     4096 (64/thread)
  Pipeline:  1
  Req/conn:  200
  Templates: 20
  Expected:  200
  Duration:  15s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   10.29ms   5.50ms   27.60ms   55.70ms   81.50ms

  5523342 requests in 15.00s, 5523342 responses
  Throughput: 368.15K req/s
  Bandwidth:  108.67MB/s
  Status codes: 2xx=5523342, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 5523342 / 5523342 responses (100.0%)
  Reconnects: 25697
  Per-template: 283340,225371,200793,213489,215258,220841,233345,263351,292941,305974,307911,305734,307094,310358,310255,310865,320324,317244,290729,288125
  Per-template-ok: 283340,225371,200793,213489,215258,220841,233345,263351,292941,305974,307911,305734,307094,310358,310255,310865,320324,317244,290729,288125
[info] CPU 6153.5% | Mem 867MiB

[run 3/3]
gcannon v0.5.3
  Target:    localhost:8080/
  Threads:   64
  Conns:     4096 (64/thread)
  Pipeline:  1
  Req/conn:  200
  Templates: 20
  Expected:  200
  Duration:  15s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   9.47ms   3.37ms   27.40ms   55.40ms   80.70ms

  5958566 requests in 15.00s, 5958566 responses
  Throughput: 397.13K req/s
  Bandwidth:  117.90MB/s
  Status codes: 2xx=5958566, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 5958549 / 5958566 responses (100.0%)
  Reconnects: 27904
  Per-template: 283593,242813,239440,229595,232262,234667,243260,267479,299094,327889,338869,341645,340298,341922,343987,342990,350179,320409,322060,316098
  Per-template-ok: 283593,242813,239440,229595,232262,234667,243260,267479,299094,327889,338869,341645,340298,341922,343987,342990,350179,320409,322060,316098
[info] CPU 6125.3% | Mem 911MiB

=== Best: 397237 req/s (CPU: 6125.3%, Mem: 911MiB) ===
[info] input BW: 34.10MB/s (avg template: 90 bytes)
[info] saved results/crud/4096/zix.json
httparena-bench-zix
httparena-bench-zix
[info] skip: zix does not subscribe to fortunes
[info] skip: zix does not subscribe to baseline-h2
[info] skip: zix does not subscribe to static-h2
[info] skip: zix does not subscribe to baseline-h2c
[info] skip: zix does not subscribe to json-h2c
[info] skip: zix does not subscribe to baseline-h3
[info] skip: zix does not subscribe to static-h3
[info] skip: zix does not subscribe to gateway-64
[info] skip: zix does not subscribe to gateway-h3
[info] skip: zix does not subscribe to production-stack
[info] skip: zix does not subscribe to unary-grpc
[info] skip: zix does not subscribe to unary-grpc-tls
[info] skip: zix does not subscribe to stream-grpc
[info] skip: zix does not subscribe to stream-grpc-tls
[info] skip: zix does not subscribe to echo-ws
[info] skip: zix does not subscribe to echo-ws-pipeline
[info] rebuilding site/data/*.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/frameworks.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/api-16-1024.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/api-4-256.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/async-db-1024.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/baseline-4096.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/baseline-512.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/crud-4096.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/json-4096.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/json-comp-16384.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/json-comp-4096.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/json-comp-512.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/json-tls-4096.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/limited-conn-4096.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/limited-conn-512.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/pipelined-4096.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/pipelined-512.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/static-1024.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/static-4096.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/static-6800.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/upload-256.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/upload-32.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/current.json
[info] done
httparena-postgres
httparena-redis
[info] restoring loopback MTU to 65536

@prothegee

Copy link
Copy Markdown
Contributor Author

Oh my, didn't expect the cpu burn that much with high memory consumption.

@prothegee
prothegee marked this pull request as draft July 15, 2026 20:09
@prothegee
prothegee marked this pull request as ready for review July 21, 2026 02:43
@prothegee
prothegee marked this pull request as ready for review August 14, 2026 16:48
… propagation

- Migrate JSON parsing and serialization across `json`, `crud`, and `dataset`
  modules to use `jzon`, eliminating manual string building and `std.json`
  overhead.
- Remove response memoization and startup pre-serialization. The `json`
  handler now serializes per request, and `crudcache` strictly operates as a
  row-level cache-aside (holding decoded DB rows, not rendered HTTP responses)
  to accurately reflect benchmark profile constraints.
- Replace the custom `static` handler with the engine's native `public_dir`
  configuration.
- Enforce strict error propagation by converting handlers and shared responders
  (`response.zig`) to return `!void`, replacing silent error swallowing with
  `try`.
- Centralize byte-buffer formatting utilities (integers, strings, JSON
  escaping) into `shared/util.zig`.
- Refactor `dbpg` to use a shared `CrudWrite` payload for create/update jobs
  and improve lane arming logic for `.URING` vs `.EPOLL`/`.ASYNC` models.
- Add comprehensive module-level documentation explaining design choices,
  benchmark constraints, and engine interactions.
- Update `Dockerfile` to target Zix `0.5.x` and change Zig build summary to
  `failures`.
- Add `static-tls` to the `meta.json` test matrix.
@prothegee

prothegee commented Aug 14, 2026

Copy link
Copy Markdown
Contributor Author

Bump zix branch to 0.5.x

and follow-up #1121 (comment)

@prothegee

Copy link
Copy Markdown
Contributor Author

/benchmark -f zix

@github-actions

Copy link
Copy Markdown
Contributor

👋 Benchmark request received. A collaborator will review and approve the run.

@github-actions

Copy link
Copy Markdown
Contributor

Benchmark Results

Framework: zix | Test: all tests

Test Conn RPS CPU Mem Δ RPS Δ Mem
baseline 512 4,196,354 6415.5% 132MiB -0.5% +1.5%
baseline 4096 4,414,698 6415.8% 193MiB -1.7% +3.8%
pipelined 512 55,015,587 6307.8% 130MiB +2.6% -3.0%
pipelined 4096 57,749,619 6414.3% 192MiB +3.2% +3.2%
limited-conn 512 2,675,734 5499.9% 130MiB -2.4% -13.3%
limited-conn 4096 2,692,516 5804.1% 239MiB -2.1% +0.8%
json 4096 2,322,497 6536.4% 289MiB -1.1% -0.3%
json-comp 512 954,925 6171.1% 123MiB NEW NEW
json-comp 4096 1,053,292 6786.8% 211MiB NEW NEW
json-comp 16384 1,024,595 6808.2% 525MiB NEW NEW
json-tls 4096 1,893,961 5416.8% 279MiB NEW NEW
upload 32 9,003 1010.7% 129MiB +10.0% +4.0%
upload 256 6,457 904.0% 134MiB -3.1% +3.1%
api-4 256 67,993 234.6% 46MiB NEW NEW
api-16 1024 252,181 993.6% 125MiB NEW NEW
static 1024 1,859,747 6378.0% 157MiB -8.2% +12.1%
static 4096 1,914,036 6297.8% 231MiB -6.0% +18.5%
static 6800 1,873,690 6398.7% 293MiB -5.7% +21.6%
static-tls 1024 1,218,854 5135.0% 184MiB NEW NEW
static-tls 4096 1,023,293 4353.3% 306MiB NEW NEW
static-tls 6800 810,232 3700.9% 410MiB NEW NEW
async-db 1024 408,861 3219.0% 337MiB NEW NEW
crud 4096 831,891 3224.0% 388MiB NEW NEW
Full log
[info] postgres ready (seeded)
[info] waiting for server...
[info] server ready

[run 1/3]
gcannon v0.5.3
  Target:    localhost:8080/
  Threads:   64
  Conns:     1024 (16/thread)
  Pipeline:  1
  Req/conn:  25
  Templates: 5
  Expected:  200
  Duration:  10s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   1.86ms    798us   4.01ms   16.80ms   27.40ms

  4088609 requests in 10.00s, 4088613 responses
  Throughput: 408.77K req/s
  Bandwidth:  1.54GB/s
  Status codes: 2xx=4088613, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 4088613 / 4088613 responses (100.0%)
  Reconnects: 163064
  Per-template: 814880,817784,820312,819942,815695
  Per-template-ok: 814880,817784,820312,819942,815695
[info] CPU 3219.0% | Mem 337MiB

[run 2/3]
gcannon v0.5.3
  Target:    localhost:8080/
  Threads:   64
  Conns:     1024 (16/thread)
  Pipeline:  1
  Req/conn:  25
  Templates: 5
  Expected:  200
  Duration:  10s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   2.09ms    696us   5.45ms   18.90ms   28.10ms

  3781644 requests in 10.00s, 3781643 responses
  Throughput: 378.09K req/s
  Bandwidth:  1.42GB/s
  Status codes: 2xx=3781643, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 3781631 / 3781643 responses (100.0%)
  Reconnects: 151327
  Per-template: 753638,756254,758251,758425,755063
  Per-template-ok: 753637,756254,758251,758425,755063
[info] CPU 3126.3% | Mem 329MiB

[run 3/3]
gcannon v0.5.3
  Target:    localhost:8080/
  Threads:   64
  Conns:     1024 (16/thread)
  Pipeline:  1
  Req/conn:  25
  Templates: 5
  Expected:  200
  Duration:  10s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   2.08ms    712us   5.23ms   19.10ms   30.70ms

  3780340 requests in 10.00s, 3780342 responses
  Throughput: 377.96K req/s
  Bandwidth:  1.42GB/s
  Status codes: 2xx=3780342, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 3780332 / 3780342 responses (100.0%)
  Reconnects: 151224
  Per-template: 753707,756013,758140,757787,754685
  Per-template-ok: 753707,756013,758140,757787,754685
[info] CPU 3131.8% | Mem 331MiB

=== Best: 408861 req/s (CPU: 3219.0%, Mem: 337MiB) ===
[info] input BW: 27.29MB/s (avg template: 70 bytes)
[info] saved results/async-db/1024/zix.json
httparena-bench-zix
httparena-bench-zix

==============================================
=== zix / crud / 4096c (tool=gcannon) ===
==============================================
[info] resetting postgres for a clean per-profile baseline
[info] starting postgres sidecar
httparena-postgres
[info] postgres ready (seeded)
[info] waiting for server...
[info] server ready

[run 1/3]
gcannon v0.5.3
  Target:    localhost:8080/
  Threads:   64
  Conns:     4096 (64/thread)
  Pipeline:  1
  Req/conn:  200
  Templates: 20
  Expected:  200
  Duration:  15s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   5.22ms   1.58ms   15.00ms   23.50ms   35.50ms

  11071505 requests in 15.00s, 11071314 responses
  Throughput: 737.97K req/s
  Bandwidth:  217.11MB/s
  Status codes: 2xx=11071314, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 11071314 / 11071314 responses (100.0%)
  Reconnects: 53297
  Per-template: 545903,521500,535430,542726,544663,541217,531581,517658,509825,507229,515781,530056,543952,558436,578058,601125,617271,626377,612358,590168
  Per-template-ok: 545903,521500,535430,542726,544663,541217,531581,517658,509825,507229,515781,530056,543952,558436,578058,601125,617271,626377,612358,590168
[info] CPU 2937.1% | Mem 396MiB

[run 2/3]
gcannon v0.5.3
  Target:    localhost:8080/
  Threads:   64
  Conns:     4096 (64/thread)
  Pipeline:  1
  Req/conn:  200
  Templates: 20
  Expected:  200
  Duration:  15s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   4.80ms   2.08ms   13.60ms   23.20ms   30.30ms

  12021175 requests in 15.00s, 12021175 responses
  Throughput: 801.28K req/s
  Bandwidth:  235.09MB/s
  Status codes: 2xx=12021175, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 12021160 / 12021175 responses (100.0%)
  Reconnects: 58139
  Per-template: 575787,560113,572978,581823,587522,587055,585285,581780,577108,573451,578193,586754,595778,609826,630465,650319,660836,660592,647425,618070
  Per-template-ok: 575787,560113,572978,581823,587522,587055,585285,581780,577108,573451,578193,586754,595778,609826,630465,650319,660836,660592,647425,618070
[info] CPU 3102.9% | Mem 388MiB

[run 3/3]
gcannon v0.5.3
  Target:    localhost:8080/
  Threads:   64
  Conns:     4096 (64/thread)
  Pipeline:  1
  Req/conn:  200
  Templates: 20
  Expected:  200
  Duration:  15s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   4.64ms   1.99ms   13.10ms   21.60ms   27.90ms

  12478370 requests in 15.00s, 12478368 responses
  Throughput: 831.76K req/s
  Bandwidth:  243.30MB/s
  Status codes: 2xx=12478368, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 12478325 / 12478368 responses (100.0%)
  Reconnects: 60481
  Per-template: 596991,578115,592871,605877,609496,613495,615496,613763,611070,608152,604491,610511,619348,633273,650256,670292,676088,673304,658927,636509
  Per-template-ok: 596991,578115,592871,605877,609496,613495,615496,613763,611070,608152,604491,610511,619348,633273,650256,670292,676088,673304,658927,636509
[info] CPU 3224.0% | Mem 388MiB

=== Best: 831891 req/s (CPU: 3224.0%, Mem: 388MiB) ===
[info] input BW: 71.40MB/s (avg template: 90 bytes)
[info] saved results/crud/4096/zix.json
httparena-bench-zix
httparena-bench-zix
[info] skip: zix does not subscribe to fortunes
[info] skip: zix does not subscribe to baseline-h2
[info] skip: zix does not subscribe to static-h2
[info] skip: zix does not subscribe to baseline-h2c
[info] skip: zix does not subscribe to json-h2c
[info] skip: zix does not subscribe to baseline-h3
[info] skip: zix does not subscribe to static-h3
[info] skip: zix does not subscribe to gateway-64
[info] skip: zix does not subscribe to gateway-h3
[info] skip: zix does not subscribe to production-stack
[info] skip: zix does not subscribe to unary-grpc
[info] skip: zix does not subscribe to unary-grpc-tls
[info] skip: zix does not subscribe to stream-grpc
[info] skip: zix does not subscribe to stream-grpc-tls
[info] skip: zix does not subscribe to echo-ws
[info] skip: zix does not subscribe to echo-ws-pipeline
[info] skip: zix does not subscribe to echo-ws-limited
[info] rebuilding site/data/*.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/frameworks.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/results/zix.json - 23 new, 25 total
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/current.json
[info] done
httparena-postgres
httparena-redis
[info] restoring loopback MTU to 65536

@prothegee

Copy link
Copy Markdown
Contributor Author

/benchmark -f zix --save

@github-actions

Copy link
Copy Markdown
Contributor

👋 Benchmark request received. A collaborator will review and approve the run.

@github-actions

Copy link
Copy Markdown
Contributor

Benchmark Results

Framework: zix | Test: all tests

Test Conn RPS CPU Mem Δ RPS Δ Mem
baseline 512 4,208,260 6403.9% 134MiB -0.2% +3.1%
baseline 4096 4,456,820 6420.6% 192MiB -0.8% +3.2%
pipelined 512 55,501,920 6355.6% 130MiB +3.5% -3.0%
pipelined 4096 58,008,556 6414.1% 193MiB +3.6% +3.8%
limited-conn 512 2,698,508 5509.5% 135MiB -1.5% -10.0%
limited-conn 4096 2,712,790 5808.6% 231MiB -1.4% -2.5%
json 4096 2,327,814 6536.2% 287MiB -0.9% -1.0%
json-comp 512 958,859 6113.0% 132MiB NEW NEW
json-comp 4096 1,051,310 6822.1% 211MiB NEW NEW
json-comp 16384 1,021,402 6572.1% 527MiB NEW NEW
json-tls 4096 1,886,618 5392.2% 279MiB NEW NEW
upload 32 8,911 1050.4% 130MiB +8.9% +4.8%
upload 256 6,418 895.0% 132MiB -3.6% +1.5%
api-4 256 61,838 222.9% 43MiB NEW NEW
api-16 1024 249,216 1082.9% 132MiB NEW NEW
static 1024 1,857,188 6369.8% 163MiB -8.3% +16.4%
static 4096 1,917,455 6291.9% 234MiB -5.9% +20.0%
static 6800 1,867,766 6259.6% 305MiB -6.0% +26.6%
static-tls 1024 1,213,170 5021.5% 184MiB NEW NEW
static-tls 4096 1,020,800 4383.5% 304MiB NEW NEW
static-tls 6800 804,689 3843.1% 409MiB NEW NEW
async-db 1024 404,380 3200.3% 338MiB NEW NEW
crud 4096 830,671 3246.0% 387MiB NEW NEW
Full log
[info] postgres ready (seeded)
[info] waiting for server...
[info] server ready

[run 1/3]
gcannon v0.5.3
  Target:    localhost:8080/
  Threads:   64
  Conns:     1024 (16/thread)
  Pipeline:  1
  Req/conn:  25
  Templates: 5
  Expected:  200
  Duration:  10s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   1.89ms    802us   3.84ms   18.10ms   34.50ms

  4043802 requests in 10.00s, 4043802 responses
  Throughput: 404.29K req/s
  Bandwidth:  1.52GB/s
  Status codes: 2xx=4043802, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 4043802 / 4043802 responses (100.0%)
  Reconnects: 161274
  Per-template: 806440,808914,810934,810735,806779
  Per-template-ok: 806440,808914,810934,810735,806779
[info] CPU 3200.3% | Mem 338MiB

[run 2/3]
gcannon v0.5.3
  Target:    localhost:8080/
  Threads:   64
  Conns:     1024 (16/thread)
  Pipeline:  1
  Req/conn:  25
  Templates: 5
  Expected:  200
  Duration:  10s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   2.12ms    714us   5.06ms   21.20ms   34.10ms

  3754131 requests in 10.00s, 3754129 responses
  Throughput: 375.34K req/s
  Bandwidth:  1.41GB/s
  Status codes: 2xx=3754129, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 3754107 / 3754129 responses (100.0%)
  Reconnects: 150196
  Per-template: 748089,750416,752908,753097,749597
  Per-template-ok: 748089,750416,752908,753097,749597
[info] CPU 3138.9% | Mem 330MiB

[run 3/3]
gcannon v0.5.3
  Target:    localhost:8080/
  Threads:   64
  Conns:     1024 (16/thread)
  Pipeline:  1
  Req/conn:  25
  Templates: 5
  Expected:  200
  Duration:  10s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   2.17ms    761us   5.28ms   20.50ms   35.50ms

  3722701 requests in 10.00s, 3722704 responses
  Throughput: 372.20K req/s
  Bandwidth:  1.40GB/s
  Status codes: 2xx=3722704, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 3722697 / 3722704 responses (100.0%)
  Reconnects: 148911
  Per-template: 742385,744060,746361,746394,743497
  Per-template-ok: 742385,744060,746361,746394,743497
[info] CPU 3123.6% | Mem 331MiB

=== Best: 404380 req/s (CPU: 3200.3%, Mem: 338MiB) ===
[info] input BW: 27.00MB/s (avg template: 70 bytes)
[info] saved results/async-db/1024/zix.json
httparena-bench-zix
httparena-bench-zix

==============================================
=== zix / crud / 4096c (tool=gcannon) ===
==============================================
[info] resetting postgres for a clean per-profile baseline
[info] starting postgres sidecar
httparena-postgres
[info] postgres ready (seeded)
[info] waiting for server...
[info] server ready

[run 1/3]
gcannon v0.5.3
  Target:    localhost:8080/
  Threads:   64
  Conns:     4096 (64/thread)
  Pipeline:  1
  Req/conn:  200
  Templates: 20
  Expected:  200
  Duration:  15s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   5.24ms   1.48ms   15.00ms   23.40ms   34.30ms

  10998116 requests in 15.00s, 10997796 responses
  Throughput: 733.08K req/s
  Bandwidth:  216.04MB/s
  Status codes: 2xx=10997796, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 10997796 / 10997796 responses (100.0%)
  Reconnects: 52945
  Per-template: 545965,522486,534204,540564,539320,529755,517669,508684,504131,501123,507659,523030,538696,558011,578994,602978,617953,624110,612733,589731
  Per-template-ok: 545965,522486,534204,540564,539320,529755,517669,508684,504131,501123,507659,523030,538696,558011,578994,602978,617953,624110,612733,589731
[info] CPU 2953.5% | Mem 396MiB

[run 2/3]
gcannon v0.5.3
  Target:    localhost:8080/
  Threads:   64
  Conns:     4096 (64/thread)
  Pipeline:  1
  Req/conn:  200
  Templates: 20
  Expected:  200
  Duration:  15s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   4.82ms   1.93ms   13.80ms   23.30ms   31.20ms

  11961716 requests in 15.00s, 11961716 responses
  Throughput: 797.32K req/s
  Bandwidth:  234.21MB/s
  Status codes: 2xx=11961716, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 11961680 / 11961716 responses (100.0%)
  Reconnects: 57949
  Per-template: 572978,553660,565916,575344,581329,580169,582658,579836,576073,573804,575220,582242,595103,611768,628919,650702,660433,655410,643339,616777
  Per-template-ok: 572978,553660,565916,575344,581329,580169,582658,579836,576073,573804,575220,582242,595103,611768,628919,650702,660433,655410,643339,616777
[info] CPU 3101.2% | Mem 390MiB

[run 3/3]
gcannon v0.5.3
  Target:    localhost:8080/
  Threads:   64
  Conns:     4096 (64/thread)
  Pipeline:  1
  Req/conn:  200
  Templates: 20
  Expected:  200
  Duration:  15s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   4.66ms   1.88ms   13.20ms   22.80ms   30.70ms

  12460068 requests in 15.00s, 12460067 responses
  Throughput: 830.54K req/s
  Bandwidth:  243.22MB/s
  Status codes: 2xx=12460067, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 12460049 / 12460067 responses (100.0%)
  Reconnects: 60428
  Per-template: 589318,574169,589612,602205,612771,619583,622229,617829,613543,611181,608658,610294,617855,630377,645814,668571,676097,671093,652884,625966
  Per-template-ok: 589318,574169,589612,602205,612771,619583,622229,617829,613543,611181,608658,610294,617855,630377,645814,668571,676097,671093,652884,625966
[info] CPU 3246.0% | Mem 387MiB

=== Best: 830671 req/s (CPU: 3246.0%, Mem: 387MiB) ===
[info] input BW: 71.30MB/s (avg template: 90 bytes)
[info] saved results/crud/4096/zix.json
httparena-bench-zix
httparena-bench-zix
[info] skip: zix does not subscribe to fortunes
[info] skip: zix does not subscribe to baseline-h2
[info] skip: zix does not subscribe to static-h2
[info] skip: zix does not subscribe to baseline-h2c
[info] skip: zix does not subscribe to json-h2c
[info] skip: zix does not subscribe to baseline-h3
[info] skip: zix does not subscribe to static-h3
[info] skip: zix does not subscribe to gateway-64
[info] skip: zix does not subscribe to gateway-h3
[info] skip: zix does not subscribe to production-stack
[info] skip: zix does not subscribe to unary-grpc
[info] skip: zix does not subscribe to unary-grpc-tls
[info] skip: zix does not subscribe to stream-grpc
[info] skip: zix does not subscribe to stream-grpc-tls
[info] skip: zix does not subscribe to echo-ws
[info] skip: zix does not subscribe to echo-ws-pipeline
[info] skip: zix does not subscribe to echo-ws-limited
[info] rebuilding site/data/*.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/frameworks.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/results/zix.json - 23 new, 25 total
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/current.json
[info] done
httparena-postgres
httparena-redis
[info] restoring loopback MTU to 65536

@prothegee

Copy link
Copy Markdown
Contributor Author

Hi, open to review for this pull-request.
@MDA2AV @Kaliumhexacyanoferrat

This was referenced Aug 17, 2026
@prothegee

Copy link
Copy Markdown
Contributor Author

#997 and #982 already merged, but this p.r. skipped.

83aa9f0 already done.

Looking forward.
@Kaliumhexacyanoferrat @MDA2AV

@MDA2AV

MDA2AV commented Aug 17, 2026

Copy link
Copy Markdown
Owner

Ok, I reviewed again. Some things improved but some issues remain.

On the upload test, I must say your AI agent really went all in on this test.. technically following the rules but doing something no server would ever do. You count the bytes received but discard them and never read into zix's memory.. it is expected that a server reads the request data to its memory. As this is an engine and test is not scored, we can allow this but keep in mind this would never work on a production server.

On json tests, you need to serialize per request, not caching the serialized data at startup and then serve it. This one is important as json-tls is a scored test.

There are a lot other things zix is doing that are clearly benchmark oriented and would be a very big problem in a production use, however this is engine section so I won't pick on that but if you are planning on using it as an engine for a real server, there are quite a lot of issues.

On CRUD, the ttl seems to be addressed.

Regardless, it is an interesting project to push benchmark numbers! :)

Did you look into these points?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants