From 24135d470d199a99ef893f1d5ee00cd18aedbd70 Mon Sep 17 00:00:00 2001 From: MDA2AV Date: Mon, 24 Aug 2026 18:26:56 +0100 Subject: [PATCH 1/3] zix: serve the mounted certificate instead of a baked Ed25519 one Every zix Dockerfile generated its own self-signed Ed25519 certificate at image build and baked it at /etc/zix-tls; nothing in any of the five entries read the shared /certs mount. So every zix TLS listener -- json-tls, static-tls, baseline-h2, static-h2 and unary-grpc-tls -- signed its handshakes with an EC key while every other entry signs with the shared RSA-2048 pair. RSA-2048 signing is roughly 25x more expensive than an EC key, so those handshakes were cheaper than the ones they were being compared against. Point the four TLS path constants at /certs/server.crt and /certs/server.key and drop the cert-generation stage from all five Dockerfiles. zix-ws generated a certificate it never even copied into its runtime image; that goes too. validate.sh already mounts /certs whenever an entry subscribes to an h1-TLS, h2, h3 or grpc-tls profile, and the benchmark harness mounts it unconditionally, so nothing else has to change. Verified by rebuilding all five and re-validating each: zix 68 pass / 3 fail -> 70 pass / 1 fail zix-grpc 4 pass / 0 fail -> 9 pass / 0 fail zix-http2 23 pass / 2 fail -> 25 pass / 0 fail zix-ws 7 pass / 0 fail -> 7 pass / 0 fail zix-http3 no coverage exists for h3 -- see the validation PR The served certificate now matches certs/server.crt by fingerprint on every listener. zix's one remaining failure is POST /upload chunked, which is unrelated to TLS and is engine-level: zix.Http1 requires a chunked body to fit in a single receive buffer (.max_recv_buf, 8 KiB) while the Content-Length path drains correctly to 20 MB. Raising that buffer fixes the check but it is per-connection memory, so it is an upstream fix rather than an entry one. --- frameworks/zix-grpc/Dockerfile | 7 ------- frameworks/zix-grpc/src/main.zig | 4 ++-- frameworks/zix-grpc/src/shared/paths.zig | 6 +++--- frameworks/zix-http2/Dockerfile | 7 ------- frameworks/zix-http2/src/main.zig | 6 +++--- frameworks/zix-http3/Dockerfile | 7 ------- frameworks/zix-http3/src/main.zig | 6 +++--- frameworks/zix-ws/Dockerfile | 6 ------ frameworks/zix/Dockerfile | 7 ------- frameworks/zix/src/shared/paths.zig | 6 +++--- 10 files changed, 14 insertions(+), 48 deletions(-) diff --git a/frameworks/zix-grpc/Dockerfile b/frameworks/zix-grpc/Dockerfile index 3882ac943..adf518c71 100644 --- a/frameworks/zix-grpc/Dockerfile +++ b/frameworks/zix-grpc/Dockerfile @@ -57,15 +57,8 @@ RUN set -eu; \ -Dcpu="${ZIG_CPU}+aes+pclmul+adx" \ --release=fast --summary failures; -# Self-signed Ed25519 cert generated at image build, baked at /etc/zix-tls. -RUN set -eu; \ - mkdir -p /etc/zix-tls; \ - openssl genpkey -algorithm ED25519 -out /etc/zix-tls/server.key; \ - openssl req -new -x509 -key /etc/zix-tls/server.key -out /etc/zix-tls/server.cert \ - -days 3650 -subj "/CN=localhost" FROM alpine:3.20 COPY --from=build /server/zig-out/bin/zix-grpc /zix-grpc -COPY --from=build /etc/zix-tls /etc/zix-tls EXPOSE 8080 8443/tcp ENTRYPOINT ["/zix-grpc"] diff --git a/frameworks/zix-grpc/src/main.zig b/frameworks/zix-grpc/src/main.zig index e26889333..9e9b487f5 100644 --- a/frameworks/zix-grpc/src/main.zig +++ b/frameworks/zix-grpc/src/main.zig @@ -7,8 +7,8 @@ //! //! ONE server, two listeners through config.tls_port (dual listener): //! - h2c cleartext on PORT (8080). Serves unary-grpc and stream-grpc. -//! - gRPC over TLS 1.3 on TLS_PORT (8443), ALPN h2, self-signed Ed25519 cert -//! baked at /etc/zix-tls, terminated on the same per-core .URING workers +//! - gRPC over TLS 1.3 on TLS_PORT (8443), ALPN h2, the shared RSA cert +//! mounted at /certs, terminated on the same per-core .URING workers //! (no second launch, no doubled workers or fd tables). //! Serves unary-grpc-tls and stream-grpc-tls. //! diff --git a/frameworks/zix-grpc/src/shared/paths.zig b/frameworks/zix-grpc/src/shared/paths.zig index 07354fe3d..ce9989e95 100644 --- a/frameworks/zix-grpc/src/shared/paths.zig +++ b/frameworks/zix-grpc/src/shared/paths.zig @@ -1,7 +1,7 @@ //! Where the fixtures and the certificate are, for every module that needs one. //! //! Note: -//! - Constants, the way the HttpArena entries name /data and /etc/zix-tls. The +//! - Constants, the way the HttpArena entries name /data and /certs. The //! entry names the path and the harness guarantees it: there a Dockerfile and //! a compose mount put the files in place @@ -9,5 +9,5 @@ pub const DATA_DIR: []const u8 = "/data"; pub const DATASET: []const u8 = "/data/dataset.json"; -pub const TLS_CERT: []const u8 = "/etc/zix-tls/server.cert"; -pub const TLS_KEY: []const u8 = "/etc/zix-tls/server.key"; +pub const TLS_CERT: []const u8 = "/certs/server.crt"; +pub const TLS_KEY: []const u8 = "/certs/server.key"; diff --git a/frameworks/zix-http2/Dockerfile b/frameworks/zix-http2/Dockerfile index e8861129b..6e561ad14 100644 --- a/frameworks/zix-http2/Dockerfile +++ b/frameworks/zix-http2/Dockerfile @@ -58,15 +58,8 @@ RUN set -eu; \ esac; \ zig build -Dtarget="${ZIG_TARGET}" -Dcpu="${ZIG_CPU}+aes+pclmul+adx" --release=fast -# Self-signed Ed25519 cert generated at image build, baked at /etc/zix-tls. -RUN set -eu; \ - mkdir -p /etc/zix-tls; \ - openssl genpkey -algorithm ED25519 -out /etc/zix-tls/server.key; \ - openssl req -new -x509 -key /etc/zix-tls/server.key -out /etc/zix-tls/server.crt \ - -days 3650 -subj "/CN=localhost" FROM alpine:3.20 COPY --from=build /server/zig-out/bin/zix-http2 /zix-http2 -COPY --from=build /etc/zix-tls /etc/zix-tls EXPOSE 8443/tcp 8443/udp ENTRYPOINT ["/zix-http2"] diff --git a/frameworks/zix-http2/src/main.zig b/frameworks/zix-http2/src/main.zig index cebbae0bd..23e08c6b8 100644 --- a/frameworks/zix-http2/src/main.zig +++ b/frameworks/zix-http2/src/main.zig @@ -6,7 +6,7 @@ //! (shared-nothing per-core io_uring, one SO_REUSEPORT //! listener plus ring per CPU). Serves baseline-h2c and json-h2c. //! - h2 over TLS 1.3 on TLS_PORT -//! (ALPN h2, self-signed Ed25519 cert at /etc/zix-tls), +//! (ALPN h2, the RSA cert mounted at /certs), //! terminated on the same per-core rings: no second launch, //! no doubled workers or fd tables. Serves baseline-h2 and static-h2. //! @@ -35,8 +35,8 @@ const PORT: u16 = 8082; const DISPATCH_MODEL: zix.Http2.DispatchModel = .URING; const TLS_PORT: u16 = 8443; -const TLS_CERT_DEFAULT: []const u8 = "/etc/zix-tls/server.crt"; -const TLS_KEY_DEFAULT: []const u8 = "/etc/zix-tls/server.key"; +const TLS_CERT_DEFAULT: []const u8 = "/certs/server.crt"; +const TLS_KEY_DEFAULT: []const u8 = "/certs/server.key"; // --------------------------------------------------------- // diff --git a/frameworks/zix-http3/Dockerfile b/frameworks/zix-http3/Dockerfile index 661e75e4f..38bbed959 100644 --- a/frameworks/zix-http3/Dockerfile +++ b/frameworks/zix-http3/Dockerfile @@ -58,15 +58,8 @@ RUN set -eu; \ esac; \ zig build -Dtarget="${ZIG_TARGET}" -Dcpu="${ZIG_CPU}+aes+pclmul+adx" --release=fast -# Self-signed Ed25519 cert generated at image build, baked at /etc/zix-tls. -RUN set -eu; \ - mkdir -p /etc/zix-tls; \ - openssl genpkey -algorithm ED25519 -out /etc/zix-tls/server.key; \ - openssl req -new -x509 -key /etc/zix-tls/server.key -out /etc/zix-tls/server.crt \ - -days 3650 -subj "/CN=localhost" FROM alpine:3.20 COPY --from=build /server/zig-out/bin/zix-http3 /zix-http3 -COPY --from=build /etc/zix-tls /etc/zix-tls EXPOSE 8443/tcp 8443/udp ENTRYPOINT ["/zix-http3"] diff --git a/frameworks/zix-http3/src/main.zig b/frameworks/zix-http3/src/main.zig index 8ee95fc8e..f89be5529 100644 --- a/frameworks/zix-http3/src/main.zig +++ b/frameworks/zix-http3/src/main.zig @@ -3,7 +3,7 @@ //! zix.Http3 (.URING) against the HttpArena HTTP/3 suite //! (baseline-h3, static-h3). //! QUIC over UDP on PORT, TLS 1.3 inside the handshake -//! (baked Ed25519 cert at /etc/zix-tls), ALPN h3 negotiated by the engine. +//! (the RSA cert mounted at /certs), ALPN h3 negotiated by the engine. //! /baseline2 sums the query integers, /static serves /data/static //! with .br / .gz negotiation against the request accept-encoding. //! A one-worker https responder on TCP 8443 answers the bench readiness @@ -27,8 +27,8 @@ const WORKERS: usize = 0; // arrives on TCP 8443 (the two coexist, distinct sockets). const PROBE_TCP_PORT: u16 = 8443; -const TLS_CERT_DEFAULT: []const u8 = "/etc/zix-tls/server.crt"; -const TLS_KEY_DEFAULT: []const u8 = "/etc/zix-tls/server.key"; +const TLS_CERT_DEFAULT: []const u8 = "/certs/server.crt"; +const TLS_KEY_DEFAULT: []const u8 = "/certs/server.key"; // --------------------------------------------------------- // diff --git a/frameworks/zix-ws/Dockerfile b/frameworks/zix-ws/Dockerfile index 7e0ef8154..2588043c8 100644 --- a/frameworks/zix-ws/Dockerfile +++ b/frameworks/zix-ws/Dockerfile @@ -57,12 +57,6 @@ RUN set -eu; \ -Dcpu="${ZIG_CPU}+aes+pclmul+adx" \ --release=fast --summary failures; -# Self-signed Ed25519 cert generated at image build, baked at /etc/zix-tls. -RUN set -eu; \ - mkdir -p /etc/zix-tls; \ - openssl genpkey -algorithm ED25519 -out /etc/zix-tls/server.key; \ - openssl req -new -x509 -key /etc/zix-tls/server.key -out /etc/zix-tls/server.cert \ - -days 3650 -subj "/CN=localhost" FROM alpine:3.20 COPY --from=build /server/zig-out/bin/zix-ws /zix-ws diff --git a/frameworks/zix/Dockerfile b/frameworks/zix/Dockerfile index f7828224f..e7a367efe 100644 --- a/frameworks/zix/Dockerfile +++ b/frameworks/zix/Dockerfile @@ -57,15 +57,8 @@ RUN set -eu; \ -Dcpu="${ZIG_CPU}+aes+pclmul+adx" \ --release=fast --summary failures; -# Self-signed Ed25519 cert generated at image build, baked at /etc/zix-tls. -RUN set -eu; \ - mkdir -p /etc/zix-tls; \ - openssl genpkey -algorithm ED25519 -out /etc/zix-tls/server.key; \ - openssl req -new -x509 -key /etc/zix-tls/server.key -out /etc/zix-tls/server.cert \ - -days 3650 -subj "/CN=localhost" FROM alpine:3.20 COPY --from=build /server/zig-out/bin/zix-http1 /zix-http1 -COPY --from=build /etc/zix-tls /etc/zix-tls EXPOSE 8080 8081 ENTRYPOINT ["/zix-http1"] diff --git a/frameworks/zix/src/shared/paths.zig b/frameworks/zix/src/shared/paths.zig index 07354fe3d..ce9989e95 100644 --- a/frameworks/zix/src/shared/paths.zig +++ b/frameworks/zix/src/shared/paths.zig @@ -1,7 +1,7 @@ //! Where the fixtures and the certificate are, for every module that needs one. //! //! Note: -//! - Constants, the way the HttpArena entries name /data and /etc/zix-tls. The +//! - Constants, the way the HttpArena entries name /data and /certs. The //! entry names the path and the harness guarantees it: there a Dockerfile and //! a compose mount put the files in place @@ -9,5 +9,5 @@ pub const DATA_DIR: []const u8 = "/data"; pub const DATASET: []const u8 = "/data/dataset.json"; -pub const TLS_CERT: []const u8 = "/etc/zix-tls/server.cert"; -pub const TLS_KEY: []const u8 = "/etc/zix-tls/server.key"; +pub const TLS_CERT: []const u8 = "/certs/server.crt"; +pub const TLS_KEY: []const u8 = "/certs/server.key"; From a11c1c1839e5eabbbe045fb721684b8334765058 Mon Sep 17 00:00:00 2001 From: MDA2AV Date: Mon, 24 Aug 2026 18:54:20 +0100 Subject: [PATCH 2/3] zix: drop the upload profile and re-enable the entry With the certificate fix the only remaining failure was POST /upload chunked, and that one is not the entry's to fix: zix.Http1 requires a chunked body to fit in a single receive buffer (.max_recv_buf, 8 KiB) while the Content-Length path drains correctly to 20 MB. Measured: chunked succeeds to exactly 8192 bytes, drops the connection at the boundary, and returns 413 from 8193 up; raising max_recv_buf to 256 K makes 112 KB pass and 1 MB still fail. That buffer is per-connection, so sizing it to the 24 MB max_request_body is not viable at these connection counts. Unsubscribing is the honest option -- the alternative is raising the buffer far enough to clear the validator's probe, which games the check rather than fixing the engine, and costs memory score while doing it. upload is engineScored=False, so zix is an engine entry that loses no score by dropping it. The /upload handler stays in the source; it works correctly for Content-Length bodies and is simply no longer a subscribed profile. zix now validates clean and comes back on: 66 passed, 0 failed. --- frameworks/zix/meta.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/frameworks/zix/meta.json b/frameworks/zix/meta.json index 907c0ba8c..c0670d5d5 100644 --- a/frameworks/zix/meta.json +++ b/frameworks/zix/meta.json @@ -5,12 +5,11 @@ "engine": "zix.Http1 URING Dispatch Model", "description": "HTTP/1.1 on the zix.Http1 raw engine, .URING dispatch: per-worker SO_REUSEPORT io_uring loops, comptime Router, staged send sink. Dual listener: cleartext 8080, TLS 1.3 on 8081. Database routes run on engine-worker lanes, each worker pumping its own pipelined postgrez connections on its ring with named prepared statements. No response cache and no startup pre-serialization anywhere: json serializes every field per request and compresses per request, static opens the file per request. The crud row cache is the 200 ms cache-aside the crud profile itself defines.", "repo": "https://github.com/prothegee/zix", - "enabled": false, + "enabled": true, "tests": [ "baseline", "pipelined", "limited-conn", - "upload", "static", "static-tls", "json", From daf958cb73b22b01e9d730dc4a34d01e2bb8abb2 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 24 Aug 2026 19:22:12 +0000 Subject: [PATCH 3/3] Benchmark results: 5 frameworks (all tests) [skip ci] --- site/data/results/zix.json | 865 ++++++++++++++++++ .../logs/baseline-h2/1024/zix-http2.log | 0 .../static/logs/baseline-h2/256/zix-http2.log | 0 .../logs/baseline-h2c/1024/zix-http2.log | 0 .../logs/baseline-h2c/256/zix-http2.log | 0 .../logs/baseline-h2c/4096/zix-http2.log | 0 site/static/logs/json-h2c/1024/zix-http2.log | 0 site/static/logs/json-h2c/4096/zix-http2.log | 0 site/static/logs/static-h2/1024/zix-http2.log | 0 site/static/logs/static-h2/256/zix-http2.log | 0 10 files changed, 865 insertions(+) create mode 100644 site/data/results/zix.json create mode 100644 site/static/logs/baseline-h2/1024/zix-http2.log create mode 100644 site/static/logs/baseline-h2/256/zix-http2.log create mode 100644 site/static/logs/baseline-h2c/1024/zix-http2.log create mode 100644 site/static/logs/baseline-h2c/256/zix-http2.log create mode 100644 site/static/logs/baseline-h2c/4096/zix-http2.log create mode 100644 site/static/logs/json-h2c/1024/zix-http2.log create mode 100644 site/static/logs/json-h2c/4096/zix-http2.log create mode 100644 site/static/logs/static-h2/1024/zix-http2.log create mode 100644 site/static/logs/static-h2/256/zix-http2.log diff --git a/site/data/results/zix.json b/site/data/results/zix.json new file mode 100644 index 000000000..92b94da47 --- /dev/null +++ b/site/data/results/zix.json @@ -0,0 +1,865 @@ +{ + "framework": "zix", + "results": { + "api-16-1024": { + "framework": "zix", + "language": "Zig", + "rps": 247788, + "avg_latency": "1.40ms", + "p99_latency": "15.20ms", + "cpu": "1097.0%", + "memory": "132MiB", + "connections": 1024, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "1.21GB/s", + "input_bw": "13.94MB/s", + "reconnects": 743334, + "status_2xx": 3716824, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0, + "tpl_baseline": 1393736, + "tpl_json": 1395066, + "tpl_db": 0, + "tpl_upload": 0, + "tpl_static": 0, + "tpl_async_db": 928016 + }, + "api-4-256": { + "framework": "zix", + "language": "Zig", + "rps": 62678, + "avg_latency": "1.22ms", + "p99_latency": "5.58ms", + "cpu": "199.8%", + "memory": "40MiB", + "connections": 256, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "314.55MB/s", + "input_bw": "3.53MB/s", + "reconnects": 188098, + "status_2xx": 940183, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0, + "tpl_baseline": 352686, + "tpl_json": 352790, + "tpl_db": 0, + "tpl_upload": 0, + "tpl_static": 0, + "tpl_async_db": 234706 + }, + "async-db-1024": { + "framework": "zix", + "language": "Zig", + "rps": 400444, + "avg_latency": "1.98ms", + "p99_latency": "20.40ms", + "cpu": "3183.3%", + "memory": "337MiB", + "connections": 1024, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "1.51GB/s", + "input_bw": "26.73MB/s", + "reconnects": 159686, + "status_2xx": 4004440, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "baseline-4096": { + "framework": "zix", + "language": "Zig", + "rps": 4442329, + "avg_latency": "921us", + "p99_latency": "1.19ms", + "cpu": "6427.0%", + "memory": "194MiB", + "connections": 4096, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "279.49MB/s", + "input_bw": "343.16MB/s", + "reconnects": 0, + "status_2xx": 22211648, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "baseline-512": { + "framework": "zix", + "language": "Zig", + "rps": 4188550, + "avg_latency": "121us", + "p99_latency": "222us", + "cpu": "6361.8%", + "memory": "133MiB", + "connections": 512, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "263.62MB/s", + "input_bw": "323.56MB/s", + "reconnects": 0, + "status_2xx": 20942750, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "baseline-h2-1024": { + "framework": "zix", + "language": "Zig", + "rps": 14090534, + "avg_latency": "3.65ms", + "p99_latency": "99.66ms", + "cpu": "4164.7%", + "memory": "216MiB", + "connections": 1024, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "461.46MB/s", + "reconnects": 0, + "status_2xx": 71157200, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "baseline-h2-256": { + "framework": "zix", + "language": "Zig", + "rps": 14076613, + "avg_latency": "1.09ms", + "p99_latency": "17.29ms", + "cpu": "4108.2%", + "memory": "120MiB", + "connections": 256, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "458.26MB/s", + "reconnects": 0, + "status_2xx": 70664600, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "baseline-h2c-1024": { + "framework": "zix", + "language": "Zig", + "rps": 14569901, + "avg_latency": "3.78ms", + "p99_latency": "58.31ms", + "cpu": "4171.5%", + "memory": "126MiB", + "connections": 1024, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "478.11MB/s", + "reconnects": 0, + "status_2xx": 73723700, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "baseline-h2c-256": { + "framework": "zix", + "language": "Zig", + "rps": 13956726, + "avg_latency": "1.05ms", + "p99_latency": "6.54ms", + "cpu": "3999.4%", + "memory": "106MiB", + "connections": 256, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "456.17MB/s", + "reconnects": 0, + "status_2xx": 70341900, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "baseline-h2c-4096": { + "framework": "zix", + "language": "Zig", + "rps": 13411078, + "avg_latency": "14.89ms", + "p99_latency": "58.21ms", + "cpu": "3900.5%", + "memory": "220MiB", + "connections": 4096, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "443.59MB/s", + "reconnects": 0, + "status_2xx": 68396500, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "baseline-h3-64": { + "framework": "zix", + "language": "Zig", + "rps": 9086240, + "avg_latency": "437us", + "p99_latency": "796us", + "cpu": "1281.9%", + "memory": "412MiB", + "connections": 64, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "69.46MB/s", + "reconnects": 0, + "status_2xx": 45522065, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "crud-4096": { + "framework": "zix", + "language": "Zig", + "rps": 823462, + "avg_latency": "4.67ms", + "p99_latency": "22.40ms", + "cpu": "3213.5%", + "memory": "387MiB", + "connections": 4096, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "241.32MB/s", + "input_bw": "70.68MB/s", + "reconnects": 59878, + "status_2xx": 12351944, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "echo-ws-16384": { + "framework": "zix", + "language": "Zig", + "rps": 4254843, + "avg_latency": "3.84ms", + "p99_latency": "4.59ms", + "cpu": "6408.1%", + "memory": "487MiB", + "connections": 16384, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "28.80MB/s", + "reconnects": 0, + "status_2xx": 21274219, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "echo-ws-4096": { + "framework": "zix", + "language": "Zig", + "rps": 4469914, + "avg_latency": "915us", + "p99_latency": "1.20ms", + "cpu": "6419.3%", + "memory": "251MiB", + "connections": 4096, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "29.85MB/s", + "reconnects": 0, + "status_2xx": 22349571, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "echo-ws-512": { + "framework": "zix", + "language": "Zig", + "rps": 4277156, + "avg_latency": "119us", + "p99_latency": "202us", + "cpu": "6402.6%", + "memory": "206MiB", + "connections": 512, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "28.55MB/s", + "reconnects": 0, + "status_2xx": 21385782, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "echo-ws-limited-4096": { + "framework": "zix", + "language": "Zig", + "rps": 2566106, + "avg_latency": "1.02ms", + "p99_latency": "1.74ms", + "cpu": "5761.4%", + "memory": "280MiB", + "connections": 4096, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "48.68MB/s", + "reconnects": 1282613, + "status_2xx": 12830533, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "echo-ws-limited-512": { + "framework": "zix", + "language": "Zig", + "rps": 2254504, + "avg_latency": "116us", + "p99_latency": "351us", + "cpu": "5259.0%", + "memory": "176MiB", + "connections": 512, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "42.78MB/s", + "reconnects": 1127295, + "status_2xx": 11272523, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "echo-ws-pipeline-16384": { + "framework": "zix", + "language": "Zig", + "rps": 61907676, + "avg_latency": "4.21ms", + "p99_latency": "8.35ms", + "cpu": "6152.3%", + "memory": "497MiB", + "connections": 16384, + "threads": 64, + "duration": "5s", + "pipeline": 16, + "bandwidth": "413.49MB/s", + "reconnects": 0, + "status_2xx": 309538381, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "echo-ws-pipeline-4096": { + "framework": "zix", + "language": "Zig", + "rps": 66037087, + "avg_latency": "991us", + "p99_latency": "2.00ms", + "cpu": "6239.8%", + "memory": "248MiB", + "connections": 4096, + "threads": 64, + "duration": "5s", + "pipeline": 16, + "bandwidth": "440.68MB/s", + "reconnects": 0, + "status_2xx": 330185438, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "echo-ws-pipeline-512": { + "framework": "zix", + "language": "Zig", + "rps": 60193061, + "avg_latency": "135us", + "p99_latency": "294us", + "cpu": "6381.1%", + "memory": "211MiB", + "connections": 512, + "threads": 64, + "duration": "5s", + "pipeline": 16, + "bandwidth": "401.71MB/s", + "reconnects": 0, + "status_2xx": 300965306, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "json-4096": { + "framework": "zix", + "language": "Zig", + "rps": 2325200, + "avg_latency": "917us", + "p99_latency": "3.38ms", + "cpu": "6534.2%", + "memory": "287MiB", + "connections": 4096, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "7.78GB/s", + "input_bw": "110.87MB/s", + "reconnects": 464196, + "status_2xx": 11626000, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "json-comp-16384": { + "framework": "zix", + "language": "Zig", + "rps": 1018808, + "avg_latency": "15.97ms", + "p99_latency": "23.70ms", + "cpu": "6533.4%", + "memory": "527MiB", + "connections": 16384, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "1.74GB/s", + "input_bw": "75.79MB/s", + "reconnects": 195882, + "status_2xx": 5094041, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "json-comp-4096": { + "framework": "zix", + "language": "Zig", + "rps": 1046581, + "avg_latency": "3.87ms", + "p99_latency": "8.60ms", + "cpu": "6825.8%", + "memory": "212MiB", + "connections": 4096, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "1.79GB/s", + "input_bw": "77.85MB/s", + "reconnects": 208635, + "status_2xx": 5232907, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "json-comp-512": { + "framework": "zix", + "language": "Zig", + "rps": 955775, + "avg_latency": "511us", + "p99_latency": "2.36ms", + "cpu": "6059.4%", + "memory": "132MiB", + "connections": 512, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "1.63GB/s", + "input_bw": "71.10MB/s", + "reconnects": 191161, + "status_2xx": 4778877, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "json-h2c-1024": { + "framework": "zix", + "language": "Zig", + "rps": 6821589, + "avg_latency": "2.42ms", + "p99_latency": "18.67ms", + "cpu": "3891.6%", + "memory": "177MiB", + "connections": 1024, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "22.88GB/s", + "reconnects": 0, + "status_2xx": 34517243, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "json-h2c-4096": { + "framework": "zix", + "language": "Zig", + "rps": 6746440, + "avg_latency": "11.33ms", + "p99_latency": "104.64ms", + "cpu": "4204.8%", + "memory": "425MiB", + "connections": 4096, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "22.80GB/s", + "reconnects": 0, + "status_2xx": 34406847, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "json-tls-4096": { + "framework": "zix", + "language": "Zig", + "rps": 1845248, + "avg_latency": "1.38ms", + "p99_latency": "109.34ms", + "cpu": "5396.1%", + "memory": "280MiB", + "connections": 4096, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "6.17GB", + "reconnects": 0, + "status_2xx": 9406889, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "limited-conn-4096": { + "framework": "zix", + "language": "Zig", + "rps": 2708192, + "avg_latency": "1.37ms", + "p99_latency": "1.89ms", + "cpu": "5826.4%", + "memory": "236MiB", + "connections": 4096, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "170.47MB/s", + "input_bw": "209.20MB/s", + "reconnects": 1353727, + "status_2xx": 13540964, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "limited-conn-512": { + "framework": "zix", + "language": "Zig", + "rps": 2683418, + "avg_latency": "174us", + "p99_latency": "423us", + "cpu": "5513.5%", + "memory": "131MiB", + "connections": 512, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "168.83MB/s", + "input_bw": "207.29MB/s", + "reconnects": 1341690, + "status_2xx": 13417092, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "pipelined-4096": { + "framework": "zix", + "language": "Zig", + "rps": 58761616, + "avg_latency": "1.11ms", + "p99_latency": "1.59ms", + "cpu": "6408.9%", + "memory": "193MiB", + "connections": 4096, + "threads": 64, + "duration": "5s", + "pipeline": 16, + "bandwidth": "3.61GB/s", + "reconnects": 0, + "status_2xx": 293808080, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "pipelined-512": { + "framework": "zix", + "language": "Zig", + "rps": 56503100, + "avg_latency": "144us", + "p99_latency": "285us", + "cpu": "6436.5%", + "memory": "132MiB", + "connections": 512, + "threads": 64, + "duration": "5s", + "pipeline": 16, + "bandwidth": "3.47GB/s", + "reconnects": 0, + "status_2xx": 282515503, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "static-1024": { + "framework": "zix", + "language": "Zig", + "rps": 222558, + "avg_latency": "4.66ms", + "p99_latency": "82.95ms", + "cpu": "6658.0%", + "memory": "456MiB", + "connections": 1024, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "13.20GB", + "reconnects": 0, + "status_2xx": 1130942, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "static-4096": { + "framework": "zix", + "language": "Zig", + "rps": 233973, + "avg_latency": "18.06ms", + "p99_latency": "239.55ms", + "cpu": "6617.6%", + "memory": "1.4GiB", + "connections": 4096, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "13.88GB", + "reconnects": 0, + "status_2xx": 1193344, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "static-6800": { + "framework": "zix", + "language": "Zig", + "rps": 231573, + "avg_latency": "30.61ms", + "p99_latency": "474.64ms", + "cpu": "6568.0%", + "memory": "2.3GiB", + "connections": 6800, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "13.74GB", + "reconnects": 0, + "status_2xx": 1180896, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "static-h2-1024": { + "framework": "zix", + "language": "Zig", + "rps": 1650640, + "avg_latency": "16.19ms", + "p99_latency": "169.67ms", + "cpu": "6431.3%", + "memory": "563MiB", + "connections": 1024, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "25.34GB/s", + "reconnects": 0, + "status_2xx": 8335733, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "static-h2-256": { + "framework": "zix", + "language": "Zig", + "rps": 1692045, + "avg_latency": "3.58ms", + "p99_latency": "60.58ms", + "cpu": "5935.6%", + "memory": "217MiB", + "connections": 256, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "25.82GB/s", + "reconnects": 0, + "status_2xx": 8494068, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "static-h3-64": { + "framework": "zix", + "language": "Zig", + "rps": 595586, + "avg_latency": "6.42ms", + "p99_latency": "20.04ms", + "cpu": "3297.5%", + "memory": "412MiB", + "connections": 64, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "9.06GB/s", + "reconnects": 0, + "status_2xx": 2989843, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "static-tls-1024": { + "framework": "zix", + "language": "Zig", + "rps": 339689, + "avg_latency": "3.01ms", + "p99_latency": "30.48ms", + "cpu": "6603.4%", + "memory": "228MiB", + "connections": 1024, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "20.15GB", + "reconnects": 0, + "status_2xx": 1732248, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "static-tls-4096": { + "framework": "zix", + "language": "Zig", + "rps": 314396, + "avg_latency": "12.92ms", + "p99_latency": "137.85ms", + "cpu": "6492.3%", + "memory": "543MiB", + "connections": 4096, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "18.65GB", + "reconnects": 0, + "status_2xx": 1603311, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "static-tls-6800": { + "framework": "zix", + "language": "Zig", + "rps": 300828, + "avg_latency": "22.59ms", + "p99_latency": "224.57ms", + "cpu": "6496.8%", + "memory": "841MiB", + "connections": 6800, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "17.84GB", + "reconnects": 0, + "status_2xx": 1534600, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "unary-grpc-1024": { + "framework": "zix", + "language": "Zig", + "rps": 7030197, + "avg_latency": "7.52ms", + "p99_latency": "32.57ms", + "cpu": "2904.3%", + "memory": "206MiB", + "connections": 1024, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "447.82MB/s", + "reconnects": 0, + "status_2xx": 35572800, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "unary-grpc-256": { + "framework": "zix", + "language": "Zig", + "rps": 7000555, + "avg_latency": "2.20ms", + "p99_latency": "9.47ms", + "cpu": "2791.2%", + "memory": "180MiB", + "connections": 256, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "444.16MB/s", + "reconnects": 0, + "status_2xx": 35282800, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "unary-grpc-tls-1024": { + "framework": "zix", + "language": "Zig", + "rps": 6781146, + "avg_latency": "7.66ms", + "p99_latency": "98.54ms", + "cpu": "2877.7%", + "memory": "318MiB", + "connections": 1024, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "431.95MB/s", + "reconnects": 0, + "status_2xx": 34312600, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "unary-grpc-tls-256": { + "framework": "zix", + "language": "Zig", + "rps": 6962147, + "avg_latency": "2.22ms", + "p99_latency": "20.73ms", + "cpu": "2903.7%", + "memory": "201MiB", + "connections": 256, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "440.85MB/s", + "reconnects": 0, + "status_2xx": 35019600, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + } + } +} diff --git a/site/static/logs/baseline-h2/1024/zix-http2.log b/site/static/logs/baseline-h2/1024/zix-http2.log new file mode 100644 index 000000000..e69de29bb diff --git a/site/static/logs/baseline-h2/256/zix-http2.log b/site/static/logs/baseline-h2/256/zix-http2.log new file mode 100644 index 000000000..e69de29bb diff --git a/site/static/logs/baseline-h2c/1024/zix-http2.log b/site/static/logs/baseline-h2c/1024/zix-http2.log new file mode 100644 index 000000000..e69de29bb diff --git a/site/static/logs/baseline-h2c/256/zix-http2.log b/site/static/logs/baseline-h2c/256/zix-http2.log new file mode 100644 index 000000000..e69de29bb diff --git a/site/static/logs/baseline-h2c/4096/zix-http2.log b/site/static/logs/baseline-h2c/4096/zix-http2.log new file mode 100644 index 000000000..e69de29bb diff --git a/site/static/logs/json-h2c/1024/zix-http2.log b/site/static/logs/json-h2c/1024/zix-http2.log new file mode 100644 index 000000000..e69de29bb diff --git a/site/static/logs/json-h2c/4096/zix-http2.log b/site/static/logs/json-h2c/4096/zix-http2.log new file mode 100644 index 000000000..e69de29bb diff --git a/site/static/logs/static-h2/1024/zix-http2.log b/site/static/logs/static-h2/1024/zix-http2.log new file mode 100644 index 000000000..e69de29bb diff --git a/site/static/logs/static-h2/256/zix-http2.log b/site/static/logs/static-h2/256/zix-http2.log new file mode 100644 index 000000000..e69de29bb