Skip to content

Add zix http and grpc#810

Merged
MDA2AV merged 4 commits into
MDA2AV:mainfrom
prothegee:add-zix-http_and_grpc
Jun 7, 2026
Merged

Add zix http and grpc#810
MDA2AV merged 4 commits into
MDA2AV:mainfrom
prothegee:add-zix-http_and_grpc

Conversation

@prothegee
Copy link
Copy Markdown
Contributor

ZIX (Zero sIX)

Add zix v0.2.2 as two entries.

frameworks/zix

Zix HTTP/1.1, subscribes to: baseline, pipelined, limited-conn,
json, upload, static, echo-ws

validate.sh: 31 passed, 0 failed

Note: gcannon tests report 0 req/s locally — gcannon requires
RLIMIT_MEMLOCK=unlimited (io_uring locked-memory limit). wrk-based
tests (static) work correctly at ~80k req/s. May differ from actual test.

frameworks/zix-grpc

Zix gRPC h2c, subscribes to: unary-grpc, stream-grpc

Local benchmark (native h2load/ghz, not Docker):

  • unary-grpc 256c: ~130k req/s
  • unary-grpc 1024c: ~144k req/s
  • stream-grpc 64c: ~97% OK (non-canceled)

validate.sh: 0 passed, 0 failed (gRPC server has no HTTP/1.1 probe endpoint, startup check passes, no validate tests defined)
image

Why engine

Both entries are typed engine because zix exposes raw HTTP/1.1 and
gRPC h2c mechanics with minimal abstraction: no TLS, no built-in
middleware, no database integration, no compression, no auth. The
framework is closer to a hand-rolled epoll server than a batteries-included
production stack.

If the PR considers the test coverage or feature set more
appropriate for a different type (production, tuned, etc.),
feel free to suggest, happy to update the meta.json accordingly.

@MDA2AV
Copy link
Copy Markdown
Owner

MDA2AV commented Jun 6, 2026

/benchmark -f zix

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 6, 2026

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

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 6, 2026

Benchmark Results

Framework: zix | Test: all tests

Test Conn RPS CPU Mem Δ RPS Δ Mem
baseline 512 375,669 1180.3% 68MiB NEW NEW
baseline 4096 376,796 1328.0% 92MiB NEW NEW
pipelined 512 361,676 1301.0% 64MiB NEW NEW
pipelined 4096 328,208 1272.1% 91MiB NEW NEW
limited-conn 512 269,257 1375.6% 66MiB NEW NEW
limited-conn 4096 279,064 2405.4% 103MiB NEW NEW
json 4096 337,787 2596.0% 97MiB NEW NEW
upload 32 4,338 2762.6% 1.3GiB NEW NEW
upload 256 4,711 5493.8% 1.4GiB NEW NEW
static 1024 267,104 6392.0% 70MiB NEW NEW
static 4096 262,296 6510.3% 93MiB NEW NEW
static 6800 259,290 6491.7% 114MiB NEW NEW
echo-ws 512 1,521,865 2967.9% 68MiB NEW NEW
echo-ws 4096 194,284 313.2% 89MiB NEW NEW
echo-ws 16384 359,678 560.3% 184MiB NEW NEW
Full log
gcannon v0.5.3 [WS]
  Target:    localhost:8080/ws
  Threads:   64
  Conns:     512 (8/thread)
  Pipeline:  1
  Req/conn:  unlimited (keep-alive)
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency     83us     64us    125us    137us    146us

  7592598 frames sent in 5.00s, 7592598 frames received
  Throughput: 1.52M req/s
  Bandwidth:  10.13MB/s
  WS upgrades: 128
  WS frames:   7592598
  Latency samples: 7592562 / 7592598 responses (100.0%)
[info] CPU 2951.3% | Mem 68MiB

=== Best: 1521865 req/s (CPU: 2967.9%, Mem: 68MiB) ===
[info] saved results/echo-ws/512/zix.json
httparena-bench-zix
httparena-bench-zix

==============================================
=== zix / echo-ws / 4096c (tool=gcannon) ===
==============================================
[info] waiting for server...
[info] server ready

[run 1/3]
gcannon v0.5.3 [WS]
  Target:    localhost:8080/ws
  Threads:   64
  Conns:     4096 (64/thread)
  Pipeline:  1
  Req/conn:  unlimited (keep-alive)
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency    658us    620us    822us    838us    857us

  971420 frames sent in 5.00s, 971420 frames received
  Throughput: 194.22K req/s
  Bandwidth:  1.30MB/s
  WS upgrades: 128
  WS frames:   971420
  Latency samples: 971420 / 971420 responses (100.0%)
[info] CPU 313.2% | Mem 89MiB

[run 2/3]
gcannon v0.5.3 [WS]
  Target:    localhost:8080/ws
  Threads:   64
  Conns:     4096 (64/thread)
  Pipeline:  1
  Req/conn:  unlimited (keep-alive)
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency    661us    623us    826us    841us    851us

  966880 frames sent in 5.00s, 966880 frames received
  Throughput: 193.31K req/s
  Bandwidth:  1.29MB/s
  WS upgrades: 128
  WS frames:   966880
  Latency samples: 966880 / 966880 responses (100.0%)
[info] CPU 317.5% | Mem 93MiB

[run 3/3]
gcannon v0.5.3 [WS]
  Target:    localhost:8080/ws
  Threads:   64
  Conns:     4096 (64/thread)
  Pipeline:  1
  Req/conn:  unlimited (keep-alive)
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency    661us    623us    825us    846us    864us

  966440 frames sent in 5.00s, 966440 frames received
  Throughput: 193.22K req/s
  Bandwidth:  1.29MB/s
  WS upgrades: 128
  WS frames:   966440
  Latency samples: 966440 / 966440 responses (100.0%)
[info] CPU 319.3% | Mem 94MiB

=== Best: 194284 req/s (CPU: 313.2%, Mem: 89MiB) ===
[info] saved results/echo-ws/4096/zix.json
httparena-bench-zix
httparena-bench-zix

==============================================
=== zix / echo-ws / 16384c (tool=gcannon) ===
==============================================
[info] waiting for server...
[info] server ready

[run 1/3]
gcannon v0.5.3 [WS]
  Target:    localhost:8080/ws
  Threads:   64
  Conns:     16384 (256/thread)
  Pipeline:  1
  Req/conn:  unlimited (keep-alive)
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency    338us    308us    642us    659us    674us

  1798520 frames sent in 5.00s, 1798392 frames received
  Throughput: 359.55K req/s
  Bandwidth:  2.40MB/s
  WS upgrades: 128
  WS frames:   1798392
  Latency samples: 1798392 / 1798392 responses (100.0%)
[info] CPU 560.3% | Mem 184MiB

[run 2/3]
gcannon v0.5.3 [WS]
  Target:    localhost:8080/ws
  Threads:   64
  Conns:     16384 (256/thread)
  Pipeline:  1
  Req/conn:  unlimited (keep-alive)
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   1.32ms   1.26ms   1.46ms   1.49ms   1.86ms

  483220 frames sent in 5.00s, 483220 frames received
  Throughput: 96.61K req/s
  Bandwidth:  660.43KB/s
  WS upgrades: 128
  WS frames:   483220
  Latency samples: 483220 / 483220 responses (100.0%)
[info] CPU 157.4% | Mem 192MiB

[run 3/3]
gcannon v0.5.3 [WS]
  Target:    localhost:8080/ws
  Threads:   64
  Conns:     16384 (256/thread)
  Pipeline:  1
  Req/conn:  unlimited (keep-alive)
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency    666us    803us   1.04ms   1.06ms   1.08ms

  940311 frames sent in 5.00s, 940183 frames received
  Throughput: 187.97K req/s
  Bandwidth:  1.26MB/s
  WS upgrades: 128
  WS frames:   940183
  Latency samples: 940183 / 940183 responses (100.0%)
[info] CPU 297.4% | Mem 190MiB

=== Best: 359678 req/s (CPU: 560.3%, Mem: 184MiB) ===
[info] saved results/echo-ws/16384/zix.json
httparena-bench-zix
httparena-bench-zix
[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/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/echo-ws-16384.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/echo-ws-4096.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/echo-ws-512.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/json-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
[info] restoring loopback MTU to 65536

@MDA2AV MDA2AV merged commit 290c4b7 into MDA2AV:main Jun 7, 2026
5 checks passed
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