Skip to content

[python] FastPySGI: Add support static test#241

Merged
MDA2AV merged 4 commits intoMDA2AV:mainfrom
remittor-pr:fastpysgi-static
Mar 29, 2026
Merged

[python] FastPySGI: Add support static test#241
MDA2AV merged 4 commits intoMDA2AV:mainfrom
remittor-pr:fastpysgi-static

Conversation

@remittor
Copy link
Copy Markdown
Contributor

No description provided.

@remittor
Copy link
Copy Markdown
Contributor Author

/benchmark

@github-actions
Copy link
Copy Markdown

🚀 Benchmark run triggered for fastpysgi (all profiles). Results will be posted here when done.

@github-actions
Copy link
Copy Markdown

Benchmark Results

Framework: fastpysgi | Profile: all profiles

fastpysgi / baseline / 512c (p=1, r=0, cpu=64)
  Best: 1312382 req/s (CPU: 6579.7%, Mem: 406.3MiB) ===

fastpysgi / baseline / 4096c (p=1, r=0, cpu=64)
  Best: 1387928 req/s (CPU: 6341.5%, Mem: 927.0MiB) ===

fastpysgi / baseline / 16384c (p=1, r=0, cpu=64)
  Best: 1346147 req/s (CPU: 6293.8%, Mem: 2.6GiB) ===

fastpysgi / pipelined / 512c (p=16, r=0, cpu=unlimited)
  Best: 7597622 req/s (CPU: 7496.8%, Mem: 372.2MiB) ===

fastpysgi / pipelined / 4096c (p=16, r=0, cpu=unlimited)
  Best: 7724907 req/s (CPU: 7265.1%, Mem: 838.5MiB) ===

fastpysgi / pipelined / 16384c (p=16, r=0, cpu=unlimited)
  Best: 7535422 req/s (CPU: 6867.5%, Mem: 2.5GiB) ===

fastpysgi / limited-conn / 512c (p=1, r=10, cpu=unlimited)
  Best: 1004178 req/s (CPU: 6736.2%, Mem: 459.0MiB) ===

fastpysgi / limited-conn / 4096c (p=1, r=10, cpu=unlimited)
  Best: 1339911 req/s (CPU: 7776.2%, Mem: 1.1GiB) ===

fastpysgi / json / 4096c (p=1, r=0, cpu=unlimited)
  Best: 730391 req/s (CPU: 10219.6%, Mem: 1.1GiB) ===

fastpysgi / json / 16384c (p=1, r=0, cpu=unlimited)
  Best: 688797 req/s (CPU: 9664.0%, Mem: 4.3GiB) ===

fastpysgi / upload / 64c (p=1, r=0, cpu=unlimited)
  Best: 845 req/s (CPU: 4923.6%, Mem: 2.7GiB) ===

fastpysgi / upload / 256c (p=1, r=0, cpu=unlimited)
  Best: 649 req/s (CPU: 6800.7%, Mem: 6.4GiB) ===

fastpysgi / upload / 512c (p=1, r=0, cpu=unlimited)
  Best: 537 req/s (CPU: 7081.5%, Mem: 12.6GiB) ===

fastpysgi / compression / 4096c (p=1, r=0, cpu=unlimited)
  Best: 10798 req/s (CPU: 12324.3%, Mem: 925.1MiB) ===

fastpysgi / compression / 16384c (p=1, r=0, cpu=unlimited)
  Best: 10725 req/s (CPU: 11844.1%, Mem: 954.6MiB) ===

fastpysgi / noisy / 512c (p=1, r=0, cpu=unlimited)
  Best: 1281699 req/s (CPU: 7518.5%, Mem: 384.4MiB) ===

fastpysgi / noisy / 4096c (p=1, r=0, cpu=unlimited)
  Best: 1554624 req/s (CPU: 8504.2%, Mem: 1007.0MiB) ===

fastpysgi / noisy / 16384c (p=1, r=0, cpu=unlimited)
  Best: 1470180 req/s (CPU: 8118.6%, Mem: 3.0GiB) ===

fastpysgi / mixed / 4096c (p=1, r=5, cpu=unlimited)
  Best: 44261 req/s (CPU: 11684.3%, Mem: 1.2GiB) ===

fastpysgi / mixed / 16384c (p=1, r=5, cpu=unlimited)
  Best: 41358 req/s (CPU: 10748.6%, Mem: 1.3GiB) ===

fastpysgi / static / 4096c (p=1, r=0, cpu=unlimited)
  Best: 1376561 req/s (CPU: 6530.2%, Mem: 927.5MiB) ===

fastpysgi / static / 16384c (p=1, r=0, cpu=unlimited)
  Best: 1068017 req/s (CPU: 6686.2%, Mem: 2.6GiB) ===

fastpysgi / async-db / 512c (p=1, r=0, cpu=unlimited)
  Best: 75235 req/s (CPU: 6290.7%, Mem: 978.1MiB) ===

fastpysgi / async-db / 1024c (p=1, r=0, cpu=unlimited)
  Best: 76136 req/s (CPU: 6428.1%, Mem: 1012.0MiB) ===
Full log
    Latency   10.66ms   8.72ms   19.50ms   36.60ms   67.80ms

  5356216 requests in 5.00s, 5340088 responses
  Throughput: 1.07M req/s
  Bandwidth:  14.91GB/s
  Status codes: 2xx=5340088, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 5340088 / 5340088 responses (100.0%)
  Per-template: 284172,294966,281987,271045,269370,281766,279745,256257,240396,260263,288344,285891,245973,238611,273599,277662,213084,252510,256078,288369
  Per-template-ok: 284172,294966,281987,271045,269370,281766,279745,256257,240396,260263,288344,285891,245973,238611,273599,277662,213084,252510,256078,288369
  CPU: 6686.2% | Mem: 2.6GiB

[run 3/3]
gcannon — io_uring HTTP load generator
  Target:    localhost:8080/
  Threads:   64
  Conns:     16384 (256/thread)
  Pipeline:  1
  Req/conn:  unlimited (keep-alive)
  Templates: 20
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   10.91ms   9.42ms   19.70ms   35.60ms   54.20ms

  5320190 requests in 5.01s, 5304062 responses
  Throughput: 1.06M req/s
  Bandwidth:  14.75GB/s
  Status codes: 2xx=5304062, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 5304062 / 5304062 responses (100.0%)
  Per-template: 279348,276910,286765,276630,270689,283919,269226,254292,238859,268065,287009,285938,245420,239443,274884,275054,205180,250758,250855,284818
  Per-template-ok: 279348,276910,286765,276630,270689,283919,269226,254292,238859,268065,287009,285938,245420,239443,274884,275054,205180,250758,250855,284818
  CPU: 6469.5% | Mem: 2.6GiB

=== Best: 1068017 req/s (CPU: 6686.2%, Mem: 2.6GiB) ===
  Input BW: 58.06MB/s (avg template: 57 bytes)
[dry-run] Results not saved (use --save to persist)
httparena-bench-fastpysgi
httparena-bench-fastpysgi

==============================================
=== fastpysgi / async-db / 512c (p=1, r=0, cpu=unlimited) ===
==============================================
afc2a18b6ee178a981e05ce67c1fe89da98e3fe8bc1f8411b852a1c268c32c6a
[wait] Waiting for server...
[ready] Server is up

[run 1/3]
gcannon — io_uring HTTP load generator
  Target:    localhost:8080/async-db?min=10&max=50
  Threads:   64
  Conns:     512 (8/thread)
  Pipeline:  1
  Req/conn:  unlimited (keep-alive)
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   6.08ms   5.13ms   11.10ms   19.70ms   26.10ms

  375027 requests in 5.00s, 375027 responses
  Throughput: 74.97K req/s
  Bandwidth:  594.54MB/s
  Status codes: 2xx=375027, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 375026 / 375027 responses (100.0%)
  CPU: 6143.2% | Mem: 946.6MiB

[run 2/3]
gcannon — io_uring HTTP load generator
  Target:    localhost:8080/async-db?min=10&max=50
  Threads:   64
  Conns:     512 (8/thread)
  Pipeline:  1
  Req/conn:  unlimited (keep-alive)
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   6.02ms   5.31ms   11.00ms   19.10ms   25.30ms

  376176 requests in 5.00s, 376176 responses
  Throughput: 75.20K req/s
  Bandwidth:  596.40MB/s
  Status codes: 2xx=376176, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 376174 / 376176 responses (100.0%)
  CPU: 6290.7% | Mem: 978.1MiB

[run 3/3]
gcannon — io_uring HTTP load generator
  Target:    localhost:8080/async-db?min=10&max=50
  Threads:   64
  Conns:     512 (8/thread)
  Pipeline:  1
  Req/conn:  unlimited (keep-alive)
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   6.06ms   5.34ms   11.20ms   18.80ms   26.30ms

  374003 requests in 5.00s, 374003 responses
  Throughput: 74.77K req/s
  Bandwidth:  592.95MB/s
  Status codes: 2xx=374003, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 374002 / 374003 responses (100.0%)
  CPU: 6174.3% | Mem: 988.9MiB

=== Best: 75235 req/s (CPU: 6290.7%, Mem: 978.1MiB) ===
[dry-run] Results not saved (use --save to persist)
httparena-bench-fastpysgi
httparena-bench-fastpysgi

==============================================
=== fastpysgi / async-db / 1024c (p=1, r=0, cpu=unlimited) ===
==============================================
c89ec28bbe563f5927b3af2744f20a2c821cf9c226af9509b4aeaaae4d142d9f
[wait] Waiting for server...
[ready] Server is up

[run 1/3]
gcannon — io_uring HTTP load generator
  Target:    localhost:8080/async-db?min=10&max=50
  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   12.85ms   11.80ms   20.60ms   32.30ms   107.00ms

  377718 requests in 5.00s, 377718 responses
  Throughput: 75.51K req/s
  Bandwidth:  598.84MB/s
  Status codes: 2xx=377718, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 377715 / 377718 responses (100.0%)
  CPU: 6210.4% | Mem: 1.0GiB

[run 2/3]
gcannon — io_uring HTTP load generator
  Target:    localhost:8080/async-db?min=10&max=50
  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   12.67ms   11.70ms   20.60ms   31.60ms   43.10ms

  380681 requests in 5.00s, 380681 responses
  Throughput: 76.10K req/s
  Bandwidth:  603.54MB/s
  Status codes: 2xx=380681, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 380677 / 380681 responses (100.0%)
  CPU: 6428.1% | Mem: 1012.0MiB

[run 3/3]
gcannon — io_uring HTTP load generator
  Target:    localhost:8080/async-db?min=10&max=50
  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   12.68ms   11.80ms   20.90ms   32.60ms   45.20ms

  380450 requests in 5.00s, 380450 responses
  Throughput: 76.05K req/s
  Bandwidth:  603.13MB/s
  Status codes: 2xx=380450, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 380449 / 380450 responses (100.0%)
  CPU: 6388.3% | Mem: 1012.0MiB

=== Best: 76136 req/s (CPU: 6428.1%, Mem: 1012.0MiB) ===
[dry-run] Results not saved (use --save to persist)
httparena-bench-fastpysgi
httparena-bench-fastpysgi
[skip] fastpysgi does not subscribe to baseline-h2
[skip] fastpysgi does not subscribe to static-h2
[skip] fastpysgi does not subscribe to baseline-h3
[skip] fastpysgi does not subscribe to static-h3
[skip] fastpysgi does not subscribe to unary-grpc
[skip] fastpysgi does not subscribe to unary-grpc-tls
[skip] fastpysgi does not subscribe to echo-ws
httparena-postgres
httparena-postgres
[restore] Restoring CPU governor to performance...

@remittor
Copy link
Copy Markdown
Contributor Author

@BennyFranciscus , tell me how to run a benchmark for framework fastpysgi-asgi

@MDA2AV
Copy link
Copy Markdown
Owner

MDA2AV commented Mar 29, 2026

running https://github.com/MDA2AV/HttpArena/actions/runs/23705360303 - triggered manually

results will be posted when it finished (I think)

@github-actions
Copy link
Copy Markdown

Benchmark Results

Framework: fastpysgi-asgi | Profile: all profiles

fastpysgi-asgi / baseline / 512c (p=1, r=0, cpu=64)
  Best: 589166 req/s (CPU: 6415.2%, Mem: 537.3MiB) ===

fastpysgi-asgi / baseline / 4096c (p=1, r=0, cpu=64)
  Best: 817889 req/s (CPU: 6424.9%, Mem: 1.0GiB) ===

fastpysgi-asgi / baseline / 16384c (p=1, r=0, cpu=64)
  Best: 855518 req/s (CPU: 6209.3%, Mem: 2.9GiB) ===

fastpysgi-asgi / pipelined / 512c (p=16, r=0, cpu=unlimited)
  Best: 0 req/s (CPU: 0%, Mem: 0MiB) ===
Full log
  Per-template-ok: 1821170,1121603,1121732
  CPU: 6424.5% | Mem: 971.7MiB

[run 3/3]
gcannon — io_uring HTTP load generator
  Target:    localhost:8080/
  Threads:   64
  Conns:     4096 (64/thread)
  Pipeline:  1
  Req/conn:  unlimited (keep-alive)
  Templates: 3
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   5.06ms   2.64ms   7.90ms   41.30ms   77.90ms

  4046491 requests in 5.00s, 4045703 responses
  Throughput: 808.64K req/s
  Bandwidth:  127.25MB/s
  Status codes: 2xx=4045703, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 4045691 / 4045703 responses (100.0%)
  Per-template: 1810377,1120518,1114796
  Per-template-ok: 1810377,1120518,1114796
  CPU: 6291.0% | Mem: 971.0MiB

=== Best: 817889 req/s (CPU: 6424.9%, Mem: 1.0GiB) ===
  Input BW: 63.18MB/s (avg template: 81 bytes)
[dry-run] Results not saved (use --save to persist)
httparena-bench-fastpysgi-asgi
httparena-bench-fastpysgi-asgi

==============================================
=== fastpysgi-asgi / baseline / 16384c (p=1, r=0, cpu=64) ===
==============================================
cbb74b15ff379f499cd8bbcf640f5c4519b4240b63ceb730705e5f109e996458
[wait] Waiting for server...
[ready] Server is up

[run 1/3]
gcannon — io_uring HTTP load generator
  Target:    localhost:8080/
  Threads:   64
  Conns:     16384 (256/thread)
  Pipeline:  1
  Req/conn:  unlimited (keep-alive)
  Templates: 3
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   18.51ms   10.00ms   45.50ms   106.10ms   164.60ms

  4293976 requests in 5.00s, 4277592 responses
  Throughput: 855.18K req/s
  Bandwidth:  134.57MB/s
  Status codes: 2xx=4277592, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 4277592 / 4277592 responses (100.0%)
  Per-template: 1910866,1183554,1183172
  Per-template-ok: 1910866,1183554,1183172
  CPU: 6209.3% | Mem: 2.9GiB

[run 2/3]
gcannon — io_uring HTTP load generator
  Target:    localhost:8080/
  Threads:   64
  Conns:     16384 (256/thread)
  Pipeline:  1
  Req/conn:  unlimited (keep-alive)
  Templates: 3
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   18.55ms   10.10ms   45.70ms   106.60ms   166.60ms

  4285949 requests in 5.00s, 4269565 responses
  Throughput: 853.58K req/s
  Bandwidth:  134.32MB/s
  Status codes: 2xx=4269565, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 4269565 / 4269565 responses (100.0%)
  Per-template: 1919073,1177611,1172881
  Per-template-ok: 1919073,1177611,1172881
  CPU: 6421.0% | Mem: 2.8GiB

[run 3/3]
gcannon — io_uring HTTP load generator
  Target:    localhost:8080/
  Threads:   64
  Conns:     16384 (256/thread)
  Pipeline:  1
  Req/conn:  unlimited (keep-alive)
  Templates: 3
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   18.69ms   10.10ms   46.00ms   106.10ms   167.80ms

  4257290 requests in 5.01s, 4240906 responses
  Throughput: 846.68K req/s
  Bandwidth:  133.23MB/s
  Status codes: 2xx=4240906, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 4240906 / 4240906 responses (100.0%)
  Per-template: 1906381,1167017,1167508
  Per-template-ok: 1906381,1167017,1167508
  CPU: 6220.0% | Mem: 2.9GiB

=== Best: 855518 req/s (CPU: 6209.3%, Mem: 2.9GiB) ===
  Input BW: 66.09MB/s (avg template: 81 bytes)
[dry-run] Results not saved (use --save to persist)
httparena-bench-fastpysgi-asgi
httparena-bench-fastpysgi-asgi

==============================================
=== fastpysgi-asgi / pipelined / 512c (p=16, r=0, cpu=unlimited) ===
==============================================
7d39b507a9eb54cbfbdc18a4d7e9c7959dcbbd5cf1b2f55c9b96276fd5ccfcc7
[wait] Waiting for server...
[ready] Server is up

[run 1/3]
gcannon — io_uring HTTP load generator
  Target:    localhost:8080/pipeline
  Threads:   64
  Conns:     512 (8/thread)
  Pipeline:  16
  Req/conn:  unlimited (keep-alive)
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency      0us      0us      0us      0us      0us

  15616 requests in 5.00s, 0 responses
  Throughput: 0 req/s
  Bandwidth:  0B/s
  Status codes: 2xx=0, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 0 / 0 responses (0.0%)
  Reconnects: 4516520
  Errors: connect 4515032, read 0, timeout 0
  CPU: 0% | Mem: 0MiB

[run 2/3]
gcannon — io_uring HTTP load generator
  Target:    localhost:8080/pipeline
  Threads:   64
  Conns:     512 (8/thread)
  Pipeline:  16
  Req/conn:  unlimited (keep-alive)
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency      0us      0us      0us      0us      0us

  0 requests in 5.00s, 0 responses
  Throughput: 0 req/s
  Bandwidth:  0B/s
  Status codes: 2xx=0, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 0 / 0 responses (0.0%)
  Reconnects: 4645975
  Errors: connect 4645959, read 0, timeout 0
  CPU: 0% | Mem: 0MiB

[run 3/3]
gcannon — io_uring HTTP load generator
  Target:    localhost:8080/pipeline
  Threads:   64
  Conns:     512 (8/thread)
  Pipeline:  16
  Req/conn:  unlimited (keep-alive)
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency      0us      0us      0us      0us      0us

  0 requests in 5.00s, 0 responses
  Throughput: 0 req/s
  Bandwidth:  0B/s
  Status codes: 2xx=0, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 0 / 0 responses (0.0%)
  Reconnects: 4677741
  Errors: connect 4677724, read 0, timeout 0
  CPU: 0% | Mem: 0MiB

=== Best: 0 req/s (CPU: 0%, Mem: 0MiB) ===
httparena-bench-fastpysgi-asgi
httparena-bench-fastpysgi-asgi
httparena-postgres
httparena-postgres
[restore] Restoring CPU governor to performance...

@github-actions
Copy link
Copy Markdown

Benchmark Results

Framework: fastpysgi-asgi | Profile: all profiles

fastpysgi-asgi / baseline / 512c (p=1, r=0, cpu=64)
  Best: 576667 req/s (CPU: 6529.0%, Mem: 518.0MiB) ===

fastpysgi-asgi / baseline / 4096c (p=1, r=0, cpu=64)
  Best: 809875 req/s (CPU: 6427.0%, Mem: 1.0GiB) ===

fastpysgi-asgi / baseline / 16384c (p=1, r=0, cpu=64)
  Best: 842924 req/s (CPU: 6319.7%, Mem: 2.9GiB) ===

fastpysgi-asgi / pipelined / 512c (p=16, r=0, cpu=unlimited)
  Best: 0 req/s (CPU: 0%, Mem: 0MiB) ===
Full log
  Per-template-ok: 1799872,1115866,1125521
  CPU: 6407.4% | Mem: 967.3MiB

[run 3/3]
gcannon — io_uring HTTP load generator
  Target:    localhost:8080/
  Threads:   64
  Conns:     4096 (64/thread)
  Pipeline:  1
  Req/conn:  unlimited (keep-alive)
  Templates: 3
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   5.08ms   2.64ms   7.86ms   41.10ms   78.40ms

  4027805 requests in 5.00s, 4026401 responses
  Throughput: 804.87K req/s
  Bandwidth:  126.65MB/s
  Status codes: 2xx=4026401, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 4026399 / 4026401 responses (100.0%)
  Per-template: 1789777,1121441,1115181
  Per-template-ok: 1789777,1121441,1115181
  CPU: 6390.4% | Mem: 978.8MiB

=== Best: 809875 req/s (CPU: 6427.0%, Mem: 1.0GiB) ===
  Input BW: 62.56MB/s (avg template: 81 bytes)
[dry-run] Results not saved (use --save to persist)
httparena-bench-fastpysgi-asgi
httparena-bench-fastpysgi-asgi

==============================================
=== fastpysgi-asgi / baseline / 16384c (p=1, r=0, cpu=64) ===
==============================================
a0954fcdb7e6fc76ae2c36d66d1d6cf2d2423d0555c42eb9942aa3cd8432af2e
[wait] Waiting for server...
[ready] Server is up

[run 1/3]
gcannon — io_uring HTTP load generator
  Target:    localhost:8080/
  Threads:   64
  Conns:     16384 (256/thread)
  Pipeline:  1
  Req/conn:  unlimited (keep-alive)
  Templates: 3
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   18.86ms   10.30ms   45.90ms   106.00ms   162.10ms

  4231005 requests in 5.00s, 4214621 responses
  Throughput: 842.38K req/s
  Bandwidth:  132.55MB/s
  Status codes: 2xx=4214621, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 4214621 / 4214621 responses (100.0%)
  Per-template: 1880398,1164899,1169324
  Per-template-ok: 1880398,1164899,1169324
  CPU: 6319.7% | Mem: 2.9GiB

[run 2/3]
gcannon — io_uring HTTP load generator
  Target:    localhost:8080/
  Threads:   64
  Conns:     16384 (256/thread)
  Pipeline:  1
  Req/conn:  unlimited (keep-alive)
  Templates: 3
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   19.01ms   10.30ms   46.10ms   106.40ms   163.40ms

  4175992 requests in 5.00s, 4159608 responses
  Throughput: 831.55K req/s
  Bandwidth:  130.85MB/s
  Status codes: 2xx=4159608, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 4159608 / 4159608 responses (100.0%)
  Per-template: 1864909,1148260,1146439
  Per-template-ok: 1864909,1148260,1146439
  CPU: 6426.1% | Mem: 2.8GiB

[run 3/3]
gcannon — io_uring HTTP load generator
  Target:    localhost:8080/
  Threads:   64
  Conns:     16384 (256/thread)
  Pipeline:  1
  Req/conn:  unlimited (keep-alive)
  Templates: 3
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   18.81ms   10.30ms   46.00ms   107.50ms   166.00ms

  4216973 requests in 5.00s, 4200589 responses
  Throughput: 839.67K req/s
  Bandwidth:  132.13MB/s
  Status codes: 2xx=4200589, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 4200589 / 4200589 responses (100.0%)
  Per-template: 1885285,1157856,1157448
  Per-template-ok: 1885285,1157856,1157448
  CPU: 6290.9% | Mem: 2.9GiB

=== Best: 842924 req/s (CPU: 6319.7%, Mem: 2.9GiB) ===
  Input BW: 65.11MB/s (avg template: 81 bytes)
[dry-run] Results not saved (use --save to persist)
httparena-bench-fastpysgi-asgi
httparena-bench-fastpysgi-asgi

==============================================
=== fastpysgi-asgi / pipelined / 512c (p=16, r=0, cpu=unlimited) ===
==============================================
b10d9c94eaf148501cc40df4b115862f6ff67d2b03d06ddc32a6a5ed8a6e6e86
[wait] Waiting for server...
[ready] Server is up

[run 1/3]
gcannon — io_uring HTTP load generator
  Target:    localhost:8080/pipeline
  Threads:   64
  Conns:     512 (8/thread)
  Pipeline:  16
  Req/conn:  unlimited (keep-alive)
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency      0us      0us      0us      0us      0us

  16032 requests in 5.00s, 0 responses
  Throughput: 0 req/s
  Bandwidth:  0B/s
  Status codes: 2xx=0, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 0 / 0 responses (0.0%)
  Reconnects: 4560036
  Errors: connect 4558522, read 0, timeout 0
  CPU: 0% | Mem: 0MiB

[run 2/3]
gcannon — io_uring HTTP load generator
  Target:    localhost:8080/pipeline
  Threads:   64
  Conns:     512 (8/thread)
  Pipeline:  16
  Req/conn:  unlimited (keep-alive)
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency      0us      0us      0us      0us      0us

  0 requests in 5.00s, 0 responses
  Throughput: 0 req/s
  Bandwidth:  0B/s
  Status codes: 2xx=0, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 0 / 0 responses (0.0%)
  Reconnects: 4698119
  Errors: connect 4698093, read 0, timeout 0
  CPU: 0% | Mem: 0MiB

[run 3/3]
gcannon — io_uring HTTP load generator
  Target:    localhost:8080/pipeline
  Threads:   64
  Conns:     512 (8/thread)
  Pipeline:  16
  Req/conn:  unlimited (keep-alive)
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency      0us      0us      0us      0us      0us

  0 requests in 5.00s, 0 responses
  Throughput: 0 req/s
  Bandwidth:  0B/s
  Status codes: 2xx=0, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 0 / 0 responses (0.0%)
  Reconnects: 4697428
  Errors: connect 4697411, read 0, timeout 0
  CPU: 0% | Mem: 0MiB

=== Best: 0 req/s (CPU: 0%, Mem: 0MiB) ===
httparena-bench-fastpysgi-asgi
httparena-bench-fastpysgi-asgi
httparena-postgres
httparena-postgres
[restore] Restoring CPU governor to performance...

@BennyFranciscus
Copy link
Copy Markdown
Collaborator

@remittor Looks like MDA2AV already got it triggered for you — the fastpysgi-asgi results are in above. 589K-818K req/s baseline, solid numbers for an ASGI server!

@remittor
Copy link
Copy Markdown
Contributor Author

the fastpysgi-asgi results are in above

Why are there only the results of two tests?

@MDA2AV
Copy link
Copy Markdown
Owner

MDA2AV commented Mar 29, 2026

the fastpysgi-asgi results are in above

Why are there only the results of two tests?

pipelined seems to have failed, 0 req/s so the other tests didnt run, maybe app crashed

@remittor
Copy link
Copy Markdown
Contributor Author

/benchmark

@github-actions
Copy link
Copy Markdown

🚀 Benchmark run triggered for fastpysgi (all profiles). Results will be posted here when done.

@MDA2AV
Copy link
Copy Markdown
Owner

MDA2AV commented Mar 29, 2026

let me trigger for asgi

@remittor
Copy link
Copy Markdown
Contributor Author

pipelined seems to have failed, 0 req/s so the other tests didnt run, maybe app crashed

I haven't done any pipeline support for ASGI yet.
Maybe I'll do this someday.

@BennyFranciscus
Copy link
Copy Markdown
Collaborator

Makes total sense — pipelining is a whole different beast on the ASGI side. The baseline numbers for fastpysgi-asgi are honestly still really impressive though, ~850K req/s at 16K connections for a Python ASGI server is wild.

Good news is if pipelining isn't supported, we could probably add a flag to skip that profile so it doesn't block the rest of the test suite from running. That way you'd still get json, static, noisy, etc. results for the ASGI variant too.

@github-actions
Copy link
Copy Markdown

Benchmark Results

Framework: fastpysgi-asgi | Profile: all profiles

fastpysgi-asgi / baseline / 512c (p=1, r=0, cpu=64)
  Best: 927017 req/s (CPU: 6638.5%, Mem: 318.6MiB) ===

fastpysgi-asgi / baseline / 4096c (p=1, r=0, cpu=64)
  Best: 1182625 req/s (CPU: 6623.0%, Mem: 813.3MiB) ===

fastpysgi-asgi / baseline / 16384c (p=1, r=0, cpu=64)
  Best: 1154708 req/s (CPU: 6587.5%, Mem: 3.3GiB) ===

fastpysgi-asgi / limited-conn / 512c (p=1, r=10, cpu=unlimited)
  Best: 679984 req/s (CPU: 6166.9%, Mem: 386.5MiB) ===

fastpysgi-asgi / limited-conn / 4096c (p=1, r=10, cpu=unlimited)
  Best: 939889 req/s (CPU: 6426.2%, Mem: 1.0GiB) ===

fastpysgi-asgi / json / 4096c (p=1, r=0, cpu=unlimited)
  Best: 589790 req/s (CPU: 6496.8%, Mem: 847.1MiB) ===

fastpysgi-asgi / json / 16384c (p=1, r=0, cpu=unlimited)
  Best: 563790 req/s (CPU: 6563.6%, Mem: 3.7GiB) ===

fastpysgi-asgi / upload / 64c (p=1, r=0, cpu=unlimited)
  Best: 885 req/s (CPU: 4453.3%, Mem: 1.8GiB) ===

fastpysgi-asgi / upload / 256c (p=1, r=0, cpu=unlimited)
  Best: 602 req/s (CPU: 5717.1%, Mem: 6.5GiB) ===

fastpysgi-asgi / upload / 512c (p=1, r=0, cpu=unlimited)
  Best: 512 req/s (CPU: 6037.5%, Mem: 12.9GiB) ===

fastpysgi-asgi / compression / 4096c (p=1, r=0, cpu=unlimited)
  Best: 8130 req/s (CPU: 6419.8%, Mem: 776.8MiB) ===

fastpysgi-asgi / compression / 16384c (p=1, r=0, cpu=unlimited)
  Best: 8120 req/s (CPU: 6284.4%, Mem: 899.4MiB) ===

fastpysgi-asgi / noisy / 512c (p=1, r=0, cpu=unlimited)
  Best: 698669 req/s (CPU: 6337.9%, Mem: 319.7MiB) ===

fastpysgi-asgi / noisy / 4096c (p=1, r=0, cpu=unlimited)
  Best: 880676 req/s (CPU: 6192.9%, Mem: 915.0MiB) ===

fastpysgi-asgi / noisy / 16384c (p=1, r=0, cpu=unlimited)
  Best: 29010 req/s (CPU: 579.1%, Mem: 244.1MiB) ===

fastpysgi-asgi / mixed / 4096c (p=1, r=5, cpu=unlimited)
  Best: 33568 req/s (CPU: 6406.9%, Mem: 1.1GiB) ===

fastpysgi-asgi / mixed / 16384c (p=1, r=5, cpu=unlimited)
  Best: 32801 req/s (CPU: 6384.5%, Mem: 1.2GiB) ===

fastpysgi-asgi / static / 4096c (p=1, r=0, cpu=unlimited)
  Best: 1221409 req/s (CPU: 6433.3%, Mem: 850.8MiB) ===

fastpysgi-asgi / static / 16384c (p=1, r=0, cpu=unlimited)
  Best: 968223 req/s (CPU: 6258.3%, Mem: 2.8GiB) ===

fastpysgi-asgi / async-db / 512c (p=1, r=0, cpu=unlimited)
  Best: 34086 req/s (CPU: 2145.6%, Mem: 877.3MiB) ===

fastpysgi-asgi / async-db / 1024c (p=1, r=0, cpu=unlimited)
  Best: 7246 req/s (CPU: 828.7%, Mem: 1.2GiB) ===
Full log
    Latency   14.80ms   14.50ms   17.20ms   20.20ms   200.50ms

  4830828 requests in 5.00s, 4814700 responses
  Throughput: 962.38K req/s
  Bandwidth:  14.25GB/s
  Status codes: 2xx=4814700, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 4814700 / 4814700 responses (100.0%)
  Per-template: 251732,248005,248049,237346,238108,251119,246787,231859,230005,238669,245932,247265,234936,229821,245395,246157,227608,231461,233121,251325
  Per-template-ok: 251732,248005,248049,237346,238108,251119,246787,231859,230005,238669,245932,247265,234936,229821,245395,246157,227608,231461,233121,251325
  CPU: 6493.2% | Mem: 2.8GiB

[run 3/3]
gcannon — io_uring HTTP load generator
  Target:    localhost:8080/
  Threads:   64
  Conns:     16384 (256/thread)
  Pipeline:  1
  Req/conn:  unlimited (keep-alive)
  Templates: 20
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   14.86ms   14.60ms   17.20ms   20.10ms   181.30ms

  4857503 requests in 5.00s, 4841119 responses
  Throughput: 967.79K req/s
  Bandwidth:  14.31GB/s
  Status codes: 2xx=4841119, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 4841119 / 4841119 responses (100.0%)
  Per-template: 249622,248325,253720,241377,242415,253789,240305,234724,230849,233306,250465,251616,236167,234709,245628,248519,226231,232605,237463,249284
  Per-template-ok: 249622,248325,253720,241377,242415,253789,240305,234724,230849,233306,250465,251616,236167,234709,245628,248519,226231,232605,237463,249284
  CPU: 6258.3% | Mem: 2.8GiB

=== Best: 968223 req/s (CPU: 6258.3%, Mem: 2.8GiB) ===
  Input BW: 52.63MB/s (avg template: 57 bytes)
[dry-run] Results not saved (use --save to persist)
httparena-bench-fastpysgi-asgi
httparena-bench-fastpysgi-asgi

==============================================
=== fastpysgi-asgi / async-db / 512c (p=1, r=0, cpu=unlimited) ===
==============================================
c91776b91d683b1a389333fc5a8b4fc06bc596c22ccbecad4c915b413370df17
[wait] Waiting for server...
[ready] Server is up

[run 1/3]
gcannon — io_uring HTTP load generator
  Target:    localhost:8080/async-db?min=10&max=50
  Threads:   64
  Conns:     512 (8/thread)
  Pipeline:  1
  Req/conn:  unlimited (keep-alive)
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   2.67ms   1.18ms   2.12ms   19.60ms   288.50ms

  170432 requests in 5.00s, 170432 responses
  Throughput: 34.07K req/s
  Bandwidth:  257.88MB/s
  Status codes: 2xx=170432, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 170432 / 170432 responses (100.0%)
  CPU: 2145.6% | Mem: 877.3MiB

[run 2/3]
gcannon — io_uring HTTP load generator
  Target:    localhost:8080/async-db?min=10&max=50
  Threads:   64
  Conns:     512 (8/thread)
  Pipeline:  1
  Req/conn:  unlimited (keep-alive)
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   6.25ms   1.65ms   2.87ms   64.20ms   121.80ms

  114022 requests in 5.00s, 114022 responses
  Throughput: 22.80K req/s
  Bandwidth:  167.32MB/s
  Status codes: 2xx=114022, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 114021 / 114022 responses (100.0%)
  CPU: 1237.4% | Mem: 1.1GiB

[run 3/3]
gcannon — io_uring HTTP load generator
  Target:    localhost:8080/async-db?min=10&max=50
  Threads:   64
  Conns:     512 (8/thread)
  Pipeline:  1
  Req/conn:  unlimited (keep-alive)
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   7.02ms   1.63ms   3.80ms   67.30ms   124.50ms

  100545 requests in 5.00s, 100545 responses
  Throughput: 20.10K req/s
  Bandwidth:  145.89MB/s
  Status codes: 2xx=100545, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 100543 / 100545 responses (100.0%)
  CPU: 1689.6% | Mem: 1.2GiB

=== Best: 34086 req/s (CPU: 2145.6%, Mem: 877.3MiB) ===
[dry-run] Results not saved (use --save to persist)
httparena-bench-fastpysgi-asgi
httparena-bench-fastpysgi-asgi

==============================================
=== fastpysgi-asgi / async-db / 1024c (p=1, r=0, cpu=unlimited) ===
==============================================
b566d6c46eb6d4928f04b0976956cc7916aaf62eaa5f7e42639f6e75c332f740
[wait] Waiting for server...
[ready] Server is up

[run 1/3]
gcannon — io_uring HTTP load generator
  Target:    localhost:8080/async-db?min=10&max=50
  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   119.71ms   1.87ms   469.30ms   605.20ms   757.00ms

  36232 requests in 5.00s, 36232 responses
  Throughput: 7.24K req/s
  Bandwidth:  43.55MB/s
  Status codes: 2xx=36232, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 36231 / 36232 responses (100.0%)
  CPU: 828.7% | Mem: 1.2GiB

[run 2/3]
gcannon — io_uring HTTP load generator
  Target:    localhost:8080/async-db?min=10&max=50
  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   187.21ms   1.96ms   538.10ms   544.70ms   557.90ms

  26010 requests in 5.00s, 26010 responses
  Throughput: 5.20K req/s
  Bandwidth:  26.62MB/s
  Status codes: 2xx=26010, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 26010 / 26010 responses (100.0%)
  CPU: 521.7% | Mem: 1.4GiB

[run 3/3]
gcannon — io_uring HTTP load generator
  Target:    localhost:8080/async-db?min=10&max=50
  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   188.03ms   1.93ms   542.60ms   555.80ms   563.30ms

  25935 requests in 5.00s, 25935 responses
  Throughput: 5.18K req/s
  Bandwidth:  26.65MB/s
  Status codes: 2xx=25935, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 25935 / 25935 responses (100.0%)
  CPU: 549.6% | Mem: 1.5GiB

=== Best: 7246 req/s (CPU: 828.7%, Mem: 1.2GiB) ===
[dry-run] Results not saved (use --save to persist)
httparena-bench-fastpysgi-asgi
httparena-bench-fastpysgi-asgi
[skip] fastpysgi-asgi does not subscribe to baseline-h2
[skip] fastpysgi-asgi does not subscribe to static-h2
[skip] fastpysgi-asgi does not subscribe to baseline-h3
[skip] fastpysgi-asgi does not subscribe to static-h3
[skip] fastpysgi-asgi does not subscribe to unary-grpc
[skip] fastpysgi-asgi does not subscribe to unary-grpc-tls
[skip] fastpysgi-asgi does not subscribe to echo-ws
httparena-postgres
httparena-postgres
[restore] Restoring CPU governor to performance...

@remittor
Copy link
Copy Markdown
Contributor Author

/benchmark

@github-actions
Copy link
Copy Markdown

🚀 Benchmark run triggered for fastpysgi (all profiles). Results will be posted here when done.

@github-actions
Copy link
Copy Markdown

Benchmark Results

Framework: fastpysgi | Profile: all profiles

fastpysgi / baseline / 512c (p=1, r=0, cpu=64)
  Best: 1297067 req/s (CPU: 6506.1%, Mem: 402.8MiB) ===

fastpysgi / baseline / 4096c (p=1, r=0, cpu=64)
  Best: 1362518 req/s (CPU: 6347.6%, Mem: 920.6MiB) ===

fastpysgi / baseline / 16384c (p=1, r=0, cpu=64)
  Best: 1342695 req/s (CPU: 6445.6%, Mem: 2.5GiB) ===

fastpysgi / pipelined / 512c (p=16, r=0, cpu=unlimited)
  Best: 7558969 req/s (CPU: 7559.3%, Mem: 372.4MiB) ===

fastpysgi / pipelined / 4096c (p=16, r=0, cpu=unlimited)
  Best: 7618164 req/s (CPU: 7342.6%, Mem: 832.2MiB) ===

fastpysgi / pipelined / 16384c (p=16, r=0, cpu=unlimited)
  Best: 7396650 req/s (CPU: 6986.8%, Mem: 2.5GiB) ===

fastpysgi / limited-conn / 512c (p=1, r=10, cpu=unlimited)
  Best: 979689 req/s (CPU: 6475.0%, Mem: 462.9MiB) ===

fastpysgi / limited-conn / 4096c (p=1, r=10, cpu=unlimited)
  Best: 1293981 req/s (CPU: 7764.8%, Mem: 1.1GiB) ===

fastpysgi / json / 4096c (p=1, r=0, cpu=unlimited)
  Best: 720080 req/s (CPU: 10050.4%, Mem: 1.1GiB) ===

fastpysgi / json / 16384c (p=1, r=0, cpu=unlimited)
  Best: 682243 req/s (CPU: 9708.4%, Mem: 4.4GiB) ===

fastpysgi / upload / 64c (p=1, r=0, cpu=unlimited)
  Best: 841 req/s (CPU: 4947.4%, Mem: 2.7GiB) ===

fastpysgi / upload / 256c (p=1, r=0, cpu=unlimited)
  Best: 643 req/s (CPU: 6758.2%, Mem: 6.2GiB) ===

fastpysgi / upload / 512c (p=1, r=0, cpu=unlimited)
  Best: 536 req/s (CPU: 7030.8%, Mem: 12.8GiB) ===

fastpysgi / compression / 4096c (p=1, r=0, cpu=unlimited)
  Best: 10791 req/s (CPU: 12321.7%, Mem: 938.0MiB) ===

fastpysgi / compression / 16384c (p=1, r=0, cpu=unlimited)
  Best: 10638 req/s (CPU: 11731.9%, Mem: 1.5GiB) ===

fastpysgi / noisy / 512c (p=1, r=0, cpu=unlimited)
  Best: 1270622 req/s (CPU: 7484.7%, Mem: 388.7MiB) ===

fastpysgi / noisy / 4096c (p=1, r=0, cpu=unlimited)
  Best: 1568861 req/s (CPU: 8672.9%, Mem: 937.8MiB) ===

fastpysgi / noisy / 16384c (p=1, r=0, cpu=unlimited)
  Best: 1461641 req/s (CPU: 8046.9%, Mem: 3.0GiB) ===

fastpysgi / mixed / 4096c (p=1, r=5, cpu=unlimited)
  Best: 43894 req/s (CPU: 11629.0%, Mem: 1.2GiB) ===

fastpysgi / mixed / 16384c (p=1, r=5, cpu=unlimited)
  Best: 41166 req/s (CPU: 10711.7%, Mem: 1.3GiB) ===

fastpysgi / static / 4096c (p=1, r=0, cpu=unlimited)
  Best: 1393955 req/s (CPU: 6394.5%, Mem: 935.2MiB) ===

fastpysgi / static / 16384c (p=1, r=0, cpu=unlimited)
  Best: 1074172 req/s (CPU: 6708.0%, Mem: 2.6GiB) ===

fastpysgi / async-db / 512c (p=1, r=0, cpu=unlimited)
  Best: 76052 req/s (CPU: 6333.2%, Mem: 941.5MiB) ===

fastpysgi / async-db / 1024c (p=1, r=0, cpu=unlimited)
  Best: 77123 req/s (CPU: 6419.1%, Mem: 1.0GiB) ===
Full log
    Latency   10.79ms   8.12ms   21.70ms   42.50ms   72.50ms

  5397732 requests in 5.01s, 5381604 responses
  Throughput: 1.08M req/s
  Bandwidth:  15.04GB/s
  Status codes: 2xx=5381604, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 5381604 / 5381604 responses (100.0%)
  Per-template: 282332,292484,284777,273528,268658,289416,278243,262311,244881,268894,286283,286855,245536,241755,281470,273745,210934,257783,266356,285363
  Per-template-ok: 282332,292484,284777,273528,268658,289416,278243,262311,244881,268894,286283,286855,245536,241755,281470,273745,210934,257783,266356,285363
  CPU: 6708.0% | Mem: 2.6GiB

[run 3/3]
gcannon — io_uring HTTP load generator
  Target:    localhost:8080/
  Threads:   64
  Conns:     16384 (256/thread)
  Pipeline:  1
  Req/conn:  unlimited (keep-alive)
  Templates: 20
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   10.94ms   8.49ms   21.20ms   40.90ms   66.80ms

  5343040 requests in 5.00s, 5326656 responses
  Throughput: 1.06M req/s
  Bandwidth:  14.82GB/s
  Status codes: 2xx=5326656, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 5326656 / 5326656 responses (100.0%)
  Per-template: 285207,283636,290404,278763,265987,282665,274458,252461,237589,266181,277949,278423,252217,229846,287377,277091,206686,262549,259567,277600
  Per-template-ok: 285207,283636,290404,278763,265987,282665,274458,252461,237589,266181,277949,278423,252217,229846,287377,277091,206686,262549,259567,277600
  CPU: 6387.5% | Mem: 2.6GiB

=== Best: 1074172 req/s (CPU: 6708.0%, Mem: 2.6GiB) ===
  Input BW: 58.39MB/s (avg template: 57 bytes)
[dry-run] Results not saved (use --save to persist)
httparena-bench-fastpysgi
httparena-bench-fastpysgi

==============================================
=== fastpysgi / async-db / 512c (p=1, r=0, cpu=unlimited) ===
==============================================
9d4c9afcdac3147451330ad00d73ac6ceccec3a7d0fd8c79313b194be9bb554b
[wait] Waiting for server...
[ready] Server is up

[run 1/3]
gcannon — io_uring HTTP load generator
  Target:    localhost:8080/async-db?min=10&max=50
  Threads:   64
  Conns:     512 (8/thread)
  Pipeline:  1
  Req/conn:  unlimited (keep-alive)
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   5.92ms   5.12ms   10.90ms   18.70ms   27.90ms

  380261 requests in 5.00s, 380261 responses
  Throughput: 76.01K req/s
  Bandwidth:  602.86MB/s
  Status codes: 2xx=380261, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 380261 / 380261 responses (100.0%)
  CPU: 6333.2% | Mem: 941.5MiB

[run 2/3]
gcannon — io_uring HTTP load generator
  Target:    localhost:8080/async-db?min=10&max=50
  Threads:   64
  Conns:     512 (8/thread)
  Pipeline:  1
  Req/conn:  unlimited (keep-alive)
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   6.07ms   5.27ms   10.90ms   18.90ms   25.70ms

  371966 requests in 5.00s, 371966 responses
  Throughput: 74.36K req/s
  Bandwidth:  589.76MB/s
  Status codes: 2xx=371966, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 371965 / 371966 responses (100.0%)
  CPU: 6235.2% | Mem: 987.5MiB

[run 3/3]
gcannon — io_uring HTTP load generator
  Target:    localhost:8080/async-db?min=10&max=50
  Threads:   64
  Conns:     512 (8/thread)
  Pipeline:  1
  Req/conn:  unlimited (keep-alive)
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   6.07ms   5.27ms   11.30ms   19.70ms   27.00ms

  372218 requests in 5.00s, 372218 responses
  Throughput: 74.41K req/s
  Bandwidth:  590.12MB/s
  Status codes: 2xx=372218, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 372218 / 372218 responses (100.0%)
  CPU: 6203.5% | Mem: 999.2MiB

=== Best: 76052 req/s (CPU: 6333.2%, Mem: 941.5MiB) ===
[dry-run] Results not saved (use --save to persist)
httparena-bench-fastpysgi
httparena-bench-fastpysgi

==============================================
=== fastpysgi / async-db / 1024c (p=1, r=0, cpu=unlimited) ===
==============================================
6a615dc4e4c13533dd6cd54cd78031ea9769e5abea0f428b1fcfc6c3a24ca2df
[wait] Waiting for server...
[ready] Server is up

[run 1/3]
gcannon — io_uring HTTP load generator
  Target:    localhost:8080/async-db?min=10&max=50
  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   12.58ms   11.60ms   20.00ms   32.10ms   93.60ms

  385618 requests in 5.00s, 385618 responses
  Throughput: 77.09K req/s
  Bandwidth:  611.36MB/s
  Status codes: 2xx=385618, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 385616 / 385618 responses (100.0%)
  CPU: 6419.1% | Mem: 1.0GiB

[run 2/3]
gcannon — io_uring HTTP load generator
  Target:    localhost:8080/async-db?min=10&max=50
  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   12.66ms   11.70ms   20.50ms   32.00ms   43.70ms

  380570 requests in 5.00s, 380570 responses
  Throughput: 76.07K req/s
  Bandwidth:  603.35MB/s
  Status codes: 2xx=380570, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 380570 / 380570 responses (100.0%)
  CPU: 6422.0% | Mem: 1015.0MiB

[run 3/3]
gcannon — io_uring HTTP load generator
  Target:    localhost:8080/async-db?min=10&max=50
  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   12.75ms   11.90ms   20.50ms   31.40ms   43.30ms

  379232 requests in 5.00s, 379232 responses
  Throughput: 75.81K req/s
  Bandwidth:  601.25MB/s
  Status codes: 2xx=379232, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 379230 / 379232 responses (100.0%)
  CPU: 6352.0% | Mem: 1020.0MiB

=== Best: 77123 req/s (CPU: 6419.1%, Mem: 1.0GiB) ===
[dry-run] Results not saved (use --save to persist)
httparena-bench-fastpysgi
httparena-bench-fastpysgi
[skip] fastpysgi does not subscribe to baseline-h2
[skip] fastpysgi does not subscribe to static-h2
[skip] fastpysgi does not subscribe to baseline-h3
[skip] fastpysgi does not subscribe to static-h3
[skip] fastpysgi does not subscribe to unary-grpc
[skip] fastpysgi does not subscribe to unary-grpc-tls
[skip] fastpysgi does not subscribe to echo-ws
httparena-postgres
httparena-postgres
[restore] Restoring CPU governor to performance...

@remittor
Copy link
Copy Markdown
Contributor Author

@MDA2AV , plz approve this PR

@MDA2AV
Copy link
Copy Markdown
Owner

MDA2AV commented Mar 29, 2026

It's approved already, I'll merge this after I udpate the website with new mixed results, it was changed to also include the static and async-db in the mix, then ill rerun for this

@MDA2AV MDA2AV merged commit 09ff0dd into MDA2AV:main Mar 29, 2026
3 checks passed
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.

4 participants