Skip to content

Zix 0.4.x rc3 grpc#887

Merged
MDA2AV merged 7 commits into
MDA2AV:mainfrom
prothegee:zix-0.4.x-rc3-grpc
Jun 19, 2026
Merged

Zix 0.4.x rc3 grpc#887
MDA2AV merged 7 commits into
MDA2AV:mainfrom
prothegee:zix-0.4.x-rc3-grpc

Conversation

@prothegee

@prothegee prothegee commented Jun 17, 2026

Copy link
Copy Markdown
Contributor

Description

Bump the zix entry to 0.4.x-rc3 (gRPC scope).

Update:

  • Attempt to tune both the epoll and io_uring dispatch models (connection teardown and response buffering) ahead of the 0.4.x release. Handlers and routes unchanged.

Required to call from HttpArena:

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

Result benchmark:

  • epoll
  • io_uring

Submitting:

  • io_uring.

Important:

  • double check before submitting final result for meta info.

PR Commands — comment on this PR to trigger (requires collaborator approval):

Command Description
/benchmark -f <framework> Run all benchmark tests
/benchmark -f <framework> -t <test> Run a specific test
/benchmark -f <framework> --save Run and save results (updates leaderboard on merge)

Always specify -f <framework>. Results are automatically compared against the current leaderboard.


Run benchmarks locally

You can validate and benchmark your framework locally with the lite script — no CPU pinning, fixed connection counts, all load generators run in Docker.

./scripts/validate.sh <framework>
./scripts/benchmark-lite.sh <framework> baseline
./scripts/benchmark-lite.sh --load-threads 4 <framework>

Requirements: Docker Engine on Linux. Load generators (gcannon, h2load, h2load-h3, wrk, ghz) are built as self-contained Docker images on first run.

@prothegee prothegee marked this pull request as draft June 17, 2026 19:18
@prothegee

prothegee commented Jun 17, 2026

Copy link
Copy Markdown
Contributor Author

Hold until submission checked & submitted:

@prothegee prothegee mentioned this pull request Jun 17, 2026
5 tasks
@prothegee

Copy link
Copy Markdown
Contributor Author

Choosing io_uring model.

Direct test and submit after sync main branch.

@prothegee prothegee marked this pull request as ready for review June 17, 2026 20:45
@prothegee

Copy link
Copy Markdown
Contributor Author

/benchmark -f zix-grpc

@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-grpc | Test: all tests

Test Conn RPS CPU Mem Δ RPS Δ Mem
unary-grpc 256 7,211,952 3746.9% 393MiB -0.4% -0.3%
unary-grpc 1024 7,108,678 4002.1% 1.2GiB -0.2% ~0%
stream-grpc 64 8,542,000 35.8% 141MiB +0.9% ~0%
Full log

46.
31. Stopping all clients.
17. Stopping all clients.
54. Stopping all clients.
56

finished in 5.05s, 7130540.00 req/s, 448.82MB/s
requests: 35652700 total, 35755100 started, 35652700 done, 35652700 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 35652700 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 2.19GB (2353134520) total, 1.06GB (1140886400) headers (space savings 42.86%), 238.01MB (249568900) data
                     min         max         mean         sd        +/- sd
time for request:      563us     72.24ms      7.84ms      3.70ms    95.14%
time for connect:       19us      4.23ms      1.25ms       812us    63.67%
time to 1st byte:     5.10ms     75.25ms     30.99ms     17.77ms    64.84%
req/s           :    6698.01     7333.70     6961.61       97.99    69.24%
[info] CPU 3996.8% | Mem 1.2GiB

[run 3/3]
starting benchmark...
% of clients startedWarm-up phase is over for thread #21.
37Main benchmark duration is started for thread #21..

6.
39.
17.
19.


Application protocol: h2c
2
58. Stopping all clients.
. Stopping all clients.

38Stopped all clients for thread #. Stopping all clients.31

44. Stopping all clients.

finished in 5.06s, 7180540.00 req/s, 451.97MB/s
requests: 35902700 total, 36005100 started, 35902700 done, 35902700 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 35902700 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 2.21GB (2369634520) total, 1.07GB (1148886400) headers (space savings 42.86%), 239.68MB (251318900) data
                     min         max         mean         sd        +/- sd
time for request:      532us     74.93ms      7.76ms      3.46ms    94.43%
time for connect:       18us      5.58ms      1.34ms       870us    67.19%
time to 1st byte:     5.23ms     76.33ms     29.04ms     16.64ms    64.36%
req/s           :    6678.32     7432.84     7010.49      103.34    70.70%
[info] CPU 4036.4% | Mem 1.2GiB

=== Best: 7108678 req/s (CPU: 4002.1%, Mem: 1.2GiB) ===
[info] saved results/unary-grpc/1024/zix-grpc.json
httparena-bench-zix-grpc
httparena-bench-zix-grpc
[info] skip: zix-grpc does not subscribe to unary-grpc-tls

==============================================
=== zix-grpc / stream-grpc / 64c (tool=ghz) ===
==============================================
[info] waiting for server...
[info] gRPC server ready
[info] ghz warm-up 2s

[run 1/3]

Summary:
  Count:	8761
  Total:	5.08 s
  Slowest:	814.14 ms
  Fastest:	18.91 ms
  Average:	143.59 ms
  Requests/sec:	1723.81

Response time histogram:
  18.912  [1]    |
  98.436  [2954] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
  177.959 [2832] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
  257.482 [1825] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
  337.005 [605]  |∎∎∎∎∎∎∎∎
  416.528 [186]  |∎∎∎
  496.051 [86]   |∎
  575.574 [27]   |
  655.098 [20]   |
  734.621 [4]    |
  814.144 [2]    |

Latency distribution:
  10 % in 30.16 ms 
  25 % in 45.74 ms 
  50 % in 150.50 ms 
  75 % in 189.56 ms 
  90 % in 272.18 ms 
  95 % in 323.86 ms 
  99 % in 467.57 ms 

Status code distribution:
  [OK]            8542 responses   
  [Canceled]      216 responses    
  [Unavailable]   3 responses      

Error distribution:
  [216]   rpc error: code = Canceled desc = grpc: the client connection is closing                                                                     
  [1]     rpc error: code = Unavailable desc = error reading from server: read tcp 127.0.0.1:28894->127.0.0.1:8080: use of closed network connection   
  [2]     rpc error: code = Unavailable desc = error reading from server: read tcp 127.0.0.1:28922->127.0.0.1:8080: use of closed network connection   
[info] CPU 35.8% | Mem 141MiB

[run 2/3]

Summary:
  Count:	8665
  Total:	5.07 s
  Slowest:	813.42 ms
  Fastest:	19.01 ms
  Average:	144.08 ms
  Requests/sec:	1709.67

Response time histogram:
  19.014  [1]    |
  98.455  [2743] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
  177.896 [2972] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
  257.336 [1817] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
  336.777 [544]  |∎∎∎∎∎∎∎
  416.218 [200]  |∎∎∎
  495.658 [83]   |∎
  575.099 [35]   |
  654.539 [10]   |
  733.980 [9]    |
  813.421 [2]    |

Latency distribution:
  10 % in 30.83 ms 
  25 % in 47.20 ms 
  50 % in 150.82 ms 
  75 % in 189.02 ms 
  90 % in 264.31 ms 
  95 % in 323.08 ms 
  99 % in 464.56 ms 

Status code distribution:
  [OK]         8416 responses   
  [Canceled]   249 responses    

Error distribution:
  [249]   rpc error: code = Canceled desc = grpc: the client connection is closing   
[info] CPU 35.9% | Mem 143MiB

[run 3/3]

Summary:
  Count:	8664
  Total:	5.09 s
  Slowest:	649.98 ms
  Fastest:	19.13 ms
  Average:	145.22 ms
  Requests/sec:	1701.32

Response time histogram:
  19.130  [1]    |
  82.215  [2556] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
  145.300 [966]  |∎∎∎∎∎∎∎∎∎∎∎
  208.385 [3504] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
  271.470 [832]  |∎∎∎∎∎∎∎∎∎
  334.556 [397]  |∎∎∎∎∎
  397.641 [197]  |∎∎
  460.726 [48]   |∎
  523.811 [23]   |
  586.896 [4]    |
  649.981 [4]    |

Latency distribution:
  10 % in 30.40 ms 
  25 % in 43.03 ms 
  50 % in 157.73 ms 
  75 % in 193.25 ms 
  90 % in 245.69 ms 
  95 % in 308.14 ms 
  99 % in 390.90 ms 

Status code distribution:
  [OK]         8532 responses   
  [Canceled]   132 responses    

Error distribution:
  [132]   rpc error: code = Canceled desc = grpc: the client connection is closing   
[info] CPU 38.3% | Mem 142MiB

=== Best: 8542000 req/s (CPU: 35.8%, Mem: 141MiB) ===
[info] saved results/stream-grpc/64/zix-grpc.json
httparena-bench-zix-grpc
httparena-bench-zix-grpc
[info] skip: zix-grpc does not subscribe to stream-grpc-tls
[info] skip: zix-grpc does not subscribe to echo-ws
[info] skip: zix-grpc 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/stream-grpc-64.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/unary-grpc-1024.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/unary-grpc-256.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/current.json
[info] done
[info] restoring loopback MTU to 65536

@prothegee

Copy link
Copy Markdown
Contributor Author

/benchmark -f zix-grpc --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-grpc | Test: all tests

Test Conn RPS CPU Mem Δ RPS Δ Mem
unary-grpc 256 7,039,761 3956.5% 393MiB -2.8% -0.3%
unary-grpc 1024 6,938,181 4092.8% 1.2GiB -2.6% ~0%
stream-grpc 64 8,504,000 35.6% 139MiB +0.4% -1.4%
Full log
2

finished in 5.06s, 7021440.00 req/s, 441.96MB/s
requests: 35107200 total, 35209600 started, 35107200 done, 35107200 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 35107200 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 2.16GB (2317131520) total, 1.05GB (1123430400) headers (space savings 42.86%), 234.37MB (245750400) data
                     min         max         mean         sd        +/- sd
time for request:      563us    103.84ms      8.26ms      5.83ms    95.75%
time for connect:       19us      4.82ms      1.49ms      1.03ms    67.19%
time to 1st byte:     5.35ms    108.75ms     38.84ms     28.64ms    68.36%
req/s           :    6579.62     7412.09     6855.45      144.40    71.78%
[info] CPU 4092.8% | Mem 1.2GiB

[run 3/3]
starting benchmark...
.Main benchmark duration is started for thread #24.



.Main benchmark duration is started for thread #Main benchmark duration is started for thread #Warm-up phase is over for thread #944..41.

.

6.
25.
57.
progress: Warm-up phase is over for thread #32.
.Main benchmark duration is started for thread #33.

54Main benchmark duration is started for thread #55.
.
37% of clients started
Application protocol: h2c
.
11.


8
59
21. Stopping all clients.

finished in 5.07s, 6947840.00 req/s, 437.33MB/s
requests: 34739200 total, 34841600 started, 34739200 done, 34739200 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 34739200 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 2.14GB (2292843520) total, 1.04GB (1111654400) headers (space savings 42.86%), 231.91MB (243174400) data
                     min         max         mean         sd        +/- sd
time for request:      548us     76.71ms      7.95ms      3.17ms    94.42%
time for connect:       20us      4.90ms      1.29ms       844us    66.60%
time to 1st byte:     4.94ms     78.84ms     26.99ms     15.15ms    66.99%
req/s           :    6598.18     7231.67     6783.18       93.53    66.50%
[info] CPU 4004.5% | Mem 1.2GiB

=== Best: 6938181 req/s (CPU: 4092.8%, Mem: 1.2GiB) ===
[info] saved results/unary-grpc/1024/zix-grpc.json
httparena-bench-zix-grpc
httparena-bench-zix-grpc
[info] skip: zix-grpc does not subscribe to unary-grpc-tls

==============================================
=== zix-grpc / stream-grpc / 64c (tool=ghz) ===
==============================================
[info] waiting for server...
[info] gRPC server ready
[info] ghz warm-up 2s

[run 1/3]

Summary:
  Count:	8624
  Total:	5.10 s
  Slowest:	778.32 ms
  Fastest:	19.51 ms
  Average:	146.01 ms
  Requests/sec:	1690.55

Response time histogram:
  19.511  [1]    |
  95.392  [2785] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
  171.273 [2297] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
  247.154 [2509] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
  323.034 [504]  |∎∎∎∎∎∎∎
  398.915 [270]  |∎∎∎∎
  474.796 [86]   |∎
  550.677 [34]   |
  626.557 [11]   |
  702.438 [5]    |
  778.319 [2]    |

Latency distribution:
  10 % in 30.80 ms 
  25 % in 43.51 ms 
  50 % in 155.96 ms 
  75 % in 196.46 ms 
  90 % in 256.25 ms 
  95 % in 320.07 ms 
  99 % in 441.82 ms 

Status code distribution:
  [Canceled]   120 responses    
  [OK]         8504 responses   

Error distribution:
  [120]   rpc error: code = Canceled desc = grpc: the client connection is closing   
[info] CPU 35.6% | Mem 139MiB

[run 2/3]

Summary:
  Count:	8526
  Total:	5.08 s
  Slowest:	810.22 ms
  Fastest:	18.50 ms
  Average:	146.05 ms
  Requests/sec:	1679.40

Response time histogram:
  18.503  [1]    |
  97.675  [2995] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
  176.847 [2469] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
  256.018 [1825] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
  335.190 [586]  |∎∎∎∎∎∎∎∎
  414.362 [264]  |∎∎∎∎
  493.534 [97]   |∎
  572.706 [38]   |∎
  651.878 [12]   |
  731.050 [5]    |
  810.222 [3]    |

Latency distribution:
  10 % in 31.26 ms 
  25 % in 46.04 ms 
  50 % in 150.56 ms 
  75 % in 193.76 ms 
  90 % in 279.13 ms 
  95 % in 335.62 ms 
  99 % in 475.14 ms 

Status code distribution:
  [OK]         8295 responses   
  [Canceled]   231 responses    

Error distribution:
  [231]   rpc error: code = Canceled desc = grpc: the client connection is closing   
[info] CPU 36.5% | Mem 139MiB

[run 3/3]

Summary:
  Count:	8507
  Total:	5.07 s
  Slowest:	1.01 s
  Fastest:	18.91 ms
  Average:	147.62 ms
  Requests/sec:	1678.39

Response time histogram:
  18.906   [1]    |
  118.322  [3109] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
  217.738  [3930] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
  317.155  [689]  |∎∎∎∎∎∎∎
  416.571  [372]  |∎∎∎∎
  515.987  [77]   |∎
  615.403  [44]   |
  714.819  [21]   |
  814.236  [7]    |
  913.652  [3]    |
  1013.068 [2]    |

Latency distribution:
  10 % in 30.54 ms 
  25 % in 42.04 ms 
  50 % in 160.63 ms 
  75 % in 200.32 ms 
  90 % in 256.69 ms 
  95 % in 337.51 ms 
  99 % in 503.45 ms 

Status code distribution:
  [OK]         8255 responses   
  [Canceled]   252 responses    

Error distribution:
  [252]   rpc error: code = Canceled desc = grpc: the client connection is closing   
[info] CPU 37.3% | Mem 144MiB

=== Best: 8504000 req/s (CPU: 35.6%, Mem: 139MiB) ===
[info] saved results/stream-grpc/64/zix-grpc.json
httparena-bench-zix-grpc
httparena-bench-zix-grpc
[info] skip: zix-grpc does not subscribe to stream-grpc-tls
[info] skip: zix-grpc does not subscribe to echo-ws
[info] skip: zix-grpc 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/stream-grpc-64.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/unary-grpc-1024.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/unary-grpc-256.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 68165dc into MDA2AV:main Jun 19, 2026
@prothegee

Copy link
Copy Markdown
Contributor Author

Thanks! Deleting the branch.

@prothegee prothegee deleted the zix-0.4.x-rc3-grpc branch June 19, 2026 09:19
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