Skip to content

fix(vanilla-epoll/io_uring): lazy json-comp gz cache — drop ~135 MiB -gc none boot leak#958

Closed
enghitalo wants to merge 1 commit into
MDA2AV:mainfrom
enghitalo:fix/json-comp-mem-revert-precompute
Closed

fix(vanilla-epoll/io_uring): lazy json-comp gz cache — drop ~135 MiB -gc none boot leak#958
enghitalo wants to merge 1 commit into
MDA2AV:mainfrom
enghitalo:fix/json-comp-mem-revert-precompute

Conversation

@enghitalo

Copy link
Copy Markdown
Contributor

What

Restore the lazy, shared, lock-guarded json-comp gz cache on vanilla-epoll and vanilla-io_uring, reverting the lock-free boot precompute that shipped in #956/#957.

Why

The precompute compressed the full (count × m) grid (~800 keys) at boot. On the -gc none vanilla-epoll build, V's gzip.compress leaks ~157 KiB of internal scratch per call (upstream bug, vlang/v#27606) — so the boot precompute leaked ~135 MiB of permanent RSS. The last benchmark run showed it directly:

vanilla-epoll mem before (#956 combo) after precompute
baseline 512 77 MiB 213 MiB
json-comp 16384 221 MiB 377 MiB
static 1024 100 MiB 235 MiB

(flat ~+135 MiB across every profile — the signature of a one-time boot allocation, reproduced exactly in isolation: 800 × gzip.compress under -gc none = ~135 MiB, reclaimed under default GC.)

The lazy cache compresses only the 8 (count,m) pairs the json-comp profile actually sends (/json/{1,5,10,15,25,40,50} with m∈1..8), ≈ 1.3 MiB. This PR restores the exact json-comp code CI measured at 77 MiB in the #956/#957 combo commit, plus a guard comment so the precompute isn't reintroduced.

The lock-free change had no upside

It was meant to fix the io_uring json-comp@16384 collapse (a lock-contention hypothesis). The benchmark refuted it:

  • epoll is healthy at 16384c with the shared lock (2.32M rps, CPU ~6100% — saturated).
  • io_uring collapsed regardless, and worse with the precompute: 1.88M → 159K rps, CPU 4312% → 438%.

CPU dropping at max conns = rings starving, i.e. worker/thread oversubscription from the co-hosted json-tls listener (io_uring workers + the TLS thread pool exceed cores at 16384c), not lock contention. The real fix is a per-server worker cap (enghitalo/vanilla#89 fix #1) — tracked as a follow-up, not in this PR.

vanilla-io_uring is default-GC so it didn't leak, but it's reverted too for parity and to restore its validated pre-cleanup state.

Validation

🤖 Generated with Claude Code

…boot leak

The json-comp lock-free precompute (folded into MDA2AV#956/MDA2AV#957) compressed the full
(count x m) grid (~800 keys) at boot. On the `-gc none` vanilla-epoll entry, V's
gzip.compress leaks ~157 KiB of scratch per call (vlang/v#27606), so the boot
precompute leaked ~135 MiB of permanent RSS — CI showed vanilla-epoll baseline
memory jump 77 -> 213 MiB across every profile.

Restore the original LAZY, process-shared, RwMutex-guarded gz cache: compress only
the ~8 (count,m) pairs the profile actually sends (~1.3 MiB) and append the cached
bytes on a hit. This is the exact json-comp code CI measured at 77 MiB in the
MDA2AV#956/MDA2AV#957 combo commit (pre-cleanup), plus a guard comment so the precompute is not
reintroduced.

The lock-free change had no measured upside. It was meant to fix the io_uring
json-comp@16384 collapse (the lock-contention hypothesis, enghitalo/vanilla#89), but
CI showed it did not: epoll is healthy at 16384c WITH the lock, and the io_uring
collapse persisted and worsened (1.88M -> 159K rps, CPU 4312% -> 438%). That collapse
is worker/thread oversubscription from the co-hosted json-tls listener (io_uring
workers + TLS thread pool > cores at 16384c) — to be fixed by a per-server worker cap
(enghitalo/vanilla#89 fix #1), not the gz lock.

vanilla-io_uring is default-GC so it did not leak, but it is reverted too for parity
and to restore its validated pre-cleanup state.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@enghitalo

Copy link
Copy Markdown
Contributor Author

/benchmark -f vanilla-io_uring

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

Test Conn RPS CPU Mem Δ RPS Δ Mem
baseline 512 3,306,247 6406.3% 1.5GiB -0.6% ~0%
baseline 4096 3,710,317 5538.5% 1.5GiB -2.8% ~0%
pipelined 512 36,238,636 6672.7% 962MiB +0.2% -6.1%
pipelined 4096 38,648,652 6505.4% 1.2GiB +1.2% +9.1%
limited-conn 512 2,327,322 5967.7% 1.5GiB +1.3% +7.1%
limited-conn 4096 2,272,593 5131.9% 1.6GiB +0.4% ~0%
json 4096 2,414,527 6363.3% 1.4GiB +0.3% ~0%
json-comp 512 2,113,908 6061.9% 1.0GiB -0.9% ~0%
json-comp 4096 2,857,245 6529.5% 1.4GiB -0.6% ~0%
json-comp 16384 402,286 990.4% 2.1GiB +152.5% +5.0%
json-tls 4096 1,498,101 6089.0% 1.3GiB NEW NEW
upload 32 2,666 1833.4% 1.2GiB +1.9% -7.7%
upload 256 2,953 3306.4% 1.4GiB -0.3% -6.7%
api-4 256 28,520 354.1% 2.0GiB +0.2% -4.8%
api-16 1024 27,869 1511.1% 2.4GiB -4.3% +4.3%
static 1024 1,454,304 5424.8% 1.0GiB ~0% ~0%
static 4096 1,367,196 5435.2% 1.1GiB +0.7% -8.3%
static 6800 1,236,647 5656.9% 1.2GiB -0.4% ~0%
async-db 1024 10,841 5132.9% 1.8GiB +1.8% -5.3%
crud 4096 215,070 1371.8% 1.7GiB -2.8% ~0%
fortunes 1024 68 913.4% 1.7GiB -2.9% +21.4%
Full log
  Pipeline:  1
  Req/conn:  200
  Templates: 20
  Expected:  200
  Duration:  15s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   66.90ms   18.80ms   37.90ms   169.90ms    5.00s

  912933 requests in 15.00s, 911461 responses
  Throughput: 60.75K req/s
  Bandwidth:  18.81MB/s
  Status codes: 2xx=911461, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 911461 / 911461 responses (100.0%)
  Latency overflow (>5s): 4096
  Reconnects: 2350
  Per-template: 44259,47352,48983,47670,48268,47874,47588,44876,46202,46032,46891,49179,45986,45328,45539,45845,40704,38598,41951,42336
  Per-template-ok: 44259,47352,48983,47670,48268,47874,47588,44876,46202,46032,46891,49179,45986,45328,45539,45845,40704,38598,41951,42336
[info] CPU 494.8% | Mem 1.5GiB

[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   20.28ms   16.00ms   34.20ms   175.50ms   207.60ms

  2995791 requests in 15.00s, 2995791 responses
  Throughput: 199.69K req/s
  Bandwidth:  63.03MB/s
  Status codes: 2xx=2995791, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 2995788 / 2995791 responses (100.0%)
  Reconnects: 13051
  Per-template: 136754,142248,145229,150212,152914,152996,153718,154188,154900,155708,153131,151773,151369,156539,155798,154848,150247,144986,140652,137578
  Per-template-ok: 136754,142248,145229,150212,152914,152996,153718,154188,154900,155708,153131,151773,151369,156539,155798,154848,150247,144986,140652,137578
[info] CPU 1244.9% | Mem 1.6GiB

[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   18.99ms   14.90ms   32.20ms   183.40ms   215.70ms

  3226091 requests in 15.00s, 3226060 responses
  Throughput: 215.04K req/s
  Bandwidth:  67.93MB/s
  Status codes: 2xx=3226060, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 3226056 / 3226060 responses (100.0%)
  Reconnects: 14189
  Per-template: 151141,155350,157089,160367,161663,165861,167665,166207,165323,163826,163473,165461,165122,164806,162584,166149,163797,157910,150861,151401
  Per-template-ok: 151141,155350,157089,160367,161663,165861,167665,166207,165323,163826,163473,165461,165122,164806,162584,166149,163797,157910,150861,151401
[info] CPU 1371.8% | Mem 1.7GiB

=== Best: 215070 req/s (CPU: 1371.8%, Mem: 1.7GiB) ===
[info] input BW: 18.46MB/s (avg template: 90 bytes)
[info] saved results/crud/4096/vanilla-io_uring.json
httparena-bench-vanilla-io_uring
httparena-bench-vanilla-io_uring

==============================================
=== vanilla-io_uring / fortunes / 1024c (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/fortunes
  Threads:   64
  Conns:     1024 (16/thread)
  Pipeline:  1
  Req/conn:  unlimited (keep-alive)
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency    4.12s    4.33s    4.98s    5.00s    5.00s

  126 requests in 5.00s, 126 responses
  Throughput: 25 req/s
  Bandwidth:  611.62KB/s
  Status codes: 2xx=126, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 126 / 126 responses (100.0%)
  Latency overflow (>5s): 9
[info] CPU 655.5% | Mem 1.1GiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency    2.92s    3.50s    4.93s    5.00s    5.00s

  263 requests in 5.00s, 263 responses
  Throughput: 52 req/s
  Bandwidth:  1.25MB/s
  Status codes: 2xx=263, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 263 / 263 responses (100.0%)
  Latency overflow (>5s): 5
[info] CPU 907.9% | Mem 1.4GiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency    2.91s    3.51s    4.98s    5.00s    5.00s

  340 requests in 5.00s, 340 responses
  Throughput: 67 req/s
  Bandwidth:  1.61MB/s
  Status codes: 2xx=340, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 340 / 340 responses (100.0%)
  Latency overflow (>5s): 15
[info] CPU 913.4% | Mem 1.7GiB

=== Best: 68 req/s (CPU: 913.4%, Mem: 1.7GiB) ===
[info] saved results/fortunes/1024/vanilla-io_uring.json
httparena-bench-vanilla-io_uring
httparena-bench-vanilla-io_uring
[info] skip: vanilla-io_uring does not subscribe to baseline-h2
[info] skip: vanilla-io_uring does not subscribe to static-h2
[info] skip: vanilla-io_uring does not subscribe to baseline-h2c
[info] skip: vanilla-io_uring does not subscribe to json-h2c
[info] skip: vanilla-io_uring does not subscribe to baseline-h3
[info] skip: vanilla-io_uring does not subscribe to static-h3
[info] skip: vanilla-io_uring does not subscribe to gateway-64
[info] skip: vanilla-io_uring does not subscribe to gateway-h3
[info] skip: vanilla-io_uring does not subscribe to production-stack
[info] skip: vanilla-io_uring does not subscribe to unary-grpc
[info] skip: vanilla-io_uring does not subscribe to unary-grpc-tls
[info] skip: vanilla-io_uring does not subscribe to stream-grpc
[info] skip: vanilla-io_uring does not subscribe to stream-grpc-tls
[info] skip: vanilla-io_uring does not subscribe to echo-ws
[info] skip: vanilla-io_uring 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/fortunes-1024.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

@enghitalo

Copy link
Copy Markdown
Contributor Author

/benchmark -f vanilla-epoll

@github-actions

github-actions Bot commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

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

@github-actions

github-actions Bot commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

Benchmark Results

Framework: vanilla-epoll | Test: all tests

Test Conn RPS CPU Mem Δ RPS Δ Mem
baseline 512 3,766,362 6404.2% 77MiB +2.9% -63.8%
baseline 4096 4,173,013 6438.8% 160MiB +2.4% -45.2%
pipelined 512 40,224,452 6718.6% 74MiB +1.6% -65.1%
pipelined 4096 40,235,821 6539.7% 164MiB +0.9% -45.5%
limited-conn 512 1,008,650 3137.5% 67MiB +1.2% -67.5%
limited-conn 4096 1,030,593 2973.9% 108MiB +3.2% -56.1%
json 4096 2,170,930 6249.9% 204MiB +1.0% -44.3%
json-comp 512 2,097,991 6244.5% 90MiB -0.1% -59.6%
json-comp 4096 2,333,636 6370.2% 134MiB +1.1% -47.9%
json-comp 16384 2,314,750 6388.7% 185MiB ~0% -50.9%
json-tls 4096 1,517,777 6144.3% 401MiB +0.9% -25.5%
upload 32 2,974 2038.9% 135MiB +0.4% -50.0%
upload 256 3,007 3551.8% 322MiB ~0% -31.0%
api-4 256 66,864 374.4% 112MiB +2.9% -55.2%
api-16 1024 258,278 1603.6% 172MiB +7.1% -46.4%
static 1024 1,811,467 5738.0% 98MiB -1.4% -58.3%
static 4096 1,791,534 5465.1% 223MiB -1.0% -38.1%
static 6800 1,751,422 5288.2% 309MiB -1.2% -30.6%
async-db 1024 276,367 3015.4% 160MiB -3.8% -42.0%
crud 4096 309,547 782.7% 218MiB -0.9% -38.2%
fortunes 1024 165,588 6003.5% 255MiB -1.7% -35.4%
Full log
  Templates: 20
  Expected:  200
  Duration:  15s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   11.49ms   1.01ms   34.70ms   73.60ms   111.50ms

  4710162 requests in 15.00s, 4710162 responses
  Throughput: 313.96K req/s
  Bandwidth:  94.44MB/s
  Status codes: 2xx=4643208, 3xx=0, 4xx=0, 5xx=66954
  Latency samples: 4710159 / 4710162 responses (100.0%)
  Reconnects: 21973
  Per-template: 98653,120996,155259,186317,217659,249108,277135,300895,320843,335722,343367,344770,347633,345626,346701,347538,127552,64752,83033,96600
  Per-template-ok: 95277,119311,153055,183829,214920,245891,273378,296934,316669,331334,338715,340252,342984,341109,342143,342787,127552,62856,80745,93464

  WARNING: 66954/4710162 responses (1.4%) had unexpected status (expected 2xx)
[info] CPU 782.7% | Mem 218MiB

[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   12.47ms   6.26ms   35.10ms   66.60ms   95.10ms

  4421854 requests in 15.00s, 4421726 responses
  Throughput: 294.73K req/s
  Bandwidth:  90.22MB/s
  Status codes: 2xx=4347592, 3xx=0, 4xx=0, 5xx=74134
  Latency samples: 4421725 / 4421726 responses (100.0%)
  Reconnects: 20416
  Per-template: 101335,119885,150732,178649,205061,234239,260216,281808,299538,309471,314293,312658,311128,308639,310517,311885,144040,78929,89180,99522
  Per-template-ok: 98199,118120,148444,175695,201856,230411,255895,277296,294447,304313,309381,307410,306009,303378,305628,306901,144040,76755,86663,96750

  WARNING: 74134/4421726 responses (1.7%) had unexpected status (expected 2xx)
[info] CPU 765.2% | Mem 229MiB

[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   12.99ms   7.79ms   34.30ms   62.40ms   87.70ms

  4263078 requests in 15.00s, 4263078 responses
  Throughput: 284.16K req/s
  Bandwidth:  88.00MB/s
  Status codes: 2xx=4205554, 3xx=0, 4xx=0, 5xx=57524
  Latency samples: 4263070 / 4263078 responses (100.0%)
  Reconnects: 19584
  Per-template: 105317,123189,149548,175625,202643,229188,254085,272368,283452,289949,290859,291922,290300,288587,289466,289584,152053,88900,92119,103916
  Per-template-ok: 103025,121803,147520,173204,199850,226126,250825,268745,279472,286135,287037,287819,286527,284752,285634,285808,152053,87085,90483,101643

  WARNING: 57524/4263078 responses (1.3%) had unexpected status (expected 2xx)
[info] CPU 767.8% | Mem 232MiB

=== Best: 309547 req/s (CPU: 782.7%, Mem: 218MiB) ===
[info] input BW: 26.57MB/s (avg template: 90 bytes)
[info] saved results/crud/4096/vanilla-epoll.json
httparena-bench-vanilla-epoll
httparena-bench-vanilla-epoll

==============================================
=== vanilla-epoll / fortunes / 1024c (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/fortunes
  Threads:   64
  Conns:     1024 (16/thread)
  Pipeline:  1
  Req/conn:  unlimited (keep-alive)
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   4.84ms   4.01ms   8.76ms   14.50ms   39.50ms

  823416 requests in 5.00s, 823416 responses
  Throughput: 164.62K req/s
  Bandwidth:  3.81GB/s
  Status codes: 2xx=823416, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 823416 / 823416 responses (100.0%)
[info] CPU 5753.0% | Mem 257MiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   4.71ms   3.98ms   8.65ms   13.60ms   18.10ms

  827943 requests in 5.00s, 827943 responses
  Throughput: 165.52K req/s
  Bandwidth:  3.84GB/s
  Status codes: 2xx=827943, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 827942 / 827943 responses (100.0%)
[info] CPU 6003.5% | Mem 255MiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   4.73ms   4.08ms   8.67ms   13.30ms   17.40ms

  824167 requests in 5.00s, 824167 responses
  Throughput: 164.77K req/s
  Bandwidth:  3.82GB/s
  Status codes: 2xx=824167, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 824161 / 824167 responses (100.0%)
[info] CPU 5939.8% | Mem 257MiB

=== Best: 165588 req/s (CPU: 6003.5%, Mem: 255MiB) ===
[info] saved results/fortunes/1024/vanilla-epoll.json
httparena-bench-vanilla-epoll
httparena-bench-vanilla-epoll
[info] skip: vanilla-epoll does not subscribe to baseline-h2
[info] skip: vanilla-epoll does not subscribe to static-h2
[info] skip: vanilla-epoll does not subscribe to baseline-h2c
[info] skip: vanilla-epoll does not subscribe to json-h2c
[info] skip: vanilla-epoll does not subscribe to baseline-h3
[info] skip: vanilla-epoll does not subscribe to static-h3
[info] skip: vanilla-epoll does not subscribe to gateway-64
[info] skip: vanilla-epoll does not subscribe to gateway-h3
[info] skip: vanilla-epoll does not subscribe to production-stack
[info] skip: vanilla-epoll does not subscribe to unary-grpc
[info] skip: vanilla-epoll does not subscribe to unary-grpc-tls
[info] skip: vanilla-epoll does not subscribe to stream-grpc
[info] skip: vanilla-epoll does not subscribe to stream-grpc-tls
[info] skip: vanilla-epoll does not subscribe to echo-ws
[info] skip: vanilla-epoll 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/fortunes-1024.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

@enghitalo

Copy link
Copy Markdown
Contributor Author

Superseded — split into one PR per engine as requested:

Same changes, one file each. The benchmark results posted here already validated both engines (epoll 213→77 MiB, no regression; io_uring json-comp@16384 159K→402K). Closing in favor of #959 + #960.

@enghitalo enghitalo closed this Jul 1, 2026
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.

Metadata improvements to add more info

1 participant