Skip to content

[C#] GenHTTP: Implement CRUD#629

Merged
MDA2AV merged 20 commits intoMDA2AV:mainfrom
Kaliumhexacyanoferrat:genhttp-crud
Apr 24, 2026
Merged

[C#] GenHTTP: Implement CRUD#629
MDA2AV merged 20 commits intoMDA2AV:mainfrom
Kaliumhexacyanoferrat:genhttp-crud

Conversation

@Kaliumhexacyanoferrat
Copy link
Copy Markdown
Collaborator

Description


PR Commands — comment on this PR to trigger (requires collaborator approval):

Command Description
/benchmark -f <framework> Run all benchmark tests
/benchmark -f <framework> -t <test> Run a specific test
/benchmark -f <framework> --save Run and save results (updates leaderboard on merge)

Always specify -f <framework>. Results are automatically compared against the current leaderboard.


Run benchmarks locally

You can validate and benchmark your framework locally with the lite script — no CPU pinning, fixed connection counts, all load generators run in Docker.

./scripts/validate.sh <framework>
./scripts/benchmark-lite.sh <framework> baseline
./scripts/benchmark-lite.sh --load-threads 4 <framework>

Requirements: Docker Engine on Linux. Load generators (gcannon, h2load, h2load-h3, wrk, ghz) are built as self-contained Docker images on first run.

@Kaliumhexacyanoferrat Kaliumhexacyanoferrat self-assigned this Apr 24, 2026
@Kaliumhexacyanoferrat
Copy link
Copy Markdown
Collaborator Author

/benchmark -f genhttp --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 run triggered for genhttp (all tests) with --save. Results will be posted here when done.

@MDA2AV
Copy link
Copy Markdown
Owner

MDA2AV commented Apr 24, 2026

/benchmark -f genhttp -t crud --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 run triggered for genhttp (test: crud) with --save. Results will be posted here when done.

@github-actions
Copy link
Copy Markdown
Contributor

Benchmark Results

Framework: genhttp | Test: crud

Test Conn RPS CPU Mem Δ RPS Δ Mem
crud 4096 0 1928.1% 1.5GiB NEW NEW
Full log
[info] crud experiment CPU layout: redis=0,64 | server=1-31,65-95 | gcannon=32-63,96-127 | postgres=unpinned
[info] available CPUs: 128
[info] framework: genhttp (genhttp, C#)
[info] subscribed tests: baseline,pipelined,limited-conn,json,json-comp,json-tls,upload,async-db,crud,static,echo-ws,api-4,api-16
[info] building image: httparena-genhttp
#0 building with "default" instance using docker driver

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

#2 [internal] load metadata for mcr.microsoft.com/dotnet/sdk:10.0
#2 ...

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

#2 [internal] load metadata for mcr.microsoft.com/dotnet/sdk:10.0
#2 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 [stage-1 1/3] FROM mcr.microsoft.com/dotnet/runtime:10.0@sha256:8fb7ff015fcf0ebc6e90105bd6db06875954e6dc3d374b9dbb34c732867d13e4
#6 resolve mcr.microsoft.com/dotnet/runtime:10.0@sha256:8fb7ff015fcf0ebc6e90105bd6db06875954e6dc3d374b9dbb34c732867d13e4 0.1s done
#6 DONE 0.1s

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

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

#8 [build 4/6] RUN dotnet restore
#8 CACHED

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

#10 [stage-1 2/3] WORKDIR /app
#10 CACHED

#11 [build 6/6] RUN dotnet publish -c Release --no-self-contained -o /app
#11 CACHED

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

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

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

#15 exporting to image
#15 exporting layers done
#15 exporting manifest sha256:3744d2a0370cad80b2372c48bede2cd482c6cd3d1c12e408605a375de67df145 done
#15 exporting config sha256:84acbe913567cc2ee2e4f93d52184f66bffbafcd7e7a99b0631d7ac07ff1b7b3 done
#15 exporting attestation manifest sha256:24a1ecd651a95cee1b222df80a3a63ff995f009c8726d39b782a775dbe76bc14 0.0s done
#15 exporting manifest list sha256:b7e5a7dcc7d00cb1dda42a78fd1b23398ee2d152fdce61828daebfc6632b811b
#15 exporting manifest list sha256:b7e5a7dcc7d00cb1dda42a78fd1b23398ee2d152fdce61828daebfc6632b811b 0.0s done
#15 naming to docker.io/library/httparena-genhttp:latest done
#15 unpacking to docker.io/library/httparena-genhttp:latest done
#15 DONE 0.1s
[info] tuning host for benchmark runs
[info] CPU governor → performance
[info] setting kernel socket limits
[info] setting UDP buffer sizes for QUIC
[info] setting loopback MTU to 1500 (realistic Ethernet)
[info] restarting docker daemon
[info] dropping kernel caches
[info] starting postgres sidecar
[info] postgres ready (seeded)
[info] starting redis sidecar (cpuset=0,64)
[info] redis ready

==============================================
=== genhttp / crud / 4096c (tool=gcannon) ===
==============================================
[info] waiting for server...
[info] server ready

[run 1/3]

[info] CPU 1928.1% | Mem 1.5GiB

[run 2/3]

[info] CPU 1677.5% | Mem 1.6GiB

[run 3/3]

[info] CPU 1717.1% | Mem 1.6GiB

=== Best: 0 req/s (CPU: 1928.1%, Mem: 1.5GiB) ===
[info] saved results/crud/4096/genhttp.json
httparena-bench-genhttp
httparena-bench-genhttp
[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/crud-4096.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/current.json
[info] done
httparena-postgres
httparena-redis
[info] restoring loopback MTU to 65536
[info] restoring CPU governor → powersave

@Kaliumhexacyanoferrat
Copy link
Copy Markdown
Collaborator Author

/benchmark -f genhttp -t crud --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 run triggered for genhttp (test: crud) with --save. Results will be posted here when done.

@github-actions
Copy link
Copy Markdown
Contributor

Benchmark Results

Framework: genhttp | Test: crud

Test Conn RPS CPU Mem Δ RPS Δ Mem
crud 4096 0 1919.1% 1.4GiB NEW NEW
Full log
[info] crud experiment CPU layout: redis=0,64 | server=1-31,65-95 | gcannon=32-63,96-127 | postgres=unpinned
[info] available CPUs: 128
[info] framework: genhttp (genhttp, C#)
[info] subscribed tests: baseline,pipelined,limited-conn,json,json-comp,json-tls,upload,async-db,crud,static,echo-ws,api-4,api-16
[info] building image: httparena-genhttp
#0 building with "default" instance using docker driver

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

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

#3 [internal] load metadata for mcr.microsoft.com/dotnet/runtime:10.0
#3 DONE 0.3s

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

#5 [build 1/6] FROM mcr.microsoft.com/dotnet/sdk:10.0@sha256:8a90a473da5205a16979de99d2fc20975e922c68304f5c79d564e666dc3982fc
#5 resolve mcr.microsoft.com/dotnet/sdk:10.0@sha256:8a90a473da5205a16979de99d2fc20975e922c68304f5c79d564e666dc3982fc 0.1s done
#5 DONE 0.1s

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

#7 [internal] load build context
#7 transferring context: 13.28kB done
#7 DONE 0.0s

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

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

#10 [build 4/6] RUN dotnet restore
#10 CACHED

#11 [build 6/6] RUN dotnet publish -c Release --no-self-contained -o /app
#11 CACHED

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

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

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

#15 [stage-1 4/4] RUN apt-get update  && apt-get install -y --no-install-recommends libgssapi-krb5-2  && rm -rf /var/lib/apt/lists/*
#15 CACHED

#16 exporting to image
#16 exporting layers done
#16 exporting manifest sha256:60a7e688268a9f188008ef5b51bc6c881e36823603941cf599741369def25ed4 done
#16 exporting config sha256:e31a214d649868d15e76029927e48cec4efcdac32edbe0f00b3ca2fa6fec133f done
#16 exporting attestation manifest sha256:d005dbd0cd68e2d8693c0674810b0007570a70343944eba84863dde441440039 0.0s done
#16 exporting manifest list sha256:ea32d41c201b30465341c28d6079380a6aefc725eb71a97c60f089d57ed2ecc8 0.0s done
#16 naming to docker.io/library/httparena-genhttp:latest
#16 naming to docker.io/library/httparena-genhttp:latest done
#16 unpacking to docker.io/library/httparena-genhttp:latest done
#16 DONE 0.1s
[info] tuning host for benchmark runs
[info] CPU governor → performance
[info] setting kernel socket limits
[info] setting UDP buffer sizes for QUIC
[info] setting loopback MTU to 1500 (realistic Ethernet)
[info] restarting docker daemon
[info] dropping kernel caches
[info] starting postgres sidecar
[info] postgres ready (seeded)
[info] starting redis sidecar (cpuset=0,64)
[info] redis ready

==============================================
=== genhttp / crud / 4096c (tool=gcannon) ===
==============================================
[info] waiting for server...
[info] server ready

[run 1/3]

[info] CPU 1919.1% | Mem 1.4GiB

[run 2/3]

[info] CPU 1711.8% | Mem 1.5GiB

[run 3/3]

[info] CPU 1688.6% | Mem 1.5GiB

=== Best: 0 req/s (CPU: 1919.1%, Mem: 1.4GiB) ===
[info] saved results/crud/4096/genhttp.json
httparena-bench-genhttp
httparena-bench-genhttp
[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/crud-4096.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/current.json
[info] done
httparena-postgres
httparena-redis
[info] restoring loopback MTU to 65536
[info] restoring CPU governor → powersave

@Kaliumhexacyanoferrat
Copy link
Copy Markdown
Collaborator Author

/benchmark -f genhttp -t crud --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 run triggered for genhttp (test: crud) with --save. Results will be posted here when done.

@github-actions
Copy link
Copy Markdown
Contributor

Benchmark Results

Framework: genhttp | Test: crud

Test Conn RPS CPU Mem Δ RPS Δ Mem
crud 4096 447,453 5414.2% 1.6GiB NEW NEW
Full log
[info] crud experiment CPU layout: redis=0,64 | server=1-31,65-95 | gcannon=32-63,96-127 | postgres=unpinned
[info] available CPUs: 128
[info] framework: genhttp (genhttp, C#)
[info] subscribed tests: baseline,pipelined,limited-conn,json,json-comp,json-tls,upload,async-db,crud,static,echo-ws,api-4,api-16
[info] building image: httparena-genhttp
#0 building with "default" instance using docker driver

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

#2 [internal] load metadata for mcr.microsoft.com/dotnet/runtime:10.0
#2 DONE 0.0s

#3 [internal] load metadata for mcr.microsoft.com/dotnet/sdk:10.0
#3 DONE 0.3s

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

#5 [build 1/6] FROM mcr.microsoft.com/dotnet/sdk:10.0@sha256:8a90a473da5205a16979de99d2fc20975e922c68304f5c79d564e666dc3982fc
#5 resolve mcr.microsoft.com/dotnet/sdk:10.0@sha256:8a90a473da5205a16979de99d2fc20975e922c68304f5c79d564e666dc3982fc 0.1s done
#5 DONE 0.1s

#6 [stage-1 1/3] FROM mcr.microsoft.com/dotnet/runtime:10.0@sha256:8fb7ff015fcf0ebc6e90105bd6db06875954e6dc3d374b9dbb34c732867d13e4
#6 resolve mcr.microsoft.com/dotnet/runtime:10.0@sha256:8fb7ff015fcf0ebc6e90105bd6db06875954e6dc3d374b9dbb34c732867d13e4 0.1s done
#6 DONE 0.1s

#7 [internal] load build context
#7 transferring context: 537B done
#7 DONE 0.0s

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

#9 [build 4/6] RUN dotnet restore
#9 CACHED

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

#11 [build 6/6] RUN dotnet publish -c Release --no-self-contained -o /app
#11 CACHED

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

#13 [stage-1 2/3] WORKDIR /app
#13 CACHED

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

#15 exporting to image
#15 exporting layers done
#15 exporting manifest sha256:2e8b834be935030515097a30cd663986c009bf11fa0f42012e1118e78ec8bc8a done
#15 exporting config sha256:2b24b1975c3397c015aa4f9d4626952de6b4a7ea6427f3f96f75b16b8bab1e0a done
#15 exporting attestation manifest sha256:c3e8e8184e44e4641a217cb714df1574e949c97a39f2d7d0b9b52c21d33a4dff 0.0s done
#15 exporting manifest list sha256:f66951b4609ffac1ec60b7282ae44869e23284d5a8e19db86e2150f7748309c3 0.0s done
#15 naming to docker.io/library/httparena-genhttp:latest
#15 naming to docker.io/library/httparena-genhttp:latest done
#15 unpacking to docker.io/library/httparena-genhttp:latest done
#15 DONE 0.1s
[info] tuning host for benchmark runs
[info] CPU governor → performance
[info] setting kernel socket limits
[info] setting UDP buffer sizes for QUIC
[info] setting loopback MTU to 1500 (realistic Ethernet)
[info] restarting docker daemon
[info] dropping kernel caches
[info] starting postgres sidecar
[info] postgres ready (seeded)
[info] starting redis sidecar (cpuset=0,64)
[info] redis ready

==============================================
=== genhttp / crud / 4096c (tool=gcannon) ===
==============================================
[info] waiting for server...
[info] server ready

[run 1/3]
gcannon v0.5.2
  Target:    localhost:8080/
  Threads:   64
  Conns:     4096 (64/thread)
  Pipeline:  1
  Req/conn:  200
  Templates: 20
  Expected:  200
  Duration:  15s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   8.60ms   5.31ms   20.90ms   39.70ms   64.70ms

  6714720 requests in 15.00s, 6711804 responses
  Throughput: 447.38K req/s
  Bandwidth:  184.66MB/s
  Status codes: 2xx=6711804, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 6711804 / 6711804 responses (100.0%)
  Reconnects: 31565
  Per-template: 141730,160589,185211,213830,246446,284163,319058,343072,372386,405031,438770,461400,486671,506751,510997,509164,455862,308640,202447,159586
  Per-template-ok: 141730,160589,185211,213830,246446,284163,319058,343072,372386,405031,438770,461400,486671,506751,510997,509164,455862,308640,202447,159586
[info] CPU 5414.2% | Mem 1.6GiB

[run 2/3]

[info] CPU 1587.6% | Mem 1.6GiB

[run 3/3]

[info] CPU 1680.8% | Mem 1.6GiB

=== Best: 447453 req/s (CPU: 5414.2%, Mem: 1.6GiB) ===
[info] input BW: 38.41MB/s (avg template: 90 bytes)
[info] saved results/crud/4096/genhttp.json
httparena-bench-genhttp
httparena-bench-genhttp
[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/crud-4096.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/current.json
[info] done
httparena-postgres
httparena-redis
[info] restoring loopback MTU to 65536
[info] restoring CPU governor → powersave

@Kaliumhexacyanoferrat
Copy link
Copy Markdown
Collaborator Author

/benchmark -f genhttp -t crud --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 run triggered for genhttp (test: crud) with --save. Results will be posted here when done.

@github-actions
Copy link
Copy Markdown
Contributor

Benchmark Results

Framework: genhttp | Test: crud

Test Conn RPS CPU Mem Δ RPS Δ Mem
crud 4096 0 1858.1% 1.2GiB NEW NEW
Full log
[info] crud experiment CPU layout: redis=0,64 | server=1-31,65-95 | gcannon=32-63,96-127 | postgres=unpinned
[info] available CPUs: 128
[info] framework: genhttp (genhttp, C#)
[info] subscribed tests: baseline,pipelined,limited-conn,json,json-comp,json-tls,upload,async-db,crud,static,echo-ws,api-4,api-16
[info] building image: httparena-genhttp
#0 building with "default" instance using docker driver

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

#2 [internal] load metadata for mcr.microsoft.com/dotnet/runtime:10.0
#2 DONE 0.1s

#3 [internal] load metadata for mcr.microsoft.com/dotnet/sdk:10.0
#3 DONE 0.3s

#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@sha256:8a90a473da5205a16979de99d2fc20975e922c68304f5c79d564e666dc3982fc
#6 resolve mcr.microsoft.com/dotnet/sdk:10.0@sha256:8a90a473da5205a16979de99d2fc20975e922c68304f5c79d564e666dc3982fc 0.1s done
#6 DONE 0.1s

#7 [stage-1 1/3] FROM mcr.microsoft.com/dotnet/runtime:10.0@sha256:8fb7ff015fcf0ebc6e90105bd6db06875954e6dc3d374b9dbb34c732867d13e4
#7 resolve mcr.microsoft.com/dotnet/runtime:10.0@sha256:8fb7ff015fcf0ebc6e90105bd6db06875954e6dc3d374b9dbb34c732867d13e4 0.1s done
#7 DONE 0.1s

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

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

#9 [build 6/6] RUN dotnet publish -c Release --no-self-contained -o /app
#9 CACHED

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

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

#12 [stage-1 2/3] WORKDIR /app
#12 CACHED

#13 [build 4/6] RUN dotnet restore
#13 CACHED

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

#15 exporting to image
#15 exporting layers done
#15 exporting manifest sha256:ae8fe0be8d9ff6f53bb51ab9122bbbfa67a53ed11c93d92dfd4accaa200b1d24 done
#15 exporting config sha256:013fb38cd6bff5aaf02d20291c9f9d79fe161315da0db28de812d28557c9614c done
#15 exporting attestation manifest sha256:2614ba2a5f54df2aa440a86deb8dea173bd5e50c62e92c5d5baaa18d8623b058 0.1s done
#15 exporting manifest list sha256:42f081e5efac59f7c09adf95460c2b77d4b581abfed692fca52713a9023a07a4
#15 exporting manifest list sha256:42f081e5efac59f7c09adf95460c2b77d4b581abfed692fca52713a9023a07a4 0.0s done
#15 naming to docker.io/library/httparena-genhttp:latest done
#15 unpacking to docker.io/library/httparena-genhttp:latest 0.0s done
#15 DONE 0.2s
[info] tuning host for benchmark runs
[info] CPU governor → performance
[info] setting kernel socket limits
[info] setting UDP buffer sizes for QUIC
[info] setting loopback MTU to 1500 (realistic Ethernet)
[info] restarting docker daemon
[info] dropping kernel caches
[info] starting postgres sidecar
[info] postgres ready (seeded)
[info] starting redis sidecar (cpuset=0,64)
[info] redis ready

==============================================
=== genhttp / crud / 4096c (tool=gcannon) ===
==============================================
[info] waiting for server...
[info] server ready

[run 1/3]

[info] CPU 1858.1% | Mem 1.2GiB

[run 2/3]

[info] CPU 1579.1% | Mem 1.5GiB

[run 3/3]

[info] CPU 1579.7% | Mem 1.6GiB

=== Best: 0 req/s (CPU: 1858.1%, Mem: 1.2GiB) ===
[info] saved results/crud/4096/genhttp.json
httparena-bench-genhttp
httparena-bench-genhttp
[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/crud-4096.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/current.json
[info] done
httparena-postgres
httparena-redis
[info] restoring loopback MTU to 65536
[info] restoring CPU governor → powersave

@github-actions
Copy link
Copy Markdown
Contributor

🚀 Benchmark run triggered for genhttp (test: crud) with --save. Results will be posted here when done.

@github-actions
Copy link
Copy Markdown
Contributor

Benchmark Results

Framework: genhttp | Test: crud

Test Conn RPS CPU Mem Δ RPS Δ Mem
crud 4096 507,832 4244.3% 1.5GiB NEW NEW
Full log
[info] crud experiment CPU layout: redis=0,64 | server=1-31,65-95 | gcannon=32-63,96-127 | postgres=unpinned
[info] available CPUs: 128
[info] framework: genhttp (genhttp, C#)
[info] subscribed tests: baseline,pipelined,limited-conn,json,json-comp,json-tls,upload,async-db,crud,static,echo-ws,api-4,api-16
[info] building image: httparena-genhttp
#0 building with "default" instance using docker driver

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

#2 [internal] load metadata for mcr.microsoft.com/dotnet/runtime:10.0
#2 DONE 0.0s

#3 [internal] load metadata for mcr.microsoft.com/dotnet/sdk:10.0
#3 DONE 0.3s

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

#5 [stage-1 1/3] FROM mcr.microsoft.com/dotnet/runtime:10.0@sha256:8fb7ff015fcf0ebc6e90105bd6db06875954e6dc3d374b9dbb34c732867d13e4
#5 resolve mcr.microsoft.com/dotnet/runtime:10.0@sha256:8fb7ff015fcf0ebc6e90105bd6db06875954e6dc3d374b9dbb34c732867d13e4 0.1s done
#5 DONE 0.1s

#6 [build 1/6] FROM mcr.microsoft.com/dotnet/sdk:10.0@sha256:8a90a473da5205a16979de99d2fc20975e922c68304f5c79d564e666dc3982fc
#6 resolve mcr.microsoft.com/dotnet/sdk:10.0@sha256:8a90a473da5205a16979de99d2fc20975e922c68304f5c79d564e666dc3982fc 0.1s done
#6 DONE 0.1s

#7 [internal] load build context
#7 transferring context: 537B done
#7 DONE 0.0s

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

#9 [build 4/6] RUN dotnet restore
#9 CACHED

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

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

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

#13 [build 6/6] RUN dotnet publish -c Release --no-self-contained -o /app
#13 CACHED

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

#15 exporting to image
#15 exporting layers done
#15 exporting manifest sha256:7f3109c7e88af1e784ad17d3d23291d6458c7fa5aec40b7215a517e12fed62ad done
#15 exporting config sha256:b4bdfcd3e8f6713b6f6a1a944b4d1c71afa8e69411c6e6206b59bf59d8c7ea01 done
#15 exporting attestation manifest sha256:f30c3e38c078d168ede2282abfd68d25581bfa8d21dda8f23ca26a0a2ea0b030 0.0s done
#15 exporting manifest list sha256:0a578db695534d9d3f0a30101adffb8456506e5de2ab48efc649d98f1c5a7013 0.0s done
#15 naming to docker.io/library/httparena-genhttp:latest
#15 naming to docker.io/library/httparena-genhttp:latest done
#15 unpacking to docker.io/library/httparena-genhttp:latest done
#15 DONE 0.1s
[info] tuning host for benchmark runs
[info] CPU governor → performance
[info] setting kernel socket limits
[info] setting UDP buffer sizes for QUIC
[info] setting loopback MTU to 1500 (realistic Ethernet)
[info] restarting docker daemon
[info] dropping kernel caches
[info] starting postgres sidecar
[info] postgres ready (seeded)
[info] starting redis sidecar (cpuset=0,64)
[info] redis ready

==============================================
=== genhttp / crud / 4096c (tool=gcannon) ===
==============================================
[info] waiting for server...
[info] server ready

[run 1/3]
gcannon v0.5.2
  Target:    localhost:8080/
  Threads:   64
  Conns:     4096 (64/thread)
  Pipeline:  1
  Req/conn:  200
  Templates: 20
  Expected:  200
  Duration:  15s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   9.72ms   6.75ms   21.90ms   38.10ms   61.70ms

  5965075 requests in 15.00s, 5962227 responses
  Throughput: 397.42K req/s
  Bandwidth:  158.85MB/s
  Status codes: 2xx=5962227, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 5962227 / 5962227 responses (100.0%)
  Reconnects: 27818
  Per-template: 140983,161979,184872,209100,245002,279527,295672,326171,357770,372160,401210,407045,405371,405904,405998,405656,354628,256244,189244,157691
  Per-template-ok: 140983,161979,184872,209100,245002,279527,295672,326171,357770,372160,401210,407045,405371,405904,405998,405656,354628,256244,189244,157691
[info] CPU 5112.1% | Mem 1.5GiB

[run 2/3]

[info] CPU 1484.2% | Mem 1.6GiB

[run 3/3]
gcannon v0.5.2
  Target:    localhost:8080/
  Threads:   64
  Conns:     4096 (64/thread)
  Pipeline:  1
  Req/conn:  200
  Templates: 20
  Expected:  200
  Duration:  15s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   7.70ms   3.90ms   18.70ms   30.10ms   41.70ms

  7619661 requests in 15.00s, 7617493 responses
  Throughput: 507.76K req/s
  Bandwidth:  209.39MB/s
  Status codes: 2xx=7617493, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 7617493 / 7617493 responses (100.0%)
  Reconnects: 36156
  Per-template: 197239,191028,220478,244705,268974,304323,331783,359002,384773,419217,447948,471124,503458,527105,546272,562860,543197,466312,362497,265198
  Per-template-ok: 197239,191028,220478,244705,268974,304323,331783,359002,384773,419217,447948,471124,503458,527105,546272,562860,543197,466312,362497,265198
[info] CPU 4244.3% | Mem 1.5GiB

=== Best: 507832 req/s (CPU: 4244.3%, Mem: 1.5GiB) ===
[info] input BW: 43.59MB/s (avg template: 90 bytes)
[info] saved results/crud/4096/genhttp.json
httparena-bench-genhttp
httparena-bench-genhttp
[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/crud-4096.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/current.json
[info] done
httparena-postgres
httparena-redis
[info] restoring loopback MTU to 65536
[info] restoring CPU governor → powersave

@Kaliumhexacyanoferrat
Copy link
Copy Markdown
Collaborator Author

Kaliumhexacyanoferrat commented Apr 24, 2026

/benchmark -f aspnet-minimal -t crud

@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 run triggered for aspnet-minimal (test: crud) with --save. Results will be posted here when done.

@github-actions
Copy link
Copy Markdown
Contributor

Benchmark Results

Framework: aspnet-minimal | Test: crud

Test Conn RPS CPU Mem Δ RPS Δ Mem
crud 4096 363,355 4739.3% 509MiB -8.4% +10.7%
Full log
[info] crud experiment CPU layout: redis=0,64 | server=1-31,65-95 | gcannon=32-63,96-127 | postgres=unpinned
[info] available CPUs: 128
[info] framework: aspnet-minimal (aspnet-minimal, C#)
[info] subscribed tests: baseline,pipelined,limited-conn,json,json-comp,json-tls,upload,api-4,api-16,static,async-db,crud,baseline-h2,static-h2,baseline-h2c,json-h2c,baseline-h3,static-h3
[info] building image: httparena-aspnet-minimal
#0 building with "default" instance using docker driver

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

#2 [internal] load metadata for mcr.microsoft.com/dotnet/aspnet:10.0
#2 DONE 0.0s

#3 [internal] load metadata for mcr.microsoft.com/dotnet/sdk:10.0
#3 DONE 0.3s

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

#5 [build 1/5] FROM mcr.microsoft.com/dotnet/sdk:10.0@sha256:8a90a473da5205a16979de99d2fc20975e922c68304f5c79d564e666dc3982fc
#5 resolve mcr.microsoft.com/dotnet/sdk:10.0@sha256:8a90a473da5205a16979de99d2fc20975e922c68304f5c79d564e666dc3982fc 0.1s done
#5 DONE 0.1s

#6 [stage-1 1/5] FROM mcr.microsoft.com/dotnet/aspnet:10.0@sha256:55e37c7795bfaf6b9cc5d77c155811d9569f529d86e20647704bc1d7dd9741d4
#6 resolve mcr.microsoft.com/dotnet/aspnet:10.0@sha256:55e37c7795bfaf6b9cc5d77c155811d9569f529d86e20647704bc1d7dd9741d4 0.1s done
#6 DONE 0.1s

#7 [internal] load build context
#7 transferring context: 1.79MB 0.0s done
#7 DONE 0.0s

#8 [stage-1 2/5] ADD https://packages.microsoft.com/config/debian/12/packages-microsoft-prod.deb /packages-microsoft-prod.deb
#8 DONE 0.2s

#9 [stage-1 3/5] RUN dpkg -i packages-microsoft-prod.deb && rm packages-microsoft-prod.deb     && apt-get update     && apt-get install -y --no-install-recommends libmsquic     && apt-get clean     && rm -rf /var/lib/apt/lists/*
#9 CACHED

#10 [build 4/5] COPY data/static/ wwwroot/static/
#10 CACHED

#11 [build 5/5] RUN dotnet publish -c Release -o out
#11 CACHED

#12 [stage-1 2/5] ADD https://packages.microsoft.com/config/debian/12/packages-microsoft-prod.deb /packages-microsoft-prod.deb
#12 CACHED

#13 [stage-1 4/5] WORKDIR /app
#13 CACHED

#14 [build 2/5] WORKDIR /app
#14 CACHED

#15 [build 3/5] COPY frameworks/aspnet-minimal/ .
#15 CACHED

#16 [stage-1 5/5] COPY --from=build /app/out .
#16 CACHED

#17 exporting to image
#17 exporting layers done
#17 exporting manifest sha256:f632d61706b44d6ea5abacb76194efe3dd8df67ab2f92fdf4555255f2e7b318b 0.0s done
#17 exporting config sha256:0e1e9508344c264abff4587fdb809fbfc17a7810384cc07069061c2af614df00 0.0s done
#17 exporting attestation manifest sha256:bedc81fecb375227b59058bb5b3e33c286dd294b0f32270242e60d678637423a 0.0s done
#17 exporting manifest list sha256:38547bf7888f12b416efbbef0609cef585f6a76399cd1993f6be7c6a2435d002 0.0s done
#17 naming to docker.io/library/httparena-aspnet-minimal:latest done
#17 unpacking to docker.io/library/httparena-aspnet-minimal:latest 0.1s done
#17 DONE 0.2s
[info] tuning host for benchmark runs
[info] CPU governor → performance
[info] setting kernel socket limits
[info] setting UDP buffer sizes for QUIC
[info] setting loopback MTU to 1500 (realistic Ethernet)
[info] restarting docker daemon
[info] dropping kernel caches
[info] starting postgres sidecar
[info] postgres ready (seeded)
[info] starting redis sidecar (cpuset=0,64)
[info] redis ready

==============================================
=== aspnet-minimal / crud / 4096c (tool=gcannon) ===
==============================================
[info] waiting for server...
[info] server ready

[run 1/3]
gcannon v0.5.2
  Target:    localhost:8080/
  Threads:   64
  Conns:     4096 (64/thread)
  Pipeline:  1
  Req/conn:  200
  Templates: 20
  Expected:  200
  Duration:  15s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   15.01ms   14.20ms   28.20ms   39.40ms   59.00ms

  3745761 requests in 15.00s, 3742480 responses
  Throughput: 249.46K req/s
  Bandwidth:  87.05MB/s
  Status codes: 2xx=3742480, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 3742480 / 3742480 responses (100.0%)
  Reconnects: 16437
  Per-template: 251767,265634,259289,224800,192268,158701,157652,157816,158001,157662,157499,158484,159171,158075,157684,157849,175165,203127,212443,219393
  Per-template-ok: 251767,265634,259289,224800,192268,158701,157652,157816,158001,157662,157499,158484,159171,158075,157684,157849,175165,203127,212443,219393
[info] CPU 4268.9% | Mem 487MiB

[run 2/3]
gcannon v0.5.2
  Target:    localhost:8080/
  Threads:   64
  Conns:     4096 (64/thread)
  Pipeline:  1
  Req/conn:  200
  Templates: 20
  Expected:  200
  Duration:  15s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   10.52ms   8.82ms   17.80ms   25.50ms   32.10ms

  5364896 requests in 15.00s, 5361597 responses
  Throughput: 357.39K req/s
  Bandwidth:  124.69MB/s
  Status codes: 2xx=5361597, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 5361589 / 5361597 responses (100.0%)
  Reconnects: 24687
  Per-template: 320697,332895,332122,326176,302837,279066,254981,240389,234124,234398,235711,234029,232091,233974,235777,235269,246964,274955,283136,291998
  Per-template-ok: 320697,332895,332122,326176,302837,279066,254981,240389,234124,234398,235711,234029,232091,233974,235777,235269,246964,274955,283136,291998
[info] CPU 4796.0% | Mem 501MiB

[run 3/3]
gcannon v0.5.2
  Target:    localhost:8080/
  Threads:   64
  Conns:     4096 (64/thread)
  Pipeline:  1
  Req/conn:  200
  Templates: 20
  Expected:  200
  Duration:  15s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   10.31ms   8.63ms   17.80ms   26.00ms   34.70ms

  5453567 requests in 15.00s, 5450335 responses
  Throughput: 363.30K req/s
  Bandwidth:  127.57MB/s
  Status codes: 2xx=5450335, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 5450331 / 5450335 responses (100.0%)
  Reconnects: 25376
  Per-template: 320246,337525,334730,322794,300880,284099,255776,247216,238781,237787,240020,240409,238602,239187,240296,241192,259629,280933,289913,300316
  Per-template-ok: 320246,337525,334730,322794,300880,284099,255776,247216,238781,237787,240020,240409,238602,239187,240296,241192,259629,280933,289913,300316
[info] CPU 4739.3% | Mem 509MiB

=== Best: 363355 req/s (CPU: 4739.3%, Mem: 509MiB) ===
[info] input BW: 31.19MB/s (avg template: 90 bytes)
[info] saved results/crud/4096/aspnet-minimal.json
httparena-bench-aspnet-minimal
httparena-bench-aspnet-minimal
[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/crud-4096.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/current.json
[info] done
httparena-postgres
httparena-redis
[info] restoring loopback MTU to 65536
[info] restoring CPU governor → powersave

@Kaliumhexacyanoferrat
Copy link
Copy Markdown
Collaborator Author

/benchmark -f genhttp -t crud --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 run triggered for genhttp (test: crud) with --save. Results will be posted here when done.

@github-actions
Copy link
Copy Markdown
Contributor

Benchmark Results

Framework: genhttp | Test: crud

Test Conn RPS CPU Mem Δ RPS Δ Mem
crud 4096 516,519 4479.0% 1.5GiB NEW NEW
Full log
[info] crud experiment CPU layout: redis=0,64 | server=1-31,65-95 | gcannon=32-63,96-127 | postgres=unpinned
[info] available CPUs: 128
[info] framework: genhttp (genhttp, C#)
[info] subscribed tests: baseline,pipelined,limited-conn,json,json-comp,json-tls,upload,async-db,crud,static,echo-ws,api-4,api-16
[info] building image: httparena-genhttp
#0 building with "default" instance using docker driver

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

#2 [internal] load metadata for mcr.microsoft.com/dotnet/runtime:10.0
#2 DONE 0.0s

#3 [internal] load metadata for mcr.microsoft.com/dotnet/sdk:10.0
#3 DONE 0.3s

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

#5 [build 1/6] FROM mcr.microsoft.com/dotnet/sdk:10.0@sha256:8a90a473da5205a16979de99d2fc20975e922c68304f5c79d564e666dc3982fc
#5 resolve mcr.microsoft.com/dotnet/sdk:10.0@sha256:8a90a473da5205a16979de99d2fc20975e922c68304f5c79d564e666dc3982fc 0.1s done
#5 DONE 0.1s

#6 [stage-1 1/3] FROM mcr.microsoft.com/dotnet/runtime:10.0@sha256:8fb7ff015fcf0ebc6e90105bd6db06875954e6dc3d374b9dbb34c732867d13e4
#6 resolve mcr.microsoft.com/dotnet/runtime:10.0@sha256:8fb7ff015fcf0ebc6e90105bd6db06875954e6dc3d374b9dbb34c732867d13e4 0.1s done
#6 DONE 0.1s

#7 [internal] load build context
#7 transferring context: 537B done
#7 DONE 0.0s

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

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

#10 [build 4/6] RUN dotnet restore
#10 CACHED

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

#12 [build 6/6] RUN dotnet publish -c Release --no-self-contained -o /app
#12 CACHED

#13 [stage-1 2/3] WORKDIR /app
#13 CACHED

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

#15 exporting to image
#15 exporting layers done
#15 exporting manifest sha256:a02e7d9af238a82417f8c25182ac01eb476a307c2fe24094087ab2ecb416dde0 done
#15 exporting config sha256:828ff121d4b550fb1c5b3a4862b70b1c89bb6fe326bdc9e31297fb3d841ab431 done
#15 exporting attestation manifest sha256:3c3b4bbfd9118357cb4e7a5dad48566b02ce866c18f72815f99ccadc70b5eb66 0.0s done
#15 exporting manifest list sha256:0ded4441b00695f584854cedca6cdc5183e03b172c96b0983a8c1a455cc85e4f 0.0s done
#15 naming to docker.io/library/httparena-genhttp:latest
#15 naming to docker.io/library/httparena-genhttp:latest done
#15 unpacking to docker.io/library/httparena-genhttp:latest done
#15 DONE 0.1s
[info] tuning host for benchmark runs
[info] CPU governor → performance
[info] setting kernel socket limits
[info] setting UDP buffer sizes for QUIC
[info] setting loopback MTU to 1500 (realistic Ethernet)
[info] restarting docker daemon
[info] dropping kernel caches
[info] starting postgres sidecar
[info] postgres ready (seeded)
[info] starting redis sidecar (cpuset=0,64)
[info] redis ready

==============================================
=== genhttp / crud / 4096c (tool=gcannon) ===
==============================================
[info] waiting for server...
[info] server ready

[run 1/3]

[info] CPU 1600.4% | Mem 1.3GiB

[run 2/3]
gcannon v0.5.2
  Target:    localhost:8080/
  Threads:   64
  Conns:     4096 (64/thread)
  Pipeline:  1
  Req/conn:  200
  Templates: 20
  Expected:  200
  Duration:  15s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   7.56ms   3.78ms   18.30ms   29.50ms   44.50ms

  7750123 requests in 15.00s, 7747793 responses
  Throughput: 516.45K req/s
  Bandwidth:  212.90MB/s
  Status codes: 2xx=7747793, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 7747785 / 7747793 responses (100.0%)
  Reconnects: 36803
  Per-template: 213844,199219,220278,254219,274999,301128,339100,365492,383492,419045,450745,473890,503061,533945,550960,565619,554876,479719,378619,285535
  Per-template-ok: 213844,199219,220278,254219,274999,301128,339100,365492,383492,419045,450745,473890,503061,533945,550960,565619,554876,479719,378619,285535
[info] CPU 4479.0% | Mem 1.5GiB

[run 3/3]

[info] CPU 1512.9% | Mem 1.6GiB

=== Best: 516519 req/s (CPU: 4479.0%, Mem: 1.5GiB) ===
[info] input BW: 44.33MB/s (avg template: 90 bytes)
[info] saved results/crud/4096/genhttp.json
httparena-bench-genhttp
httparena-bench-genhttp
[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/crud-4096.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/current.json
[info] done
httparena-postgres
httparena-redis
[info] restoring loopback MTU to 65536
[info] restoring CPU governor → powersave

@Kaliumhexacyanoferrat
Copy link
Copy Markdown
Collaborator Author

/benchmark -f genhttp -t crud --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 run triggered for genhttp (test: crud) with --save. Results will be posted here when done.

@github-actions
Copy link
Copy Markdown
Contributor

Benchmark Results

Framework: genhttp | Test: crud

Test Conn RPS CPU Mem Δ RPS Δ Mem
crud 4096 518,743 4147.5% 1.8GiB NEW NEW
Full log
[info] crud experiment CPU layout: redis=0,64 | server=1-31,65-95 | gcannon=32-63,96-127 | postgres=unpinned
[info] available CPUs: 128
[info] framework: genhttp (genhttp, C#)
[info] subscribed tests: baseline,pipelined,limited-conn,json,json-comp,json-tls,upload,async-db,crud,static,echo-ws,api-4,api-16
[info] building image: httparena-genhttp
#0 building with "default" instance using docker driver

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

#2 [internal] load metadata for mcr.microsoft.com/dotnet/runtime:10.0
#2 DONE 0.0s

#3 [internal] load metadata for mcr.microsoft.com/dotnet/sdk:10.0
#3 DONE 0.3s

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

#5 [stage-1 1/3] FROM mcr.microsoft.com/dotnet/runtime:10.0@sha256:8fb7ff015fcf0ebc6e90105bd6db06875954e6dc3d374b9dbb34c732867d13e4
#5 resolve mcr.microsoft.com/dotnet/runtime:10.0@sha256:8fb7ff015fcf0ebc6e90105bd6db06875954e6dc3d374b9dbb34c732867d13e4 0.1s done
#5 DONE 0.1s

#6 [build 1/6] FROM mcr.microsoft.com/dotnet/sdk:10.0@sha256:8a90a473da5205a16979de99d2fc20975e922c68304f5c79d564e666dc3982fc
#6 resolve mcr.microsoft.com/dotnet/sdk:10.0@sha256:8a90a473da5205a16979de99d2fc20975e922c68304f5c79d564e666dc3982fc 0.1s done
#6 DONE 0.1s

#7 [internal] load build context
#7 transferring context: 537B done
#7 DONE 0.0s

#8 [build 4/6] RUN dotnet restore
#8 CACHED

#9 [build 6/6] RUN dotnet publish -c Release --no-self-contained -o /app
#9 CACHED

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

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

#12 [stage-1 2/3] WORKDIR /app
#12 CACHED

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

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

#15 exporting to image
#15 exporting layers done
#15 exporting manifest sha256:6a9492b803b9ca7911eb0976aa081d1896b4fc2078307aff5f3b12f3b1e2134b done
#15 exporting config sha256:6c01296a11b0b9edca80534a9deea4f0b997429e8e9972f274cc09473991020e done
#15 exporting attestation manifest sha256:3e1edd9bf73460de7631cbdef718e31359634df48343864ce52ed0eb3e506daf 0.0s done
#15 exporting manifest list sha256:70d85d21ce6a971f1302b1f4268fb34fd0f5a2cae4c05af1c6dc3da7b9ece3d8 0.0s done
#15 naming to docker.io/library/httparena-genhttp:latest
#15 naming to docker.io/library/httparena-genhttp:latest done
#15 unpacking to docker.io/library/httparena-genhttp:latest 0.0s done
#15 DONE 0.1s
[info] tuning host for benchmark runs
[info] CPU governor → performance
[info] setting kernel socket limits
[info] setting UDP buffer sizes for QUIC
[info] setting loopback MTU to 1500 (realistic Ethernet)
[info] restarting docker daemon
[info] dropping kernel caches
[info] starting postgres sidecar
[info] postgres ready (seeded)
[info] starting redis sidecar (cpuset=0,64)
[info] redis ready

==============================================
=== genhttp / crud / 4096c (tool=gcannon) ===
==============================================
[info] waiting for server...
[info] server ready

[run 1/3]
gcannon v0.5.2
  Target:    localhost:8080/
  Threads:   64
  Conns:     4096 (64/thread)
  Pipeline:  1
  Req/conn:  200
  Templates: 20
  Expected:  200
  Duration:  15s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   9.75ms   6.77ms   21.80ms   37.70ms   63.40ms

  5962326 requests in 15.00s, 5959474 responses
  Throughput: 397.24K req/s
  Bandwidth:  153.31MB/s
  Status codes: 2xx=5959474, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 5959474 / 5959474 responses (100.0%)
  Reconnects: 27790
  Per-template: 140063,161676,184213,208721,245390,278563,296350,327034,354902,372134,399103,406115,407293,407306,406902,405654,355394,254772,192736,155153
  Per-template-ok: 140063,161676,184213,208721,245390,278563,296350,327034,354902,372134,399103,406115,407293,407306,406902,405654,355394,254772,192736,155153
[info] CPU 5040.3% | Mem 1.6GiB

[run 2/3]
gcannon v0.5.2
  Target:    localhost:8080/
  Threads:   64
  Conns:     4096 (64/thread)
  Pipeline:  1
  Req/conn:  200
  Templates: 20
  Expected:  200
  Duration:  15s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   7.57ms   3.87ms   18.40ms   29.90ms   40.30ms

  7783016 requests in 15.00s, 7781151 responses
  Throughput: 518.66K req/s
  Bandwidth:  207.06MB/s
  Status codes: 2xx=7781151, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 7781140 / 7781151 responses (100.0%)
  Reconnects: 36968
  Per-template: 213003,199443,225209,252258,276353,308509,342233,366564,391854,424830,452752,475788,504319,531323,552583,572379,555945,477360,374732,283703
  Per-template-ok: 213003,199443,225209,252258,276353,308509,342233,366564,391854,424830,452752,475788,504319,531323,552583,572379,555945,477360,374732,283703
[info] CPU 4147.5% | Mem 1.8GiB

[run 3/3]
gcannon v0.5.2
  Target:    localhost:8080/
  Threads:   64
  Conns:     4096 (64/thread)
  Pipeline:  1
  Req/conn:  200
  Templates: 20
  Expected:  200
  Duration:  15s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   7.48ms   3.71ms   18.60ms   29.90ms   38.60ms

  7763690 requests in 15.00s, 7760736 responses
  Throughput: 517.31K req/s
  Bandwidth:  206.66MB/s
  Status codes: 2xx=7760736, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 7760724 / 7760736 responses (100.0%)
  Reconnects: 36847
  Per-template: 210537,198869,217583,253941,265736,299005,338861,365568,382867,419354,458293,479978,502587,536678,555499,566466,556892,489779,381955,280276
  Per-template-ok: 210537,198869,217583,253941,265736,299005,338861,365567,382867,419354,458293,479978,502587,536678,555499,566466,556892,489779,381955,280276
[info] CPU 4186.2% | Mem 1.6GiB

=== Best: 518743 req/s (CPU: 4147.5%, Mem: 1.8GiB) ===
[info] input BW: 44.52MB/s (avg template: 90 bytes)
[info] saved results/crud/4096/genhttp.json
httparena-bench-genhttp
httparena-bench-genhttp
[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/crud-4096.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/current.json
[info] done
httparena-postgres
httparena-redis
[info] restoring loopback MTU to 65536
[info] restoring CPU governor → powersave

@Kaliumhexacyanoferrat
Copy link
Copy Markdown
Collaborator Author

/benchmark -f genhttp -t crud --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 run triggered for genhttp (test: crud) with --save. Results will be posted here when done.

@github-actions
Copy link
Copy Markdown
Contributor

Benchmark Results

Framework: genhttp | Test: crud

Test Conn RPS CPU Mem Δ RPS Δ Mem
crud 4096 503,585 3839.5% 1.5GiB NEW NEW
Full log
[info] crud experiment CPU layout: redis=0,64 | server=1-31,65-95 | gcannon=32-63,96-127 | postgres=unpinned
[info] available CPUs: 128
[info] framework: genhttp (genhttp, C#)
[info] subscribed tests: baseline,pipelined,limited-conn,json,json-comp,json-tls,upload,async-db,crud,static,echo-ws,api-4,api-16
[info] building image: httparena-genhttp
#0 building with "default" instance using docker driver

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

#2 [internal] load metadata for mcr.microsoft.com/dotnet/runtime:10.0
#2 DONE 0.1s

#3 [internal] load metadata for mcr.microsoft.com/dotnet/sdk:10.0
#3 DONE 0.3s

#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@sha256:8a90a473da5205a16979de99d2fc20975e922c68304f5c79d564e666dc3982fc
#6 resolve mcr.microsoft.com/dotnet/sdk:10.0@sha256:8a90a473da5205a16979de99d2fc20975e922c68304f5c79d564e666dc3982fc 0.1s done
#6 DONE 0.1s

#7 [stage-1 1/3] FROM mcr.microsoft.com/dotnet/runtime:10.0@sha256:8fb7ff015fcf0ebc6e90105bd6db06875954e6dc3d374b9dbb34c732867d13e4
#7 resolve mcr.microsoft.com/dotnet/runtime:10.0@sha256:8fb7ff015fcf0ebc6e90105bd6db06875954e6dc3d374b9dbb34c732867d13e4 0.1s done
#7 DONE 0.1s

#5 [internal] load build context
#5 transferring context: 19.32kB done
#5 DONE 0.0s

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

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

#10 [build 6/6] RUN dotnet publish -c Release --no-self-contained -o /app
#10 CACHED

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

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

#13 [build 4/6] RUN dotnet restore
#13 CACHED

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

#15 exporting to image
#15 exporting layers done
#15 exporting manifest sha256:6a9492b803b9ca7911eb0976aa081d1896b4fc2078307aff5f3b12f3b1e2134b done
#15 exporting config sha256:6c01296a11b0b9edca80534a9deea4f0b997429e8e9972f274cc09473991020e done
#15 exporting attestation manifest sha256:0112535171be8f932d9173960f85e7391df3344e0fd573a1512208e0d2a964be 0.0s done
#15 exporting manifest list sha256:35af9981eb0fe31c140273e083689281d88eb110660ef3eaa59d7a438017df06
#15 exporting manifest list sha256:35af9981eb0fe31c140273e083689281d88eb110660ef3eaa59d7a438017df06 0.0s done
#15 naming to docker.io/library/httparena-genhttp:latest done
#15 unpacking to docker.io/library/httparena-genhttp:latest 0.0s done
#15 DONE 0.1s
[info] tuning host for benchmark runs
[info] CPU governor → performance
[info] setting kernel socket limits
[info] setting UDP buffer sizes for QUIC
[info] setting loopback MTU to 1500 (realistic Ethernet)
[info] restarting docker daemon
[info] dropping kernel caches
[info] starting postgres sidecar
[info] postgres ready (seeded)
[info] starting redis sidecar (cpuset=0,64)
[info] redis ready

==============================================
=== genhttp / crud / 4096c (tool=gcannon) ===
==============================================
[info] waiting for server...
[info] server ready

[run 1/3]
gcannon v0.5.2
  Target:    localhost:8080/
  Threads:   64
  Conns:     4096 (64/thread)
  Pipeline:  1
  Req/conn:  200
  Templates: 20
  Expected:  200
  Duration:  15s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   9.62ms   6.01ms   22.10ms   44.20ms   73.80ms

  6050826 requests in 15.00s, 6047965 responses
  Throughput: 403.13K req/s
  Bandwidth:  156.33MB/s
  Status codes: 2xx=6047965, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 6047965 / 6047965 responses (100.0%)
  Reconnects: 28283
  Per-template: 140852,162902,183697,206004,244944,276256,293933,326407,361906,375802,404444,417079,417539,416098,418175,416836,368310,269366,192404,155011
  Per-template-ok: 140852,162902,183697,206004,244944,276256,293933,326407,361906,375802,404444,417079,417539,416098,418175,416836,368310,269366,192404,155011
[info] CPU 4779.3% | Mem 1.3GiB

[run 2/3]
gcannon v0.5.2
  Target:    localhost:8080/
  Threads:   64
  Conns:     4096 (64/thread)
  Pipeline:  1
  Req/conn:  200
  Templates: 20
  Expected:  200
  Duration:  15s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   7.77ms   4.07ms   19.20ms   31.40ms   42.80ms

  7554014 requests in 15.00s, 7551562 responses
  Throughput: 503.35K req/s
  Bandwidth:  199.92MB/s
  Status codes: 2xx=7551562, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 7551552 / 7551562 responses (100.0%)
  Reconnects: 35845
  Per-template: 197921,191801,221877,245773,269860,304444,332767,362069,389128,423249,446411,472876,502833,522570,541196,553290,525580,447482,343396,257029
  Per-template-ok: 197921,191801,221877,245773,269860,304444,332767,362069,389128,423249,446411,472876,502833,522570,541196,553290,525580,447482,343396,257029
[info] CPU 3859.2% | Mem 1.5GiB

[run 3/3]
gcannon v0.5.2
  Target:    localhost:8080/
  Threads:   64
  Conns:     4096 (64/thread)
  Pipeline:  1
  Req/conn:  200
  Templates: 20
  Expected:  200
  Duration:  15s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   7.78ms   4.19ms   19.00ms   31.70ms   42.90ms

  7556011 requests in 15.00s, 7553783 responses
  Throughput: 503.51K req/s
  Bandwidth:  199.83MB/s
  Status codes: 2xx=7553783, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 7553774 / 7553783 responses (100.0%)
  Reconnects: 35864
  Per-template: 201501,194487,221507,252813,273684,302282,337474,360468,383586,420541,446307,470867,499470,521082,539703,552574,524562,443136,346126,261604
  Per-template-ok: 201501,194487,221507,252813,273684,302282,337474,360468,383586,420541,446307,470867,499470,521082,539703,552574,524562,443136,346126,261604
[info] CPU 3839.5% | Mem 1.5GiB

=== Best: 503585 req/s (CPU: 3839.5%, Mem: 1.5GiB) ===
[info] input BW: 43.22MB/s (avg template: 90 bytes)
[info] saved results/crud/4096/genhttp.json
httparena-bench-genhttp
httparena-bench-genhttp
[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/crud-4096.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/current.json
[info] done
httparena-postgres
httparena-redis
[info] restoring loopback MTU to 65536
[info] restoring CPU governor → powersave

@Kaliumhexacyanoferrat Kaliumhexacyanoferrat marked this pull request as ready for review April 24, 2026 16:53
@MDA2AV MDA2AV merged commit aaf8fde into MDA2AV:main Apr 24, 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