Skip to content

Add true-async-server framework#694

Open
EdmondDantes wants to merge 19 commits into
MDA2AV:mainfrom
true-async:true-async
Open

Add true-async-server framework#694
EdmondDantes wants to merge 19 commits into
MDA2AV:mainfrom
true-async:true-async

Conversation

@EdmondDantes
Copy link
Copy Markdown
Contributor

Adds TrueAsync Server as an HttpArena framework entry under frameworks/true-async-server/.

What it is

A native PHP extension that runs an HTTP/1.1 + HTTP/2 + HTTP/3 server inside the PHP process — no FastCGI, no separate proxy. Built on the TrueAsync coroutine engine. One process, N event-loop threads (SO_REUSEPORT), coroutine-per-request, ALPN-driven protocol selection.

Subscribed profiles (7)

baseline, pipelined, limited-conn, json, upload, baseline-h2, json-tls

All 26 validation checks pass on the published Docker image:

=== Results: 26 passed, 0 failed ===

(Verified via ./scripts/validate.sh true-async-server against trueasync/php-true-async:0.7.0-alpha.5-php8.6.)

Local benchmark snapshot

./scripts/benchmark-lite.sh true-async-server baseline-h2 (h2load -c 512 -m 32 -t 8, server WORKERS=16, 16-core WSL2 host, 5s × 3 runs):

Run req/s Errors
1 1 033 337 0
2 1 010 158 0
3 994 134 0
Best 991 686 (CPU 871 %, Mem 339 MiB)

ALPN selects h2, TLS 1.3 / AES-256-GCM throughout. Server contention with the load generator on the same host bounds the ceiling here; on dedicated 64-core hardware the number is expected to be higher.

Not subscribed yet (transparent in README)

  • static, static-h2, static-h3 — need a built-in static handler at the C level (production-tier rules forbid the user-land file cache entry.php would otherwise rely on).
  • json-comp — the server's transparent gzip middleware is in 0.7.0-alpha.5 but not yet wired into entry.php.
  • baseline-h2c, json-h2c — HttpArena requires port 8082 to refuse HTTP/1.1; per-listener protocol mask is on the server roadmap (currently server-wide).
  • async-db, crud, api-4, api-16, fortunes — DB-backed; PostgreSQL adapter ships in PostgreSQL.php but the suite isn't fully validated yet.
  • baseline-h3, static-h3, gateway-h3addHttp3Listener exists in the server, not yet enabled in entry.php.

The full feature roadmap is tracked in FUTURES.md on the server repo. Each profile will land as the corresponding server feature does.

What's in the PR

  • frameworks/true-async-server/Dockerfile — pulls the published trueasync/php-true-async:0.7.0-alpha.5-php8.6 image, adds opcache JIT settings, copies entry.php and PostgreSQL.php.
  • frameworks/true-async-server/Dockerfile.local + build.sh — local-development override; copies a host-built php binary and true_async_server.so over the published image. Not used by HttpArena CI.
  • frameworks/true-async-server/entry.php — flat dispatcher: 8080 (h1 cleartext), 8081 (h1+TLS for json-tls), 8443 (h1+h2+TLS via ALPN); routes /baseline11, /baseline2, /pipeline, /json/{N}, /upload, /static/*, /async-db.
  • frameworks/true-async-server/PostgreSQL.php — async PDO PostgreSQL adapter using the TrueAsync connection pool.
  • frameworks/true-async-server/meta.json — declares the 7 subscribed profiles, tier tuned, maintainer.
  • frameworks/true-async-server/README.md — architecture, listener layout, subscribed / not-yet-subscribed profiles, related repositories.
  • frameworks/true-async-server/test/ — local Docker-Compose smoke tests.

EdmondDantes and others added 10 commits May 4, 2026 11:22
Native PHP HTTP server using TrueAsync coroutine engine with ThreadPool
for SO_REUSEPORT multi-worker scaling. Supports HTTP/1.1 and HTTP/2 over
TLS via ALPN. Covers baseline, pipelined, json, upload, static, async-db,
api-4/16, baseline-h2, static-h2, json-tls test profiles.
- Add docker-compose.yml: postgres + server + validator services on
  a shared bridge network; validator exits with the test result code
- Add test/Dockerfile + test/validate.sh: full HTTP/1.1, HTTP/2,
  TLS, JSON, upload, static, async-db and TCP-fragmentation tests
- Fix entry.php: require PostgreSQL.php inside each per-thread
  closure so every worker thread has the class in its PHP environment
- Fix Dockerfile: switch to slim base image with INI tuning
- Add ISSUES.md: documents 4 remaining alpha.3 failures with root
  causes and suggested server-level fixes
Validator now reports 38/38 in steady state against a locally-built
php-src + true-async-server. Documents the remaining minor first-run
Content-Type race and the host-PHP extensions required when using
the override mount.
Five consecutive validator runs against a locally-built php-true-async
report 38/38 with no flakes. Removes the previously-noted intermittent
Content-Type race (root cause was an external debug print, not a
server-side bug).
…ding parsing

- Remove temporary set_error_handler finalize-race tracer.
- Remove per-request fopen('/tmp/handler.log') in the HTTP handler — it dominated every benchmark.
- Remove per-worker /tmp/worker.log open at thread start.
- Reorder dispatch so /baseline11|/baseline2 is checked first (baseline + pipelined + limited-conn all hit it).
- Parse Accept-Encoding with comma split + q=0 honoring instead of substring match, so 'br;q=0' no longer falsely selects brotli.
…tests

- Remove read/write/keep-alive/shutdown timeout knobs from HttpServerConfig — bench runs are short and the per-connection timer arming is pure overhead here.
- Drop the manual 405 in /baseline2|/baseline11 and replace the userland sum loop with array_sum() on the parsed query (matches Swoole's shape).
- meta.json: remove async-db, api-4, api-16 — DB-backed profiles are not supported yet (api-4/api-16 mix in /async-db).
- Delete ISSUES.md (stale).
Static-file profiles will be re-enabled once the server gains a built-in
static handler (see FUTURES.md in the server repo).
The HttpArena validator probes json-tls on port 8081 (h1-over-TLS),
distinct from :8443 (h2/h1 over TLS via ALPN). Without this listener
all 5 json-tls checks fail.

Validator: 19 → 25 passing.
- README documents architecture, listener layout, subscribed and not-yet-subscribed profiles, related TrueAsync repos.
- Dockerfile FROM trueasync/php-true-async:0.7.0-alpha.3-php8.6 → 0.7.0-alpha.5-php8.6 (HTTP/2 default-enabled build, gzip middleware, bailout firewall portability fix).
@EdmondDantes
Copy link
Copy Markdown
Contributor Author

/benchmark -f true-async-server

@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: true-async-server | Test: all tests

Test Conn RPS CPU Mem Δ RPS Δ Mem
baseline 512 2,094,832 6573.7% 376MiB NEW NEW
baseline 4096 2,189,855 6039.4% 397MiB NEW NEW
pipelined 512 2,876,611 6485.0% 344MiB NEW NEW
pipelined 4096 2,253,880 5955.6% 376MiB NEW NEW
json 4096 981,855 6490.6% 458MiB NEW NEW
json-tls 4096 176,161 1476.2% 924MiB NEW NEW
upload 32 866 964.7% 590MiB NEW NEW
upload 256 910 962.8% 3.2GiB NEW NEW
baseline-h2 256 6,611,572 6259.5% 482MiB NEW NEW
baseline-h2 1024 5,594,231 6100.9% 785MiB NEW NEW
Full log
Application protocol: h2
.
35. Stopping all clients.
2

43Stopped all clients for thread #53


finished in 5.03s, 6651241.60 req/s, 133.21MB/s
requests: 33256208 total, 33281808 started, 33256208 done, 33256208 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 33256211 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 666.05MB (698399646) total, 63.43MB (66514470) headers (space savings 93.75%), 31.72MB (33256208) data
                     min         max         mean         sd        +/- sd
time for request:      175us     18.55ms      3.91ms      1.90ms    64.61%
time for connect:     3.38ms     27.22ms     14.48ms      6.26ms    57.81%
time to 1st byte:    10.86ms     37.56ms     24.85ms      4.76ms    73.83%
req/s           :   11310.65    81346.71    25979.70    13100.40    79.69%
[info] CPU 6259.5% | Mem 482MiB

[run 3/3]
starting benchmark...
22.

.Main benchmark duration is started for thread #16.

TLS Protocol: TLSv1.3
Cipher: TLS_AES_256_GCM_SHA384
Server Temp Key: X25519 253 bits
Application protocol: h2
.
9Stopped all clients for thread #1
. Stopping all clients.
33. Stopping all clients.

finished in 5.03s, 6584678.80 req/s, 131.88MB/s
requests: 32923394 total, 32948994 started, 32923394 done, 32923394 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 32923395 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 659.38MB (691410490) total, 62.80MB (65848838) headers (space savings 93.75%), 31.40MB (32923394) data
                     min         max         mean         sd        +/- sd
time for request:      131us     17.57ms      3.92ms      1.70ms    68.25%
time for connect:     3.17ms     27.12ms     14.11ms      6.10ms    57.03%
time to 1st byte:    14.44ms     33.10ms     23.74ms      4.20ms    64.84%
req/s           :   12634.77    78820.30    25719.75    11721.19    82.42%
[info] CPU 6220.5% | Mem 495MiB

=== Best: 6611572 req/s (CPU: 6259.5%, Mem: 482MiB) ===
[info] saved results/baseline-h2/256/true-async-server.json
httparena-bench-true-async-server
httparena-bench-true-async-server

==============================================
=== true-async-server / baseline-h2 / 1024c (tool=h2load) ===
==============================================
[info] waiting for server...
[info] server ready

[run 1/3]
starting benchmark...
.

.Main benchmark duration is started for thread #45.

.Main benchmark duration is started for thread #61.

.Main benchmark duration is started for thread #5.
.
TLS Protocol: TLSv1.3
Cipher: TLS_AES_256_GCM_SHA384
Server Temp Key: X25519 253 bits
Application protocol: h2
.Main benchmark duration is started for thread #42.

.Main benchmark duration is started for thread #
28.Main benchmark duration is started for thread #27.


51. Stopping all clients.
45Stopped all clients for thread #32


finished in 5.05s, 5650172.80 req/s, 113.17MB/s
requests: 28250864 total, 28353264 started, 28250864 done, 28250864 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 28250871 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 565.86MB (593345137) total, 53.89MB (56509934) headers (space savings 93.75%), 26.94MB (28250864) data
                     min         max         mean         sd        +/- sd
time for request:      137us    158.84ms     18.03ms     11.36ms    89.88%
time for connect:     3.46ms    125.53ms     58.15ms     33.94ms    56.93%
time to 1st byte:     4.37ms    242.09ms    128.53ms     42.29ms    70.90%
req/s           :    2908.58    13404.85     5516.69     1737.68    75.49%
[info] CPU 6100.9% | Mem 785MiB

[run 2/3]
starting benchmark...
39.
34.
.Main benchmark duration is started for thread #61.

4.44
.Main benchmark duration is started for thread #4.

.42
.
62% of clients started
.Main benchmark duration is started for thread #48.

.
45Main benchmark duration is started for thread #18.
.
8.
.
47.
.
0.

TLS Protocol: TLSv1.3
Cipher: TLS_AES_256_GCM_SHA384
Server Temp Key: X25519 253 bits
Application protocol: h2


. Stopping all clients.

finished in 5.06s, 5516455.40 req/s, 110.49MB/s
requests: 27582277 total, 27684677 started, 27582277 done, 27582277 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 27582293 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 552.47MB (579304942) total, 52.62MB (55172776) headers (space savings 93.75%), 26.30MB (27582277) data
                     min         max         mean         sd        +/- sd
time for request:      209us    107.26ms     17.63ms      7.34ms    81.60%
time for connect:     4.24ms    123.30ms     53.85ms     33.59ms    56.54%
time to 1st byte:    21.46ms    202.46ms    112.70ms     36.89ms    72.36%
req/s           :    2625.62    10813.76     5386.22     1411.78    71.00%
[info] CPU 6418.8% | Mem 877MiB

[run 3/3]
starting benchmark...
0.
58.

.
31..

TLS Protocol: TLSv1.3
Cipher: TLS_AES_256_GCM_SHA384
Server Temp Key: X25519 253 bits
Application protocol: h2
9. Stopping all clients.
41. Stopping all clients.


6. Stopping all clients.
22Stopped all clients for thread #31
. Stopping all clients.
45Main benchmark duration is over for thread #. Stopping all clients.54
. Stopping all clients.

finished in 5.06s, 5485346.00 req/s, 109.87MB/s
requests: 27426730 total, 27529130 started, 27426730 done, 27426730 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 27426746 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 549.35MB (576038465) total, 52.32MB (54861684) headers (space savings 93.75%), 26.16MB (27426730) data
                     min         max         mean         sd        +/- sd
time for request:      106us    100.75ms     17.79ms      8.33ms    79.62%
time for connect:     3.86ms    123.43ms     53.65ms     33.47ms    55.27%
time to 1st byte:    15.11ms    193.90ms    112.56ms     38.63ms    69.82%
req/s           :    2404.49    21848.96     5355.88     1834.18    84.86%
[info] CPU 6255.6% | Mem 927MiB

=== Best: 5594231 req/s (CPU: 6100.9%, Mem: 785MiB) ===
[info] saved results/baseline-h2/1024/true-async-server.json
httparena-bench-true-async-server
httparena-bench-true-async-server
[info] skip: true-async-server does not subscribe to static-h2
[info] skip: true-async-server does not subscribe to baseline-h2c
[info] skip: true-async-server does not subscribe to json-h2c
[info] skip: true-async-server does not subscribe to baseline-h3
[info] skip: true-async-server does not subscribe to static-h3
[info] skip: true-async-server does not subscribe to gateway-64
[info] skip: true-async-server does not subscribe to gateway-h3
[info] skip: true-async-server does not subscribe to production-stack
[info] skip: true-async-server does not subscribe to unary-grpc
[info] skip: true-async-server does not subscribe to unary-grpc-tls
[info] skip: true-async-server does not subscribe to stream-grpc
[info] skip: true-async-server does not subscribe to stream-grpc-tls
[info] skip: true-async-server does not subscribe to echo-ws
[info] skip: true-async-server 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/baseline-h2-1024.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/baseline-h2-256.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-tls-4096.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/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
[info] restoring CPU governor → powersave

The server now ships a built-in C StaticHandler with sendfile + open-file
cache + per-request precompressed sidecar selection (.br/.gz), plus a
transparent gzip/brotli compression middleware. Wire both into entry.php
and add the three profiles to the subscribed list.

- entry.php: replace the in-memory $staticFiles preload + manual AE
  chooser with `addStaticHandler('/static/', '/data/static')`. Enable
  the response middleware via `setCompressionEnabled(true)`.
- meta.json: subscribe to json-comp, static, static-h2.
- README: updated subscribed list (10 profiles), removed the
  "not yet subscribed" entries for the three new profiles, refreshed
  the dispatcher snippet.

validate.sh: 39/39 checks pass on the new image.
true-async-server:
- Add /sqlite-db handler (native ext-sqlite3, prepare-once-per-worker).
  PDO sqlite + pool + per-request prepare measured ~14% extra instructions
  per request vs native (PDO core overhead: do_fetch indirection,
  vtable dispatch, fetch_value per column, PDOStatement object init).
  Native is the minimal-overhead path for read-only SQLite, and pool
  buys nothing here since sqlite calls are synchronous in-process.
- /async-db: switch DATABASE_MAX_CONN semantics — env value is now the
  total budget across all worker threads; per-worker pool MAX is
  totalCap/workers with a hard ceiling at 4×CPU. Prevents the
  workers×pool_max blowup on default HttpArena env (16×256=4096 requested
  vs PG max_connections=256). Best measured config: 16 workers × MAX=4
  → 65 PG backends → 33k RPS (was 13k with default oversubscription).
- meta.json: add async-db to declared tests.

swoole:
- Add /sqlite-db handler (parity with true-async-server). Uses the
  existing SQLite.php helper which is ext-sqlite3 based with
  prepare-once-per-worker.
- Dockerfile: trueasync/php-true-async 0.7.0-alpha.8 → 0.7.0-alpha.11
- docker-compose.yml: mount benchmark.db into server (needed by /sqlite-db
  handler and its validator tests).
- validate.sh:
  - add /sqlite-db section: response shape (rating/tags/active), Content-Type
    json, empty-range count=0.
  - accept either text/javascript or application/javascript for .js mime
    (alpha.11 ships modernised IANA-compliant default per RFC 9239).

All 41 validator tests pass on alpha.11.
Cover the two h2 static bugs we just chased:

* 30 fresh-connection fetches of /static/app.js — would have caught
  both the worker crash (size=0 for all) and the 65535/65536 B
  truncation (~23% rate).
* A single h2 connection multiplexing three large assets — would have
  caught any flow-control bookkeeping regression specific to the
  shared-window path.

Both are tolerant of at most one transient TLS-handshake failure to
stay green on slow CI, but truncations must be zero — that is the
actual regression signal.
@EdmondDantes
Copy link
Copy Markdown
Contributor Author

/benchmark -f true-async-server

@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: true-async-server | Test: all tests

Test Conn RPS CPU Mem Δ RPS Δ Mem
baseline 512 2,081,234 6654.6% 186MiB NEW NEW
baseline 4096 2,170,976 6050.9% 243MiB NEW NEW
pipelined 512 2,850,971 6473.8% 154MiB NEW NEW
pipelined 4096 2,205,202 5942.9% 211MiB NEW NEW
json 4096 975,286 6491.8% 262MiB NEW NEW
json-comp 512 281,173 5796.8% 201MiB NEW NEW
json-comp 4096 285,899 6451.9% 285MiB NEW NEW
json-comp 16384 281,146 6478.4% 507MiB NEW NEW
json-tls 4096 794,756 6052.9% 516MiB NEW NEW
upload 32 2,071 1999.1% 5.8GiB NEW NEW
upload 256 2,262 5407.6% 12.0GiB NEW NEW
static 1024 126,224 1296.9% 202MiB NEW NEW
static 4096 300,594 3086.4% 309MiB NEW NEW
static 6800 277,196 3092.7% 405MiB NEW NEW
async-db 1024 244,285 4771.5% 233MiB NEW NEW
baseline-h2 256 6,465,290 6072.4% 248MiB NEW NEW
baseline-h2 1024 5,316,852 6026.9% 593MiB NEW NEW
static-h2 256 0 0.0% 0MiB NEW NEW
static-h2 1024 0 0.0% 0MiB NEW NEW
Full log
.
.Warm-up phase is over for thread #20.
progress: Main benchmark duration is started for thread #81% of clients started35
.


.
.Warm-up phase is over for thread #5045progress: .

87.

% of clients started

1. Stopping all clients.
35512137Main benchmark duration is over for thread #. Stopping all clients.
. Stopping all clients.Stopped all clients for thread #93459Stopped all clients for thread #
. Stopping all clients.. Stopping all clients.Stopped all clients for thread #5118Main benchmark duration is over for thread #. Stopping all clients.


. Stopping all clients.


. Stopping all clients.Stopped all clients for thread #3534
. Stopping all clients.




21

3013Stopped all clients for thread #. Stopping all clients.23

59

. Stopping all clients.

44Stopped all clients for thread #54
. Stopping all clients.
32. Stopping all clients.
15

finished in 5.07s, 0.40 req/s, 1.01KB/s
requests: 2 total, 2338 started, 2 done, 2 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 2 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 5.06KB (5182) total, 172B (172) headers (space savings 48.19%), 4.73KB (4840) data
                     min         max         mean         sd        +/- sd
time for request:     4.25ms      8.92ms      6.58ms      2.34ms   100.00%
time for connect:     3.28ms     20.04ms     12.00ms      4.97ms    58.90%
time to 1st byte:     7.80ms     12.62ms     10.21ms      3.40ms   100.00%
req/s           :       0.00       78.87        0.08        2.47    99.80%
[info] CPU 0.0% | Mem 0MiB

[run 2/3]
starting benchmark...
progress: Main benchmark duration is started for thread #61.100
19.
% of clients started
.Main benchmark duration is started for thread #12.
22
.Main benchmark duration is started for thread #11.

.
.
33.
.
51Main benchmark duration is started for thread #59.
.

63. Stopping all clients.


46. Stopping all clients.
. Stopping all clients.

3
. Stopping all clients.Main benchmark duration is over for thread #
. Stopping all clients.Stopped all clients for thread #3

25Main benchmark duration is over for thread #19Stopped all clients for thread #. Stopping all clients.14

18
. Stopping all clients.
9. Stopping all clients.

23. Stopping all clients.

. Stopping all clients.Stopped all clients for thread #Stopped all clients for thread #Stopped all clients for thread #23

24
32
. Stopping all clients.
1Stopped all clients for thread #39. Stopping all clients.

52. Stopping all clients.



. Stopping all clients.27
. Stopping all clients.Stopped all clients for thread #Stopped all clients for thread #4941


56. Stopping all clients.
60. Stopping all clients.

finished in 5.01s, 0.00 req/s, 0B/s
requests: 0 total, 0 started, 0 done, 0 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 0 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 0B (0) total, 0B (0) headers (space savings 0.00%), 0B (0) data
                     min         max         mean         sd        +/- sd
time for request:        0us         0us         0us         0us     0.00%
time for connect:        0us         0us         0us         0us     0.00%
time to 1st byte:        0us         0us         0us         0us     0.00%
req/s           :       0.00        0.00        0.00        0.00   100.00%
[info] CPU 0.0% | Mem 0MiB

[run 3/3]
starting benchmark...
35.
11Stopped all clients for thread #13
. Stopping all clients.

. Stopping all clients.
27. Stopping all clients.
. Stopping all clients.
22. Stopping all clients.
. Stopping all clients.
. Stopping all clients.
20. Stopping all clients.
36. Stopping all clients.
. Stopping all clients.
2Main benchmark duration is over for thread #21. Stopping all clients.
. Stopping all clients.
48. Stopping all clients.

24. Stopping all clients.
56Stopped all clients for thread #30
. Stopping all clients.

55Stopped all clients for thread #58
. Stopping all clients.
54. Stopping all clients.
. Stopping all clients.
60Stopped all clients for thread #
57
62

finished in 5.01s, 0.00 req/s, 0B/s
requests: 0 total, 0 started, 0 done, 0 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 0 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 0B (0) total, 0B (0) headers (space savings 0.00%), 0B (0) data
                     min         max         mean         sd        +/- sd
time for request:        0us         0us         0us         0us     0.00%
time for connect:        0us         0us         0us         0us     0.00%
time to 1st byte:        0us         0us         0us         0us     0.00%
req/s           :       0.00        0.00        0.00        0.00   100.00%
[info] CPU 0.0% | Mem 0MiB

=== Best: 0 req/s (CPU: 0.0%, Mem: 0MiB) ===
[info] saved results/static-h2/1024/true-async-server.json
httparena-bench-true-async-server
httparena-bench-true-async-server
[info] skip: true-async-server does not subscribe to baseline-h2c
[info] skip: true-async-server does not subscribe to json-h2c
[info] skip: true-async-server does not subscribe to baseline-h3
[info] skip: true-async-server does not subscribe to static-h3
[info] skip: true-async-server does not subscribe to gateway-64
[info] skip: true-async-server does not subscribe to gateway-h3
[info] skip: true-async-server does not subscribe to production-stack
[info] skip: true-async-server does not subscribe to unary-grpc
[info] skip: true-async-server does not subscribe to unary-grpc-tls
[info] skip: true-async-server does not subscribe to stream-grpc
[info] skip: true-async-server does not subscribe to stream-grpc-tls
[info] skip: true-async-server does not subscribe to echo-ws
[info] skip: true-async-server 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/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/baseline-h2-1024.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/baseline-h2-256.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/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/static-h2-1024.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/static-h2-256.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
[info] restoring loopback MTU to 65536
[info] restoring CPU governor → powersave

@EdmondDantes
Copy link
Copy Markdown
Contributor Author

/benchmark -f true-async-server

@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: true-async-server | Test: all tests

Test Conn RPS CPU Mem Δ RPS Δ Mem
baseline 512 2,165,319 6716.1% 186MiB NEW NEW
baseline 4096 2,256,099 5833.1% 248MiB NEW NEW
pipelined 512 3,079,084 6519.5% 154MiB NEW NEW
pipelined 4096 2,271,489 5972.4% 213MiB NEW NEW
json 4096 1,022,403 6478.1% 264MiB NEW NEW
json-comp 512 285,772 5854.0% 205MiB NEW NEW
json-comp 4096 291,741 6159.8% 276MiB NEW NEW
json-comp 16384 282,400 6090.8% 530MiB NEW NEW
json-tls 4096 791,887 6034.9% 548MiB NEW NEW
upload 32 2,086 1964.4% 6.1GiB NEW NEW
upload 256 2,249 5456.1% 12.4GiB NEW NEW
static 1024 529,817 3156.8% 216MiB NEW NEW
static 4096 623,223 5793.3% 516MiB NEW NEW
static 6800 567,866 4103.4% 469MiB NEW NEW
async-db 1024 245,496 4912.3% 250MiB NEW NEW
baseline-h2 256 5,882,590 7088.3% 247MiB NEW NEW
baseline-h2 1024 3,812,784 7113.2% 682MiB NEW NEW
static-h2 256 259 0.0% 0MiB NEW NEW
static-h2 1024 172 0.0% 0MiB NEW NEW
Full log

==============================================
=== true-async-server / static-h2 / 1024c (tool=h2load) ===
==============================================
[info] waiting for server...
[info] server ready

[run 1/3]
starting benchmark...
TLS Protocol: TLSv1.3
Cipher: TLS_AES_256_GCM_SHA384
Server Temp Key: X25519 253 bits
Application protocol: h2
33.Warm-up phase is over for thread #62.

.
48.
5Warm-up phase is over for thread #Main benchmark duration is started for thread #34.
32.
38.
4.
.

.
21Stopped all clients for thread #. Stopping all clients.23

0. Stopping all clients.
. Stopping all clients.Stopped all clients for thread #20

19Main benchmark duration is over for thread #6. Stopping all clients.
. Stopping all clients.
. Stopping all clients.
49. Stopping all clients.
119. Stopping all clients.
. Stopping all clients.
3860. Stopping all clients.Main benchmark duration is over for thread #. Stopping all clients.
33Stopped all clients for thread #Stopped all clients for thread #Stopped all clients for thread #. Stopping all clients.Stopped all clients for thread #Stopped all clients for thread #. Stopping all clients.937
11

3358Main benchmark duration is over for thread #51
. Stopping all clients.5
4Stopped all clients for thread #. Stopping all clients.
. Stopping all clients.8
55



. Stopping all clients.

51Stopped all clients for thread #59

54. Stopping all clients.


finished in 5.07s, 112.80 req/s, 1.77MB/s
requests: 573 total, 10941 started, 573 done, 564 succeeded, 9 failed, 9 errored, 0 timeout
status codes: 875 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 8.84MB (9265621) total, 24.42KB (25003) headers (space savings 81.22%), 8.79MB (9221609) data
                     min         max         mean         sd        +/- sd
time for request:     1.93ms     50.62ms     28.26ms     13.35ms    60.64%
time for connect:     3.30ms     51.26ms     23.25ms     10.96ms    67.59%
time to 1st byte:    17.25ms     56.51ms     41.57ms      9.40ms    74.29%
req/s           :       0.00      320.78        2.82       21.40    98.24%
[info] CPU 0.0% | Mem 0MiB

[run 2/3]
starting benchmark...
23progress: 6% of clients started
.
% of clients started
.
28.
34.
20Stopped all clients for thread #63
21. Stopping all clients.
. Stopping all clients.

50. Stopping all clients.
22. Stopping all clients.
27Main benchmark duration is over for thread #. Stopping all clients.5. Stopping all clients.


45. Stopping all clients.
35
. Stopping all clients.Stopped all clients for thread #54

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


. Stopping all clients.. Stopping all clients.Main benchmark duration is over for thread #30
. Stopping all clients.Stopped all clients for thread #Main benchmark duration is over for thread #37


56Stopped all clients for thread #30
. Stopping all clients.

finished in 5.01s, 0.00 req/s, 0B/s
requests: 0 total, 0 started, 0 done, 0 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 0 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 0B (0) total, 0B (0) headers (space savings 0.00%), 0B (0) data
                     min         max         mean         sd        +/- sd
time for request:        0us         0us         0us         0us     0.00%
time for connect:        0us         0us         0us         0us     0.00%
time to 1st byte:        0us         0us         0us         0us     0.00%
req/s           :       0.00        0.00        0.00        0.00   100.00%
[info] CPU 0.0% | Mem 0MiB

[run 3/3]
starting benchmark...
27Main benchmark duration is started for thread #41.
.
.
.
54.
.

3663Stopped all clients for thread #. Stopping all clients.


13

9
36Stopped all clients for thread #
37
39. Stopping all clients.19. Stopping all clients.


39
17. Stopping all clients.23. Stopping all clients.

14
. Stopping all clients.


25. Stopping all clients.
. Stopping all clients.
33. Stopping all clients.
43. Stopping all clients.
56. Stopping all clients.
1. Stopping all clients.

56


finished in 5.01s, 0.00 req/s, 0B/s
requests: 0 total, 0 started, 0 done, 0 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 0 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 0B (0) total, 0B (0) headers (space savings 0.00%), 0B (0) data
                     min         max         mean         sd        +/- sd
time for request:        0us         0us         0us         0us     0.00%
time for connect:        0us         0us         0us         0us     0.00%
time to 1st byte:        0us         0us         0us         0us     0.00%
req/s           :       0.00        0.00        0.00        0.00   100.00%
[info] CPU 0.0% | Mem 0MiB

=== Best: 172 req/s (CPU: 0.0%, Mem: 0MiB) ===
[info] saved results/static-h2/1024/true-async-server.json
httparena-bench-true-async-server
httparena-bench-true-async-server
[info] skip: true-async-server does not subscribe to baseline-h2c
[info] skip: true-async-server does not subscribe to json-h2c
[info] skip: true-async-server does not subscribe to baseline-h3
[info] skip: true-async-server does not subscribe to static-h3
[info] skip: true-async-server does not subscribe to gateway-64
[info] skip: true-async-server does not subscribe to gateway-h3
[info] skip: true-async-server does not subscribe to production-stack
[info] skip: true-async-server does not subscribe to unary-grpc
[info] skip: true-async-server does not subscribe to unary-grpc-tls
[info] skip: true-async-server does not subscribe to stream-grpc
[info] skip: true-async-server does not subscribe to stream-grpc-tls
[info] skip: true-async-server does not subscribe to echo-ws
[info] skip: true-async-server 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/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/baseline-h2-1024.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/baseline-h2-256.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/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/static-h2-1024.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/static-h2-256.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
[info] restoring loopback MTU to 65536
[info] restoring CPU governor → powersave

@EdmondDantes
Copy link
Copy Markdown
Contributor Author

/benchmark -f true-async-server

@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: true-async-server | Test: all tests

Test Conn RPS CPU Mem Δ RPS Δ Mem
baseline 512 2,087,094 6696.4% 185MiB NEW NEW
baseline 4096 2,159,020 5923.1% 218MiB NEW NEW
pipelined 512 3,045,234 6514.1% 154MiB NEW NEW
limited-conn 4096 1,795,550 6266.0% 178MiB NEW NEW
json 4096 1,015,994 6473.1% 265MiB NEW NEW
json-comp 512 284,801 5821.5% 202MiB NEW NEW
json-comp 4096 292,332 6468.3% 286MiB NEW NEW
json-comp 16384 283,072 6380.9% 521MiB NEW NEW
json-tls 4096 795,450 6004.1% 548MiB NEW NEW
upload 32 2,593 1873.3% 322MiB NEW NEW
upload 256 2,969 3680.8% 642MiB NEW NEW
static 1024 453,776 2532.7% 205MiB NEW NEW
static 4096 617,724 4500.9% 338MiB NEW NEW
static 6800 602,888 4476.4% 430MiB NEW NEW
async-db 1024 245,995 4814.8% 248MiB NEW NEW
baseline-h2 256 5,834,172 7396.6% 280MiB NEW NEW
baseline-h2 1024 3,822,464 7312.2% 623MiB NEW NEW
static-h2 256 70 0.0% 0MiB NEW NEW
static-h2 1024 262 0.0% 0MiB NEW NEW
Full log

[run 1/3]
starting benchmark...
.

12% of clients started
37.
25% of clients started
31Main benchmark duration is started for thread #24.
22Warm-up phase is over for thread #Warm-up phase is over for thread #.
.
58% of clients started.

13Main benchmark duration is started for thread #.
42.58
.
33.
21Main benchmark duration is started for thread #49.
.
.
47progress: .75
% of clients started
.Warm-up phase is over for thread #14.
.progress: 81% of clients started



35. Stopping all clients.
. Stopping all clients.
54Main benchmark duration is over for thread #38Main benchmark duration is over for thread #Stopped all clients for thread #16
. Stopping all clients.59Main benchmark duration is over for thread #
29Stopped all clients for thread #50

. Stopping all clients.. Stopping all clients.. Stopping all clients.
3640Stopped all clients for thread #
. Stopping all clients.11
. Stopping all clients.Stopped all clients for thread #
54Stopped all clients for thread #
36
. Stopping all clients.9

. Stopping all clients.40

53. Stopping all clients.
47. Stopping all clients.


39. Stopping all clients.Main benchmark duration is over for thread #

2528. Stopping all clients.
. Stopping all clients.. Stopping all clients.
28

30Stopped all clients for thread #0
. Stopping all clients.

finished in 5.06s, 193.40 req/s, 2.82MB/s
requests: 971 total, 8811 started, 971 done, 967 succeeded, 4 failed, 4 errored, 0 timeout
status codes: 1328 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 14.10MB (14786782) total, 39.26KB (40198) headers (space savings 80.61%), 14.03MB (14715301) data
                     min         max         mean         sd        +/- sd
time for request:      938us     44.02ms     19.30ms     10.72ms    56.46%
time for connect:     4.18ms     32.98ms     16.95ms      6.62ms    66.12%
time to 1st byte:     7.93ms     51.74ms     36.77ms     12.10ms    51.61%
req/s           :       0.00      352.45        5.13       30.18    97.36%
[info] CPU 0.0% | Mem 0MiB

[run 2/3]
starting benchmark...
2.
.
18.
19.
6.
59.
23. Stopping all clients.
. Stopping all clients.Stopped all clients for thread #28

. Stopping all clients.
11. Stopping all clients.
35. Stopping all clients.
13. Stopping all clients.
34Main benchmark duration is over for thread #39. Stopping all clients.
29Main benchmark duration is over for thread #
. Stopping all clients.
643. Stopping all clients.


36
3438
29


. Stopping all clients.46
57. Stopping all clients.
57

. Stopping all clients.

60Stopped all clients for thread #61
. Stopping all clients.
58. Stopping all clients.

finished in 5.01s, 0.00 req/s, 0B/s
requests: 0 total, 0 started, 0 done, 0 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 0 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 0B (0) total, 0B (0) headers (space savings 0.00%), 0B (0) data
                     min         max         mean         sd        +/- sd
time for request:        0us         0us         0us         0us     0.00%
time for connect:        0us         0us         0us         0us     0.00%
time to 1st byte:        0us         0us         0us         0us     0.00%
req/s           :       0.00        0.00        0.00        0.00   100.00%
[info] CPU 0.0% | Mem 0MiB

[run 3/3]
starting benchmark...
26Main benchmark duration is started for thread #12.
.
.Warm-up phase is over for thread #53.

. Stopping all clients.
7. Stopping all clients.
26. Stopping all clients.



25. Stopping all clients.
21. Stopping all clients.
20. Stopping all clients.
4Main benchmark duration is over for thread #. Stopping all clients.Stopped all clients for thread #17
. Stopping all clients.20

36. Stopping all clients.
30. Stopping all clients.
27. Stopping all clients.
. Stopping all clients.

54. Stopping all clients.
40. Stopping all clients.
. Stopping all clients.44. Stopping all clients.

59Stopped all clients for thread #60
. Stopping all clients.



finished in 5.01s, 0.00 req/s, 0B/s
requests: 0 total, 0 started, 0 done, 0 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 0 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 0B (0) total, 0B (0) headers (space savings 0.00%), 0B (0) data
                     min         max         mean         sd        +/- sd
time for request:        0us         0us         0us         0us     0.00%
time for connect:        0us         0us         0us         0us     0.00%
time to 1st byte:        0us         0us         0us         0us     0.00%
req/s           :       0.00        0.00        0.00        0.00   100.00%
[info] CPU 0.0% | Mem 0MiB

=== Best: 262 req/s (CPU: 0.0%, Mem: 0MiB) ===
[info] saved results/static-h2/1024/true-async-server.json
httparena-bench-true-async-server
httparena-bench-true-async-server
[info] skip: true-async-server does not subscribe to baseline-h2c
[info] skip: true-async-server does not subscribe to json-h2c
[info] skip: true-async-server does not subscribe to baseline-h3
[info] skip: true-async-server does not subscribe to static-h3
[info] skip: true-async-server does not subscribe to gateway-64
[info] skip: true-async-server does not subscribe to gateway-h3
[info] skip: true-async-server does not subscribe to production-stack
[info] skip: true-async-server does not subscribe to unary-grpc
[info] skip: true-async-server does not subscribe to unary-grpc-tls
[info] skip: true-async-server does not subscribe to stream-grpc
[info] skip: true-async-server does not subscribe to stream-grpc-tls
[info] skip: true-async-server does not subscribe to echo-ws
[info] skip: true-async-server 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/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/baseline-h2-1024.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/baseline-h2-256.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/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/static-h2-1024.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/static-h2-256.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
[info] restoring loopback MTU to 65536
[info] restoring CPU governor → powersave

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.

1 participant