Skip to content

Workerman testing chunked body#243

Merged
MDA2AV merged 5 commits intoMDA2AV:mainfrom
joanhey:workerman-chunked
Mar 29, 2026
Merged

Workerman testing chunked body#243
MDA2AV merged 5 commits intoMDA2AV:mainfrom
joanhey:workerman-chunked

Conversation

@joanhey
Copy link
Copy Markdown
Contributor

@joanhey joanhey commented Mar 29, 2026

Testing the chunked implementation.

Still only in master branch, if all work OK we'll include in the next Workerman version.

@joanhey
Copy link
Copy Markdown
Contributor Author

joanhey commented Mar 29, 2026

/benchmark

@github-actions
Copy link
Copy Markdown

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

@github-actions
Copy link
Copy Markdown

Benchmark Results

Framework: workerman | Profile: all profiles

workerman / baseline / 512c (p=1, r=0, cpu=64)
  Best: 2408791 req/s (CPU: 6548.9%, Mem: 1.8GiB) ===

workerman / baseline / 4096c (p=1, r=0, cpu=64)
  Best: 2678626 req/s (CPU: 6321.4%, Mem: 1.8GiB) ===

workerman / baseline / 16384c (p=1, r=0, cpu=64)
  Best: 2467980 req/s (CPU: 6101.8%, Mem: 1.9GiB) ===

workerman / pipelined / 512c (p=16, r=0, cpu=unlimited)
  Best: 3521052 req/s (CPU: 8742.9%, Mem: 1.7GiB) ===

workerman / pipelined / 4096c (p=16, r=0, cpu=unlimited)
  Best: 3701177 req/s (CPU: 9183.8%, Mem: 1.8GiB) ===

workerman / pipelined / 16384c (p=16, r=0, cpu=unlimited)
  Best: 3642623 req/s (CPU: 8642.2%, Mem: 1.9GiB) ===

workerman / limited-conn / 512c (p=1, r=10, cpu=unlimited)
  Best: 1528952 req/s (CPU: 5459.6%, Mem: 1.7GiB) ===

workerman / limited-conn / 4096c (p=1, r=10, cpu=unlimited)
  Best: 1968940 req/s (CPU: 6071.9%, Mem: 1.8GiB) ===

workerman / json / 4096c (p=1, r=0, cpu=unlimited)
  Best: 698331 req/s (CPU: 10201.5%, Mem: 1.8GiB) ===

workerman / json / 16384c (p=1, r=0, cpu=unlimited)
  Best: 677804 req/s (CPU: 10153.8%, Mem: 1.9GiB) ===

workerman / upload / 64c (p=1, r=0, cpu=unlimited)
  Best: 0 req/s (CPU: 0%, Mem: 0MiB) ===
Full log
  Pipeline:  1
  Req/conn:  unlimited (keep-alive)
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   4.66ms   3.93ms   7.51ms   17.70ms   30.90ms

  3480408 requests in 5.00s, 3479576 responses
  Throughput: 695.52K req/s
  Bandwidth:  5.57GB/s
  Status codes: 2xx=3479576, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 3479561 / 3479576 responses (100.0%)
  CPU: 10444.5% | Mem: 1.8GiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   4.66ms   3.90ms   7.89ms   16.60ms   29.00ms

  3463189 requests in 5.00s, 3462629 responses
  Throughput: 692.13K req/s
  Bandwidth:  5.54GB/s
  Status codes: 2xx=3462629, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 3462605 / 3462629 responses (100.0%)
  CPU: 10124.6% | Mem: 1.8GiB

=== Best: 698331 req/s (CPU: 10201.5%, Mem: 1.8GiB) ===
[dry-run] Results not saved (use --save to persist)
httparena-bench-workerman
httparena-bench-workerman

==============================================
=== workerman / json / 16384c (p=1, r=0, cpu=unlimited) ===
==============================================
42ee13b47501ed978ef6f6e7456009f1e01b8aa998ce8d8b722bc3d71178750c
[wait] Waiting for server...
[ready] Server is up

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   22.14ms   18.50ms   34.20ms   70.30ms   118.10ms

  3393031 requests in 5.00s, 3376647 responses
  Throughput: 674.98K req/s
  Bandwidth:  5.40GB/s
  Status codes: 2xx=3376647, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 3376647 / 3376647 responses (100.0%)
  CPU: 9649.1% | Mem: 1.9GiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   21.80ms   17.80ms   34.40ms   74.60ms   138.90ms

  3405150 requests in 5.00s, 3389022 responses
  Throughput: 677.46K req/s
  Bandwidth:  5.42GB/s
  Status codes: 2xx=3389022, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 3389010 / 3389022 responses (100.0%)
  CPU: 10153.8% | Mem: 1.9GiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   22.27ms   18.50ms   34.60ms   72.00ms   117.30ms

  3370140 requests in 5.00s, 3354012 responses
  Throughput: 670.40K req/s
  Bandwidth:  5.37GB/s
  Status codes: 2xx=3354012, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 3354012 / 3354012 responses (100.0%)
  CPU: 9622.4% | Mem: 1.9GiB

=== Best: 677804 req/s (CPU: 10153.8%, Mem: 1.9GiB) ===
[dry-run] Results not saved (use --save to persist)
httparena-bench-workerman
httparena-bench-workerman

==============================================
=== workerman / upload / 64c (p=1, r=0, cpu=unlimited) ===
==============================================
337f69639249451adc9228f258a915e6b422cb677975954b14121fd829bae4c9
[wait] Waiting for server...
[ready] Server is up

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   17.30ms   13.20ms   32.70ms   51.20ms   66.20ms

  18047 requests in 5.01s, 17913 responses
  Throughput: 3.57K req/s
  Bandwidth:  251.28KB/s
  Status codes: 2xx=0, 3xx=0, 4xx=17913, 5xx=0
  Latency samples: 17913 / 17913 responses (100.0%)
  Reconnects: 17913

  WARNING: 17913/17913 responses (100.0%) had unexpected status (expected 2xx)
  CPU: 4909.0% | Mem: 1.8GiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   17.07ms   13.00ms   31.90ms   51.30ms   66.40ms

  18257 requests in 5.02s, 18198 responses
  Throughput: 3.63K req/s
  Bandwidth:  255.11KB/s
  Status codes: 2xx=0, 3xx=0, 4xx=18198, 5xx=0
  Latency samples: 18198 / 18198 responses (100.0%)
  Reconnects: 18198

  WARNING: 18198/18198 responses (100.0%) had unexpected status (expected 2xx)
  CPU: 5330.0% | Mem: 1.8GiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   16.82ms   12.90ms   31.20ms   50.40ms   65.80ms

  18549 requests in 5.01s, 18482 responses
  Throughput: 3.69K req/s
  Bandwidth:  259.26KB/s
  Status codes: 2xx=0, 3xx=0, 4xx=18482, 5xx=0
  Latency samples: 18482 / 18482 responses (100.0%)
  Reconnects: 18482

  WARNING: 18482/18482 responses (100.0%) had unexpected status (expected 2xx)
  CPU: 5200.4% | Mem: 1.8GiB

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

@joanhey joanhey marked this pull request as draft March 29, 2026 10:20
@joanhey
Copy link
Copy Markdown
Contributor Author

joanhey commented Mar 29, 2026

/benchmark

@github-actions
Copy link
Copy Markdown

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

@github-actions
Copy link
Copy Markdown

Benchmark Results

Framework: workerman | Profile: all profiles

workerman / baseline / 512c (p=1, r=0, cpu=64)
  Best: 2461571 req/s (CPU: 6461.8%, Mem: 1.8GiB) ===

workerman / baseline / 4096c (p=1, r=0, cpu=64)
  Best: 2755101 req/s (CPU: 6365.6%, Mem: 1.8GiB) ===

workerman / baseline / 16384c (p=1, r=0, cpu=64)
  Best: 2496293 req/s (CPU: 6106.7%, Mem: 1.9GiB) ===

workerman / pipelined / 512c (p=16, r=0, cpu=unlimited)
  Best: 3052073 req/s (CPU: 8964.4%, Mem: 1.7GiB) ===

workerman / pipelined / 4096c (p=16, r=0, cpu=unlimited)
  Best: 3742455 req/s (CPU: 9112.3%, Mem: 1.8GiB) ===

workerman / pipelined / 16384c (p=16, r=0, cpu=unlimited)
  Best: 3771234 req/s (CPU: 8886.9%, Mem: 1.9GiB) ===

workerman / limited-conn / 512c (p=1, r=10, cpu=unlimited)
  Best: 1538856 req/s (CPU: 5533.0%, Mem: 1.7GiB) ===

workerman / limited-conn / 4096c (p=1, r=10, cpu=unlimited)
  Best: 2019109 req/s (CPU: 6336.5%, Mem: 1.8GiB) ===

workerman / json / 4096c (p=1, r=0, cpu=unlimited)
  Best: 701954 req/s (CPU: 10388.2%, Mem: 1.8GiB) ===

workerman / json / 16384c (p=1, r=0, cpu=unlimited)
  Best: 683904 req/s (CPU: 10344.8%, Mem: 1.9GiB) ===

workerman / upload / 64c (p=1, r=0, cpu=unlimited)
  Best: 240 req/s (CPU: 5019.0%, Mem: 3.2GiB) ===

workerman / upload / 256c (p=1, r=0, cpu=unlimited)
  Best: 186 req/s (CPU: 10822.1%, Mem: 5.8GiB) ===

workerman / upload / 512c (p=1, r=0, cpu=unlimited)
  Best: 152 req/s (CPU: 12139.3%, Mem: 8.4GiB) ===

workerman / compression / 4096c (p=1, r=0, cpu=unlimited)
  Best: 10021 req/s (CPU: 12516.8%, Mem: 1.8GiB) ===

workerman / compression / 16384c (p=1, r=0, cpu=unlimited)
  Best: 9953 req/s (CPU: 11827.5%, Mem: 1.9GiB) ===

workerman / noisy / 512c (p=1, r=0, cpu=unlimited)
  Best: 1656439 req/s (CPU: 6007.7%, Mem: 1.7GiB) ===

workerman / noisy / 4096c (p=1, r=0, cpu=unlimited)
  Best: 2304811 req/s (CPU: 7210.6%, Mem: 1.8GiB) ===

workerman / noisy / 16384c (p=1, r=0, cpu=unlimited)
  Best: 1953233 req/s (CPU: 7572.1%, Mem: 1.9GiB) ===

workerman / mixed / 4096c (p=1, r=5, cpu=unlimited)
  Best: 37342 req/s (CPU: 11690.8%, Mem: 2.7GiB) ===

workerman / mixed / 16384c (p=1, r=5, cpu=unlimited)
  Best: 33804 req/s (CPU: 10827.8%, Mem: 3.1GiB) ===
Full log
  Bandwidth:  247.36MB/s
  Status codes: 2xx=9730357, 3xx=0, 4xx=3872296, 5xx=0
  Latency samples: 13602653 / 13602653 responses (100.0%)
  Per-template: 4909886,4818460,3874307,0,0
  Per-template-ok: 4909886,4818460,2011,0,0

  WARNING: 3872296/13602653 responses (28.5%) had unexpected status (expected 2xx)
  CPU: 7088.8% | Mem: 1.9GiB

=== Best: 1953233 req/s (CPU: 7572.1%, Mem: 1.9GiB) ===
  Input BW: 197.45MB/s (avg template: 106 bytes)
[dry-run] Results not saved (use --save to persist)
httparena-bench-workerman
httparena-bench-workerman

==============================================
=== workerman / mixed / 4096c (p=1, r=5, cpu=unlimited) ===
==============================================
8c84fef3e8ea9be32217f43cd1a0516db0eb1dc743523584a912b8105ea00bf1
[wait] Waiting for server...
[ready] Server is up

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   104.20ms   24.20ms   354.70ms   805.20ms    1.14s

  612367 requests in 15.00s, 560132 responses
  Throughput: 37.33K req/s
  Bandwidth:  1.49GB/s
  Status codes: 2xx=560132, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 560132 / 560132 responses (100.0%)
  Reconnects: 121242
  Per-template: 59779,60247,60707,61139,61641,49709,50030,61019,48075,47786
  Per-template-ok: 59779,60247,60707,61139,61641,49709,50030,61019,48075,47786
  CPU: 11690.8% | Mem: 2.7GiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   104.55ms   23.30ms   354.60ms   836.40ms    1.20s

  608605 requests in 15.00s, 559830 responses
  Throughput: 37.31K req/s
  Bandwidth:  1.49GB/s
  Status codes: 2xx=559830, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 559829 / 559830 responses (100.0%)
  Reconnects: 121431
  Per-template: 59778,60181,60639,61097,61549,49633,50001,61062,48011,47878
  Per-template-ok: 59778,60181,60639,61097,61549,49633,50001,61062,48011,47878
  CPU: 11795.6% | Mem: 2.8GiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   104.43ms   24.30ms   354.80ms   790.20ms    1.11s

  607018 requests in 15.00s, 558373 responses
  Throughput: 37.22K req/s
  Bandwidth:  1.49GB/s
  Status codes: 2xx=558373, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 558372 / 558373 responses (100.0%)
  Reconnects: 121159
  Per-template: 59739,60019,60398,60755,61326,49383,49842,61144,47953,47813
  Per-template-ok: 59739,60019,60398,60755,61326,49383,49842,61144,47953,47813
  CPU: 11733.9% | Mem: 2.7GiB

=== Best: 37342 req/s (CPU: 11690.8%, Mem: 2.7GiB) ===
  Input BW: 3.65GB/s (avg template: 104924 bytes)
[dry-run] Results not saved (use --save to persist)
httparena-bench-workerman
httparena-bench-workerman

==============================================
=== workerman / mixed / 16384c (p=1, r=5, cpu=unlimited) ===
==============================================
be4359b69c0a387b5869897d415fdfadd474a4395f17189f96e7b10bca9f3933
[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:  5
  Templates: 10
  Expected:  200
  Duration:  15s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   440.94ms   36.40ms    1.91s    2.75s    3.26s

  567179 requests in 15.00s, 506014 responses
  Throughput: 33.72K req/s
  Bandwidth:  1.36GB/s
  Status codes: 2xx=506014, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 506014 / 506014 responses (100.0%)
  Reconnects: 109513
  Per-template: 53818,53891,53188,52153,56070,46495,46845,56544,43807,43203
  Per-template-ok: 53818,53891,53188,52153,56070,46495,46845,56544,43807,43203
  CPU: 10629.4% | Mem: 3.4GiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   439.02ms   35.00ms    1.91s    2.74s    3.21s

  568698 requests in 15.01s, 507401 responses
  Throughput: 33.81K req/s
  Bandwidth:  1.36GB/s
  Status codes: 2xx=507401, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 507401 / 507401 responses (100.0%)
  Reconnects: 109774
  Per-template: 53848,53960,53525,52550,56048,46801,47027,56681,43680,43281
  Per-template-ok: 53848,53960,53525,52550,56048,46801,47027,56681,43680,43281
  CPU: 10827.8% | Mem: 3.1GiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   441.89ms   36.10ms    1.93s    2.75s    3.24s

  564774 requests in 15.01s, 503707 responses
  Throughput: 33.56K req/s
  Bandwidth:  1.35GB/s
  Status codes: 2xx=503707, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 503707 / 503707 responses (100.0%)
  Reconnects: 108990
  Per-template: 53548,53629,53044,51618,55755,46402,46744,56189,43605,43173
  Per-template-ok: 53548,53629,53044,51618,55755,46402,46744,56189,43605,43173
  CPU: 10595.7% | Mem: 3.3GiB

=== Best: 33804 req/s (CPU: 10827.8%, Mem: 3.1GiB) ===
  Input BW: 3.30GB/s (avg template: 104924 bytes)
[dry-run] Results not saved (use --save to persist)
httparena-bench-workerman
httparena-bench-workerman
[skip] workerman does not subscribe to static
[skip] workerman does not subscribe to async-db
[skip] workerman does not subscribe to baseline-h2
[skip] workerman does not subscribe to static-h2
[skip] workerman does not subscribe to baseline-h3
[skip] workerman does not subscribe to static-h3
[skip] workerman does not subscribe to unary-grpc
[skip] workerman does not subscribe to unary-grpc-tls
[skip] workerman does not subscribe to echo-ws
[restore] Restoring CPU governor to performance...

@joanhey joanhey marked this pull request as ready for review March 29, 2026 11:05
@joanhey
Copy link
Copy Markdown
Contributor Author

joanhey commented Mar 29, 2026

💯 Now pass all validate and bench tests !!!

PD: chunked transfer implementation created in hours !!

@MDA2AV MDA2AV merged commit 448445e into MDA2AV:main Mar 29, 2026
2 checks passed
@joanhey joanhey deleted the workerman-chunked branch March 29, 2026 11:31
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