Skip to content

[genhttp] Cleanup and optimize code#13

Merged
MDA2AV merged 5 commits intoMDA2AV:mainfrom
Kaliumhexacyanoferrat:genhttp-adjustments
Mar 13, 2026
Merged

[genhttp] Cleanup and optimize code#13
MDA2AV merged 5 commits intoMDA2AV:mainfrom
Kaliumhexacyanoferrat:genhttp-adjustments

Conversation

@Kaliumhexacyanoferrat
Copy link
Collaborator

No description provided.

@github-actions
Copy link

Benchmark Results

Framework: genhttp | Profile: all profiles

genhttp / baseline / 512c (p=1, r=0, cpu=unlimited)
  Best: 1170243 req/s (CPU: 5746.5%, Mem: 308.4MiB) ===

genhttp / baseline / 4096c (p=1, r=0, cpu=unlimited)
  Best: 1268971 req/s (CPU: 6327.8%, Mem: 424.2MiB) ===

genhttp / baseline / 16384c (p=1, r=0, cpu=unlimited)
  Best: 962607 req/s (CPU: 6409.6%, Mem: 934.3MiB) ===

genhttp / pipelined / 512c (p=16, r=0, cpu=unlimited)
  Best: 1954618 req/s (CPU: 9812.6%, Mem: 193.1MiB) ===

genhttp / pipelined / 4096c (p=16, r=0, cpu=unlimited)
  Best: 2227128 req/s (CPU: 10277.1%, Mem: 323.2MiB) ===

genhttp / pipelined / 16384c (p=16, r=0, cpu=unlimited)
  Best: 2228934 req/s (CPU: 10138.5%, Mem: 644.1MiB) ===

genhttp / limited-conn / 512c (p=1, r=10, cpu=unlimited)
  Best: 445042 req/s (CPU: 4047.1%, Mem: 176.0MiB) ===

genhttp / limited-conn / 4096c (p=1, r=10, cpu=unlimited)
  Best: 447916 req/s (CPU: 3925.5%, Mem: 176.0MiB) ===

genhttp / json / 4096c (p=1, r=0, cpu=unlimited)
  Best: 0 req/s (CPU: 0%, Mem: 0MiB) ===
Full log
  Latency samples: 2216446 / 2216457 responses (100.0%)
  Reconnects: 221638
  Per-template: 738764,738783,738899
  CPU: 4026.6% | Mem: 179.0MiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   1.14ms     75us   2.83ms   11.60ms   12.80ms

  2225209 requests in 5.00s, 2225213 responses
  Throughput: 444.89K req/s
  Bandwidth:  57.28MB/s
  Status codes: 2xx=2225213, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 2225204 / 2225213 responses (100.0%)
  Reconnects: 222527
  Per-template: 741693,741704,741807
  CPU: 4047.1% | Mem: 176.0MiB

=== Best: 445042 req/s (CPU: 4047.1%, Mem: 176.0MiB) ===
  Input BW: 34.38MB/s (avg template: 81 bytes)
[dry-run] Results not saved (use --save to persist)
httparena-bench-genhttp
httparena-bench-genhttp

==============================================
=== genhttp / limited-conn / 4096c (p=1, r=10, cpu=unlimited) ===
==============================================
8dfdd88c26a77a1edc087d232ff8205e7b8ff6ea7237c1999bf3be556de15ba2
[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:  10
  Templates: 3
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   1.99ms    140us   9.95ms   18.70ms   39.40ms

  1568392 requests in 5.00s, 1567298 responses
  Throughput: 313.36K req/s
  Bandwidth:  40.34MB/s
  Status codes: 2xx=1567298, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 1567292 / 1567298 responses (100.0%)
  Reconnects: 156727
  Per-template: 522444,522263,522585
  CPU: 4860.1% | Mem: 177.4MiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   1.50ms     77us   9.09ms   12.30ms   13.80ms

  2235456 requests in 5.00s, 2233276 responses
  Throughput: 446.50K req/s
  Bandwidth:  57.49MB/s
  Status codes: 2xx=2233276, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 2233268 / 2233276 responses (100.0%)
  Reconnects: 223389
  Per-template: 744458,744308,744502
  CPU: 4003.7% | Mem: 178.5MiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   1.44ms     77us   9.11ms   12.20ms   13.30ms

  2240444 requests in 5.00s, 2239582 responses
  Throughput: 447.76K req/s
  Bandwidth:  57.65MB/s
  Status codes: 2xx=2239582, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 2239574 / 2239582 responses (100.0%)
  Reconnects: 223961
  Per-template: 746698,746619,746257
  CPU: 3925.5% | Mem: 176.0MiB

=== Best: 447916 req/s (CPU: 3925.5%, Mem: 176.0MiB) ===
  Input BW: 34.60MB/s (avg template: 81 bytes)
[dry-run] Results not saved (use --save to persist)
httparena-bench-genhttp
httparena-bench-genhttp

==============================================
=== genhttp / json / 4096c (p=1, r=0, cpu=unlimited) ===
==============================================
8c246c174f932a4f778a252ded75aa0e67893abfa56c56672b1a8dd38841daf3
[wait] Waiting for server...
[ready] Server is up

[run 1/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   3.22ms   2.20ms   5.97ms   14.50ms   34.70ms

  5201184 requests in 5.00s, 5198097 responses
  Throughput: 1.04M req/s
  Bandwidth:  227.83MB/s
  Status codes: 2xx=0, 3xx=0, 4xx=5198097, 5xx=0
  Latency samples: 5198097 / 5198097 responses (100.0%)

  WARNING: 5198097/5198097 responses (100.0%) had unexpected status (expected 2xx)
  CPU: 7596.5% | Mem: 266.8MiB

[run 2/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   2.24ms   1.57ms   4.30ms   8.69ms   15.60ms

  7627100 requests in 5.00s, 7624237 responses
  Throughput: 1.52M req/s
  Bandwidth:  334.28MB/s
  Status codes: 2xx=0, 3xx=0, 4xx=7624237, 5xx=0
  Latency samples: 7624213 / 7624237 responses (100.0%)

  WARNING: 7624237/7624237 responses (100.0%) had unexpected status (expected 2xx)
  CPU: 6657.7% | Mem: 357.2MiB

[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   2.37ms   1.75ms   4.45ms   9.21ms   16.40ms

  7643513 requests in 5.00s, 7641350 responses
  Throughput: 1.53M req/s
  Bandwidth:  335.07MB/s
  Status codes: 2xx=0, 3xx=0, 4xx=7641350, 5xx=0
  Latency samples: 7641328 / 7641350 responses (100.0%)

  WARNING: 7641350/7641350 responses (100.0%) had unexpected status (expected 2xx)
  CPU: 6574.6% | Mem: 321.0MiB

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

@github-actions
Copy link

Benchmark Results

Framework: genhttp | Profile: json

genhttp / json / 4096c (p=1, r=0, cpu=unlimited)
  Best: 612251 req/s (CPU: 8660.0%, Mem: 1.2GiB) ===

genhttp / json / 16384c (p=1, r=0, cpu=unlimited)
  Best: 491606 req/s (CPU: 8044.3%, Mem: 4.4GiB) ===
Full log
#5 [internal] load build context
#5 DONE 0.0s

#6 [stage-1 1/4] FROM mcr.microsoft.com/dotnet/runtime-deps:10.0-alpine@sha256:122e6638ff460ba7c7455a9dd1b81332b6e17f9845620229ca3e3b26947d4c07
#6 resolve mcr.microsoft.com/dotnet/runtime-deps:10.0-alpine@sha256:122e6638ff460ba7c7455a9dd1b81332b6e17f9845620229ca3e3b26947d4c07 0.1s done
#6 DONE 0.1s

#7 [build 1/6] FROM mcr.microsoft.com/dotnet/sdk:10.0-alpine@sha256:2b0e46d490f5b53a8dc07fbf636cdf5b90796878a256e1ce5b441e8d9675c5f4
#7 resolve mcr.microsoft.com/dotnet/sdk:10.0-alpine@sha256:2b0e46d490f5b53a8dc07fbf636cdf5b90796878a256e1ce5b441e8d9675c5f4 0.1s done
#7 DONE 0.1s

#5 [internal] load build context
#5 transferring context: 419B done
#5 DONE 0.0s

#8 [build 5/6] COPY . .
#8 CACHED

#9 [stage-1 3/4] COPY --from=build /app .
#9 CACHED

#10 [build 3/6] COPY genhttp.csproj ./
#10 CACHED

#11 [stage-1 2/4] WORKDIR /app
#11 CACHED

#12 [build 4/6] RUN dotnet restore -r linux-musl-x64
#12 CACHED

#13 [build 6/6] RUN dotnet publish -c Release -r linux-musl-x64 --self-contained -o /app
#13 CACHED

#14 [build 2/6] WORKDIR /source
#14 CACHED

#15 [stage-1 4/4] RUN apk add --no-cache libmsquic
#15 CACHED

#16 exporting to image
#16 exporting layers done
#16 exporting manifest sha256:7bc6c064d254687d7160d0559843d34cc4993f70368184505a48e6ab2777ee2f done
#16 exporting config sha256:c6cdb66088a1d716a9c157e85b357dcfbda5c94bc8d884b6b3c521dd5fc21792 done
#16 exporting attestation manifest sha256:32cf73f71250dbff66fa5956a24b61102b5bb813dcbc59af8723e2e614da55d4 0.0s done
#16 exporting manifest list sha256:c274e04d7143640b465888bf99f3f4df90d6e38e7c2b57fa4797f7db0b519315
#16 exporting manifest list sha256:c274e04d7143640b465888bf99f3f4df90d6e38e7c2b57fa4797f7db0b519315 0.0s done
#16 naming to docker.io/library/httparena-genhttp:latest done
#16 unpacking to docker.io/library/httparena-genhttp:latest 0.0s done
#16 DONE 0.1s

==============================================
=== genhttp / json / 4096c (p=1, r=0, cpu=unlimited) ===
==============================================
41e43b957abe7308f401ef13179b9dcff0bdfe7b1de67d9a78ff1eaabc5ead1c
[wait] Waiting for server...
[ready] Server is up

[run 1/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   15.17ms   2.12ms   23.00ms   245.20ms    1.43s

  1128022 requests in 5.00s, 1125111 responses
  Throughput: 224.86K req/s
  Bandwidth:  1.78GB/s
  Status codes: 2xx=1125111, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 1125110 / 1125111 responses (100.0%)
  CPU: 9374.3% | Mem: 776.2MiB

[run 2/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.36ms   3.46ms   8.56ms   21.30ms   49.90ms

  3063041 requests in 5.00s, 3061259 responses
  Throughput: 611.97K req/s
  Bandwidth:  4.83GB/s
  Status codes: 2xx=3061259, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 3061238 / 3061259 responses (100.0%)
  CPU: 8660.0% | Mem: 1.2GiB

[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.46ms   3.78ms   8.94ms   18.20ms   40.10ms

  3041761 requests in 5.00s, 3040217 responses
  Throughput: 607.62K req/s
  Bandwidth:  4.80GB/s
  Status codes: 2xx=3040217, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 3040193 / 3040217 responses (100.0%)
  CPU: 8517.0% | Mem: 1.2GiB

=== Best: 612251 req/s (CPU: 8660.0%, Mem: 1.2GiB) ===
[dry-run] Results not saved (use --save to persist)
httparena-bench-genhttp
httparena-bench-genhttp

==============================================
=== genhttp / json / 16384c (p=1, r=0, cpu=unlimited) ===
==============================================
3eb22b25dc9feec9b685259e72d1fb5f0392bac6d7638ff242eb45b6264ebebf
[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   47.85ms   5.91ms   71.60ms   504.80ms    2.87s

  862495 requests in 5.00s, 846111 responses
  Throughput: 169.15K req/s
  Bandwidth:  1.34GB/s
  Status codes: 2xx=846111, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 846111 / 846111 responses (100.0%)
  CPU: 7811.1% | Mem: 220.3MiB

[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   31.59ms   26.00ms   55.00ms   147.60ms   922.10ms

  2170474 requests in 5.00s, 2154090 responses
  Throughput: 430.51K req/s
  Bandwidth:  3.40GB/s
  Status codes: 2xx=2154090, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 2154090 / 2154090 responses (100.0%)
  CPU: 8667.6% | Mem: 3.3GiB

[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   25.45ms   21.10ms   43.90ms   68.80ms    1.07s

  2474162 requests in 5.00s, 2458034 responses
  Throughput: 491.38K req/s
  Bandwidth:  3.88GB/s
  Status codes: 2xx=2458034, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 2458034 / 2458034 responses (100.0%)
  CPU: 8044.3% | Mem: 4.4GiB

=== Best: 491606 req/s (CPU: 8044.3%, Mem: 4.4GiB) ===
[dry-run] Results not saved (use --save to persist)
httparena-bench-genhttp
httparena-bench-genhttp
[restore] Restoring CPU governor to performance...

@github-actions
Copy link

Benchmark Results

Framework: genhttp | Profile: baseline-h3


  
Full log
[tune] Setting CPU governor to performance...
[tune] Setting UDP buffer sizes for QUIC...
[clean] Restarting Docker daemon...
[clean] Dropping kernel caches...
=== Building: genhttp ===
#0 building with "default" instance using docker driver

#1 [internal] load build definition from Dockerfile
#1 transferring dockerfile: 438B done
#1 DONE 0.0s

#2 [internal] load metadata for mcr.microsoft.com/dotnet/sdk:10.0-alpine
#2 DONE 0.4s

#3 [internal] load metadata for mcr.microsoft.com/dotnet/runtime-deps:10.0-alpine
#3 DONE 0.4s

#4 [internal] load .dockerignore
#4 transferring context: 2B done
#4 DONE 0.0s

#5 [internal] load build context
#5 DONE 0.0s

#6 [build 1/6] FROM mcr.microsoft.com/dotnet/sdk:10.0-alpine@sha256:2b0e46d490f5b53a8dc07fbf636cdf5b90796878a256e1ce5b441e8d9675c5f4
#6 resolve mcr.microsoft.com/dotnet/sdk:10.0-alpine@sha256:2b0e46d490f5b53a8dc07fbf636cdf5b90796878a256e1ce5b441e8d9675c5f4 0.1s done
#6 DONE 0.1s

#7 [stage-1 1/4] FROM mcr.microsoft.com/dotnet/runtime-deps:10.0-alpine@sha256:122e6638ff460ba7c7455a9dd1b81332b6e17f9845620229ca3e3b26947d4c07
#7 resolve mcr.microsoft.com/dotnet/runtime-deps:10.0-alpine@sha256:122e6638ff460ba7c7455a9dd1b81332b6e17f9845620229ca3e3b26947d4c07 0.1s done
#7 DONE 0.1s

#5 [internal] load build context
#5 transferring context: 419B done
#5 DONE 0.0s

#8 [build 4/6] RUN dotnet restore -r linux-musl-x64
#8 CACHED

#9 [build 5/6] COPY . .
#9 CACHED

#10 [stage-1 3/4] COPY --from=build /app .
#10 CACHED

#11 [stage-1 2/4] WORKDIR /app
#11 CACHED

#12 [build 2/6] WORKDIR /source
#12 CACHED

#13 [build 6/6] RUN dotnet publish -c Release -r linux-musl-x64 --self-contained -o /app
#13 CACHED

#14 [build 3/6] COPY genhttp.csproj ./
#14 CACHED

#15 [stage-1 4/4] RUN apk add --no-cache libmsquic
#15 CACHED

#16 exporting to image
#16 exporting layers done
#16 exporting manifest sha256:7bc6c064d254687d7160d0559843d34cc4993f70368184505a48e6ab2777ee2f done
#16 exporting config sha256:c6cdb66088a1d716a9c157e85b357dcfbda5c94bc8d884b6b3c521dd5fc21792 done
#16 exporting attestation manifest sha256:2305c8583d229e20e08d1352c4c2fb82e41fa352d6a90e7f34624096b5af5053 0.1s done
#16 exporting manifest list sha256:7483f1992cf031abcd71105f0c582be69a039586466f0897e5e77cf840eb1073
#16 exporting manifest list sha256:7483f1992cf031abcd71105f0c582be69a039586466f0897e5e77cf840eb1073 0.0s done
#16 naming to docker.io/library/httparena-genhttp:latest done
#16 unpacking to docker.io/library/httparena-genhttp:latest done
#16 DONE 0.2s
[skip] genhttp does not subscribe to baseline-h3
[restore] Restoring CPU governor to performance...

@github-actions
Copy link

Benchmark Results

Framework: genhttp | Profile: all profiles

genhttp / baseline / 512c (p=1, r=0, cpu=unlimited)
  Best: 246128 req/s (CPU: 6795.8%, Mem: 383.2MiB) ===

genhttp / baseline / 4096c (p=1, r=0, cpu=unlimited)
  Best: 107833 req/s (CPU: 7307.9%, Mem: 362.5MiB) ===

genhttp / baseline / 16384c (p=1, r=0, cpu=unlimited)
  Best: 25249 req/s (CPU: 6623.3%, Mem: 413.9MiB) ===

genhttp / pipelined / 512c (p=16, r=0, cpu=unlimited)
  Best: 12104892 req/s (CPU: 7334.4%, Mem: 326.7MiB) ===

genhttp / pipelined / 4096c (p=16, r=0, cpu=unlimited)
  Best: 13003129 req/s (CPU: 8251.1%, Mem: 1017.0MiB) ===

genhttp / pipelined / 16384c (p=16, r=0, cpu=unlimited)
  Best: 10970950 req/s (CPU: 8521.9%, Mem: 3.1GiB) ===

genhttp / limited-conn / 512c (p=1, r=10, cpu=unlimited)
  Best: 51574 req/s (CPU: 6997.5%, Mem: 390.6MiB) ===

genhttp / limited-conn / 4096c (p=1, r=10, cpu=unlimited)
  Best: 50659 req/s (CPU: 7292.5%, Mem: 692.8MiB) ===

genhttp / json / 4096c (p=1, r=0, cpu=unlimited)
  Best: 549016 req/s (CPU: 8642.2%, Mem: 1.2GiB) ===

genhttp / json / 16384c (p=1, r=0, cpu=unlimited)
  Best: 500240 req/s (CPU: 8662.8%, Mem: 3.0GiB) ===

genhttp / upload / 64c (p=1, r=0, cpu=unlimited)
  Best: 589 req/s (CPU: 6842.9%, Mem: 488.9MiB) ===

genhttp / upload / 256c (p=1, r=0, cpu=unlimited)
  Best: 629 req/s (CPU: 11551.2%, Mem: 563.4MiB) ===

genhttp / upload / 512c (p=1, r=0, cpu=unlimited)
  Best: 615 req/s (CPU: 11542.3%, Mem: 913.7MiB) ===

genhttp / compression / 4096c (p=1, r=0, cpu=unlimited)
  Best: 8188 req/s (CPU: 3329.2%, Mem: 1.1GiB) ===

genhttp / compression / 16384c (p=1, r=0, cpu=unlimited)
  Best: 6976 req/s (CPU: 3380.3%, Mem: 2.6GiB) ===

genhttp / noisy / 512c (p=1, r=0, cpu=unlimited)
  Best: 1041671 req/s (CPU: 6369.3%, Mem: 325.4MiB) ===

genhttp / noisy / 4096c (p=1, r=0, cpu=unlimited)
  Best: 1121394 req/s (CPU: 7203.9%, Mem: 1.2GiB) ===

genhttp / noisy / 16384c (p=1, r=0, cpu=unlimited)
  Best: 1010459 req/s (CPU: 7433.0%, Mem: 3.0GiB) ===

genhttp / mixed / 4096c (p=1, r=100, cpu=unlimited)
  Best: 23210 req/s (CPU: 8576.5%, Mem: 2.4GiB) ===

genhttp / mixed / 16384c (p=1, r=100, cpu=unlimited)
  Best: 14094 req/s (CPU: 6646.3%, Mem: 4.0GiB) ===
Full log
    Latency   8.20ms   5.75ms   13.20ms   31.80ms   170.80ms

  6664535 requests in 5.00s, 6644805 responses
  Throughput: 1.33M req/s
  Bandwidth:  203.09MB/s
  Status codes: 2xx=5025885, 3xx=0, 4xx=1618920, 5xx=0
  Latency samples: 6644778 / 6644805 responses (100.0%)
  Reconnects: 3582
  Errors: connect 0, read 2, timeout 0
  Per-template: 3180913,1844835,1615811,0,3246

  WARNING: 1618920/6644805 responses (24.4%) had unexpected status (expected 2xx)
  CPU: 6873.4% | Mem: 4.1GiB

=== Best: 1010459 req/s (CPU: 7433.0%, Mem: 3.0GiB) ===
  Input BW: 102.15MB/s (avg template: 106 bytes)
[dry-run] Results not saved (use --save to persist)
httparena-bench-genhttp
httparena-bench-genhttp

==============================================
=== genhttp / mixed / 4096c (p=1, r=100, cpu=unlimited) ===
==============================================
96c3cc82382e57626c4d04e1aa564fa76aec2e79161eae3366e54f8f2da49e94
[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:  100
  Templates: 10
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   141.34ms   11.10ms   163.90ms    3.64s    4.21s

  49627 requests in 5.00s, 45599 responses
  Throughput: 9.12K req/s
  Bandwidth:  241.79MB/s
  Status codes: 2xx=45599, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 45599 / 45599 responses (100.0%)
  Reconnects: 252
  Errors: connect 0, read 56, timeout 0
  Per-template: 3285,4396,5406,5828,7384,5567,1114,8585,2556,1478
  CPU: 5648.4% | Mem: 4.6GiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   168.71ms   7.59ms   477.50ms    4.33s    4.88s

  90798 requests in 5.00s, 88245 responses
  Throughput: 17.64K req/s
  Bandwidth:  411.96MB/s
  Status codes: 2xx=88245, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 88245 / 88245 responses (100.0%)
  Latency overflow (>5s): 10
  Reconnects: 489
  Errors: connect 0, read 32, timeout 0
  Per-template: 8196,11246,11741,12099,10649,10007,3052,14481,3435,3339
  CPU: 7954.8% | Mem: 2.2GiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   47.36ms   1.62ms   141.00ms   346.50ms    3.77s

  117847 requests in 5.00s, 116052 responses
  Throughput: 23.20K req/s
  Bandwidth:  495.43MB/s
  Status codes: 2xx=116052, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 116052 / 116052 responses (100.0%)
  Reconnects: 924
  Per-template: 8618,14179,17164,17685,17411,16106,3817,13010,5372,2690
  CPU: 8576.5% | Mem: 2.4GiB

=== Best: 23210 req/s (CPU: 8576.5%, Mem: 2.4GiB) ===
  Input BW: 2.27GB/s (avg template: 104924 bytes)
[dry-run] Results not saved (use --save to persist)
httparena-bench-genhttp
httparena-bench-genhttp

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   210.75ms   68.80ms   255.40ms    3.98s    4.93s

  55419 requests in 5.00s, 38139 responses
  Throughput: 7.62K req/s
  Bandwidth:  234.64MB/s
  Status codes: 2xx=38139, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 38139 / 38139 responses (100.0%)
  Reconnects: 1000
  Errors: connect 0, read 679, timeout 0
  Per-template: 4223,4853,5285,5077,4039,3094,1408,6223,2053,1884
  CPU: 4193.2% | Mem: 3.8GiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   543.26ms   122.00ms    1.57s    2.55s    3.77s

  70955 requests in 5.00s, 53818 responses
  Throughput: 10.76K req/s
  Bandwidth:  402.73MB/s
  Status codes: 2xx=53818, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 53818 / 53818 responses (100.0%)
  Reconnects: 827
  Errors: connect 0, read 755, timeout 0
  Per-template: 4709,5265,5336,5030,5318,4261,2871,14215,3766,3047
  CPU: 8355.3% | 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:  100
  Templates: 10
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   263.69ms   23.50ms   831.70ms    2.63s    4.01s

  87928 requests in 5.00s, 70472 responses
  Throughput: 14.09K req/s
  Bandwidth:  450.12MB/s
  Status codes: 2xx=70472, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 70472 / 70472 responses (100.0%)
  Reconnects: 1267
  Errors: connect 0, read 1067, timeout 0
  Per-template: 6016,7505,7002,7546,6423,5797,2469,20171,4756,2787
  CPU: 6646.3% | Mem: 4.0GiB

=== Best: 14094 req/s (CPU: 6646.3%, Mem: 4.0GiB) ===
  Input BW: 1.38GB/s (avg template: 104924 bytes)
[dry-run] Results not saved (use --save to persist)
httparena-bench-genhttp
httparena-bench-genhttp
[skip] genhttp does not subscribe to baseline-h2
[skip] genhttp does not subscribe to static-h2
[skip] genhttp does not subscribe to baseline-h3
[skip] genhttp does not subscribe to static-h3
[restore] Restoring CPU governor to performance...

@MDA2AV MDA2AV marked this pull request as ready for review March 13, 2026 16:41
@MDA2AV MDA2AV merged commit 9ddacad into MDA2AV:main Mar 13, 2026
3 of 4 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.

2 participants