Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
9257623
Write /async-db with the framework's writer instead of a DOM per row
Antruly Oct 15, 2026
a19557f
Move the pin to 8150720 (1.7.2-dev) and correct the version claims
Antruly Oct 15, 2026
6fadb86
Benchmark results: libuvcpp [skip ci]
github-actions[bot] Oct 15, 2026
c1be8fa
Build the brotli encoder into the entry
Antruly Oct 15, 2026
3b902d8
Serve gateway-64 and production-stack from a stock nginx edge
Antruly Oct 15, 2026
581ca9e
Bind the nginx edges to the two loopback addresses, not the wildcard
Antruly Oct 15, 2026
9964faf
Answer the JSON profiles with the framework's standard serializer
Antruly Oct 15, 2026
9b0c2e2
Move the pin to 02ae418 (1.7.2-dev), four code commits past 8150720
Antruly Oct 15, 2026
16e6e49
Benchmark results: libuvcpp [skip ci]
github-actions[bot] Oct 15, 2026
16cba4a
Build the brotli encoder back out of the entry
Antruly Oct 15, 2026
ea38462
Give the h3 static leg the cache-validation thread the h1/h2 legs have
Antruly Oct 15, 2026
a501776
Move the pin to 1f6a8fb (1.7.2-dev), three commits past 02ae418
Antruly Oct 15, 2026
c1f38b7
Correct the commit the h1/h2 static legs went on `LOOP_STAT` at
Antruly Oct 15, 2026
d4c8625
Merge remote-tracking branch 'origin/main' into libuvcpp-1.7.2
Antruly Oct 15, 2026
69ff884
Benchmark results: libuvcpp [skip ci]
github-actions[bot] Oct 16, 2026
437dec5
Move the pin to 0f34937 (1.7.2-dev), two code commits past 1f6a8fb
Antruly Oct 16, 2026
76b40e5
Merge remote-tracking branch 'origin/main' into libuvcpp-1.7.2
Antruly Oct 16, 2026
6f4f750
Answer /json and /async-db through the framework's bundled yyjson bac…
Antruly Oct 16, 2026
fcfd2d0
Benchmark results: libuvcpp [skip ci]
github-actions[bot] Oct 17, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
390 changes: 368 additions & 22 deletions frameworks/libuvcpp/Dockerfile

Large diffs are not rendered by default.

252 changes: 179 additions & 73 deletions frameworks/libuvcpp/README.md

Large diffs are not rendered by default.

15 changes: 9 additions & 6 deletions frameworks/libuvcpp/compose.gateway-h3.yml
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
# gateway-h3 — the same two-service stack as compose.gateway.yml, exercised
# over HTTP/3 at the edge.
#
# Nothing about the stack changes: stock Caddy binds 8443 on both tcp and udp
# from the same `protocols h1 h2 h3` server block, so the proxy config is
# byte-identical and only the load generator differs (h2load with
# `--alpn-list=h3`). The upstream hop stays plain h1 over loopback, which is
# what the server speaks.
# Same shape, same backend, same upstream hop (plain h1 over loopback), and a
# different edge *image*: this one is stock Caddy from ./proxy-h3, where
# gateway-64 is stock nginx from ./proxy. The split exists because h3 needs
# QUIC and nginx has no HTTP/3 without a custom build against a QUIC library,
# while over the profile's h1 upstream hop Caddy costs ~3x nginx per request at
# gateway-64's multiplexing -- so the two profiles want different edges. Caddy
# binds 8443 on both tcp and udp from its `protocols h1 h2 h3` server block,
# and the h3 load generator reaches the udp half (h2load with `--alpn-list=h3`).
#
# Kept as a separate file rather than a symlink because the harness resolves
# compose files by name (`compose.<profile>.yml`, with gateway-64 on the legacy
Expand All @@ -21,7 +24,7 @@
services:
proxy:
build:
context: ./proxy
context: ./proxy-h3
network_mode: host
cpuset: "${PROXY_CPUSET:-0-15,64-79}"
ulimits:
Expand Down
8 changes: 7 additions & 1 deletion frameworks/libuvcpp/compose.gateway.yml
Original file line number Diff line number Diff line change
@@ -1,10 +1,16 @@
# gateway-64 — stock Caddy (TLS + h2 on 8443) in front of the libuvcpp server.
# gateway-64 — stock nginx (TLS + h2 on 8443) in front of the libuvcpp server.
#
# Two services, which is what the profile fixes: `proxy` terminates TLS, serves
# /static/* off disk and forwards the dynamic endpoints over plain h1 to
# 127.0.0.1:8085; `server` answers /baseline2, /json/{n} and /async-db and
# nothing else.
#
# The edge is nginx rather than the Caddy that gateway-h3 still uses, because at
# this profile's 512 connections x 32 streams Caddy costs ~3x nginx per request
# over an h1 upstream and the proxy was therefore the stack's bottleneck (96% of
# its 32 CPUs against the server's 23%). proxy/nginx.conf has the measurement.
# The h3 profile cannot follow: h3 needs QUIC, which nginx lacks.
#
# The server is deliberately **not** given /certs. main.cc opens its 8081 and
# 8443 listeners only when the certificate pair is readable, so with no certs
# mounted it comes up on its two cleartext ports alone and leaves every TLS port
Expand Down
9 changes: 8 additions & 1 deletion frameworks/libuvcpp/compose.production-stack.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# production-stack — edge + cache + authsvc + server, four services on a 64
# logical CPU budget.
#
# edge (caddy) 30 logical CPUs. TLS + h2 termination, /static served
# edge (nginx) 30 logical CPUs. TLS + h2 termination, /static served
# off disk, one auth subrequest per /api/* call.
# cache (redis) 2. Redis is single-threaded on the data path; a
# second core would sit idle.
Expand All @@ -14,6 +14,13 @@
# All four on host networking, so what passes between them is loopback: the
# edge owns 8443, authsvc 9090, the server 8085, the cache 6379.
#
# The edge is nginx rather than the Caddy this stack used before. The profile's
# own architecture diagram names nginx and `auth_request`, and on a 4-core
# stand-in for this shape Caddy's edge cost 392-440 us of CPU per request
# against nginx's 101, with the edge pinned at its core budget in every arm.
# proxy-production/nginx.conf carries the measurement. Nothing here is h3, so
# unlike the gateway pair this stack does not need a Caddy twin.
#
# The server is not given /certs, for the same reason as the gateway stacks --
# main.cc opens its TLS listeners only when the certificate pair is readable, so
# without it the server stays on its two cleartext ports and the edge has 8443
Expand Down
Loading