Skip to content

[true-async] Bump true-async-server to v0.6.3 (php-true-async 0.7.0-beta.4)#742

Merged
MDA2AV merged 2 commits into
MDA2AV:mainfrom
EdmondDantes:update-tas-v0.6.3-php-0.7.0-beta.4
May 19, 2026
Merged

[true-async] Bump true-async-server to v0.6.3 (php-true-async 0.7.0-beta.4)#742
MDA2AV merged 2 commits into
MDA2AV:mainfrom
EdmondDantes:update-tas-v0.6.3-php-0.7.0-beta.4

Conversation

@EdmondDantes
Copy link
Copy Markdown
Contributor

@EdmondDantes EdmondDantes commented May 19, 2026

Picks up true-async/server v0.6.3 inside trueasync/php-true-async 0.7.0-beta.4-php8.6.

Backend changes (v0.6.3)

  • Connection: close fix. Request header now produces Connection: close in the response (RFC 9112 §9.6). Removes the stream of read-errors gcannon / wrk runners were logging on the limited-conn / short-lived profiles.
  • One-shot brotli compress with BROTLI_PARAM_SIZE_HINT for buffered responses. Closes the brotli encode gap vs Swoole.
  • Server preference flipped to zstd > gzip > brotli > identity (interim until the brotli arena-allocator follow-up).
  • Worker death logging on unexpected pool_worker_handler exits.

Framework tuning

entry.php now sets setCompressionLevel(1) + setBrotliLevel(1).
Server-side C defaults stay production-typical (gzip 6, brotli 4); the bench config is opt-in.

Files

  • DockerfileFROM 0.7.0-beta.3FROM 0.7.0-beta.4
  • README.md — image tag mention 0.7.0-alpha.130.7.0-beta.4
  • entry.php+ setCompressionLevel(1) + setBrotliLevel(1)

Picks up `true-async/server` v0.6.3 inside `trueasync/php-true-async`
`0.7.0-beta.4-php8.6`. Notable backend changes:

- `Connection: close` request header now produces `Connection: close` in
  the response (RFC 9112 §9.6). Removes the stream of read-errors the
  gcannon / wrk runners were logging on the `limited-conn` profile —
  short-lived runs go from "every reply errored" to clean responses.
- One-shot brotli compress with `BROTLI_PARAM_SIZE_HINT` for buffered
  responses. Closes the brotli encode gap vs Swoole.
- Server preference order flipped to `zstd > gzip > brotli > identity`
  (interim until the brotli arena-allocator follow-up).
- Stderr logging on unexpected worker thread exits.

Plus the bench config tuning lives in `entry.php`:
`setCompressionLevel(1)` + `setBrotliLevel(1)`. Matches Swoole's
`http_compression_level = 1` default. Server-side C defaults stay
production-typical (gzip 6, brotli 4).

Local docker bench, `/json/40`, c=512, 5-run median, both with q=1:

| Accept-Encoding | TAS v0.6.3 | Swoole |
| --- | --- | --- |
| br             | 106k       | 94k    |
| gzip           | 94k        | 67k    |
| gzip, br       | 95k        | 95k    |

Files updated:
- `Dockerfile`         FROM 0.7.0-beta.3 → 0.7.0-beta.4
- `README.md`          image tag mention 0.7.0-alpha.13 → 0.7.0-beta.4
- `entry.php`          + setCompressionLevel(1) + setBrotliLevel(1)
@EdmondDantes EdmondDantes changed the title Bump true-async-server to v0.6.3 (php-true-async 0.7.0-beta.4) [true-async] Bump true-async-server to v0.6.3 (php-true-async 0.7.0-beta.4) May 19, 2026
@EdmondDantes
Copy link
Copy Markdown
Contributor Author

/benchmark -f true-async-server --save

@github-actions
Copy link
Copy Markdown
Contributor

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

@github-actions
Copy link
Copy Markdown
Contributor

Benchmark Results

Framework: true-async-server | Test: all tests

Test Conn RPS CPU Mem Δ RPS Δ Mem
baseline 512 2,099,793 6688.5% 183MiB -1.2% -0.5%
baseline 4096 2,211,805 5876.1% 220MiB +0.8% +2.3%
pipelined 512 8,280,453 6957.9% 151MiB +181.7% -3.2%
pipelined 4096 2,216,796 5978.2% 213MiB -2.2% +0.5%
json 4096 994,461 6192.3% 259MiB -1.0% ~0%
json-comp 512 450,996 5929.4% 174MiB +58.1% -15.9%
json-comp 4096 465,268 6160.9% 254MiB +58.4% -8.6%
json-comp 16384 441,610 6500.6% 492MiB +56.7% -1.6%
json-tls 4096 785,805 6190.9% 732MiB -0.1% +17.5%
upload 32 2,582 1828.2% 316MiB +0.3% +12.9%
upload 256 3,053 3693.2% 497MiB +0.8% -9.6%
api-4 256 57,681 396.6% 43MiB +3.4% -2.3%
api-16 1024 153,409 1583.0% 78MiB ~0% ~0%
static 1024 598,342 3208.1% 176MiB +0.5% +0.6%
static 4096 629,033 3225.2% 251MiB +1.6% +0.4%
static 6800 613,452 3235.8% 319MiB +2.2% +0.3%
async-db 1024 248,147 4893.0% 246MiB +0.9% +0.8%
fortunes 1024 88,940 6348.2% 222MiB +0.4% -3.1%
baseline-h2 256 4,578,020 7798.3% 227MiB -5.6% ~0%
baseline-h2 1024 3,010,562 7017.9% 504MiB -2.4% -0.4%
static-h2 256 1,030,151 6410.5% 650MiB -0.5% +24.5%
static-h2 1024 813,578 6551.0% 2.0GiB -0.7% -4.8%
baseline-h2c 256 5,709,735 7179.8% 244MiB -2.6% ~0%
baseline-h2c 1024 3,980,311 7160.2% 480MiB -0.6% +0.2%
baseline-h2c 4096 3,421,937 7118.9% 1.6GiB -7.6% +6.7%
json-h2c 1024 1,232,806 7261.0% 290MiB -0.6% -7.9%
json-h2c 4096 1,206,950 7254.3% 777MiB -1.2% -0.4%
Full log
27.
28.
.
Application protocol: h2c
Process Request Failure:2
Process Request Failure:2
55. Stopping all clients.
35
60. Stopping all clients.



59

12Main benchmark duration is over for thread #Stopped all clients for thread #14. Stopping all clients.32


. Stopping all clients.



finished in 5.09s, 1202533.20 req/s, 3.96GB/s
requests: 6012668 total, 6143738 started, 6012668 done, 6012666 succeeded, 2 failed, 2 errored, 0 timeout
status codes: 6012666 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 19.80GB (21263406859) total, 17.34MB (18181358) headers (space savings 95.35%), 19.69GB (21136714215) data
                     min         max         mean         sd        +/- sd
time for request:      885us    474.67ms    108.58ms     27.48ms    89.57%
time for connect:       17us      6.79ms      2.54ms      1.88ms    55.93%
time to 1st byte:     9.26ms    478.77ms    175.67ms     75.93ms    74.93%
req/s           :     221.64      441.41      293.61       40.42    72.34%
[info] CPU 6758.8% | Mem 702MiB

[run 2/3]
starting benchmark...



.
42Main benchmark duration is started for thread #.
42.Warm-up phase is over for thread #53.


.
53.Warm-up phase is over for thread #.Warm-up phase is over for thread #
48

.
47.
27Main benchmark duration is started for thread #Main benchmark duration is started for thread #358Main benchmark duration is started for thread #Main benchmark duration is started for thread #Warm-up phase is over for thread #Main benchmark duration is started for thread #..
4752.44.
.
.

.

..Main benchmark duration is started for thread #
49
.Warm-up phase is over for thread #34.
48Warm-up phase is over for thread #.
56Main benchmark duration is started for thread #Main benchmark duration is started for thread #25..

29.Main benchmark duration is started for thread #

56.

. Stopping all clients.

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

48. Stopping all clients.Stopped all clients for thread #. Stopping all clients.
12. Stopping all clients.
0Main benchmark duration is over for thread #

50Stopped all clients for thread #12
49. Stopping all clients.
. Stopping all clients.Main benchmark duration is over for thread #
56. Stopping all clients.

28. Stopping all clients.
. Stopping all clients.
62

finished in 5.09s, 1228675.40 req/s, 4.05GB/s
requests: 6143377 total, 6274449 started, 6143377 done, 6143377 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 6143377 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 20.23GB (21726747675) total, 17.71MB (18573491) headers (space savings 95.35%), 20.11GB (21597318966) data
                     min         max         mean         sd        +/- sd
time for request:     1.51ms    235.16ms    102.88ms     19.68ms    80.85%
time for connect:       17us      9.08ms      2.64ms      1.76ms    59.74%
time to 1st byte:     3.52ms    229.09ms     65.61ms     35.48ms    70.68%
req/s           :     223.83      422.36      299.86       35.17    66.46%
[info] CPU 7254.3% | Mem 777MiB

[run 3/3]
starting benchmark...
58.
.
Application protocol: Main benchmark duration is started for thread #25h2cWarm-up phase is over for thread #
.
59.
13.
.
43.
.

61..

.55.

5639..

8.
37.
.
53.
15.
50
63. Stopping all clients.

53
. Stopping all clients.Main benchmark duration is over for thread #43. Stopping all clients.
54. Stopping all clients.
60
. Stopping all clients.
8




. Stopping all clients.Stopped all clients for thread #
56Main benchmark duration is over for thread #Stopped all clients for thread #36
14Main benchmark duration is over for thread #3742
. Stopping all clients.Main benchmark duration is over for thread #Stopped all clients for thread #855


57



finished in 5.09s, 1220927.00 req/s, 4.02GB/s
requests: 6104635 total, 6235707 started, 6104635 done, 6104635 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 6104635 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 20.11GB (21591222940) total, 17.60MB (18457265) headers (space savings 95.35%), 19.99GB (21462607813) data
                     min         max         mean         sd        +/- sd
time for request:     2.26ms    314.16ms    104.11ms     22.47ms    84.50%
time for connect:       18us      6.91ms      2.96ms      2.04ms    53.61%
time to 1st byte:     7.61ms    315.28ms     83.26ms     57.06ms    78.42%
req/s           :     217.43      436.09      297.96       36.11    74.63%
[info] CPU 6979.3% | Mem 808MiB

=== Best: 1206950 req/s (CPU: 7254.3%, Mem: 777MiB) ===
[info] saved results/json-h2c/4096/true-async-server.json
httparena-bench-true-async-server
httparena-bench-true-async-server
[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/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/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/baseline-h2c-1024.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/baseline-h2c-256.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/baseline-h2c-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-h2c-1024.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/json-h2c-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/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

@MDA2AV MDA2AV merged commit e0a682e into MDA2AV:main May 19, 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.

2 participants