From 117d28a9580b4a44d23ff4d53bdcafc9b79458d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20N=C3=A4geli?= Date: Tue, 19 May 2026 17:46:35 +0200 Subject: [PATCH 1/6] Add experimental entry for GenHTTP 11 --- frameworks/genhttp-11/Dockerfile | 15 ++ .../genhttp-11/Infrastructure/Postgres.cs | 34 ++++ frameworks/genhttp-11/Model.cs | 59 ++++++ frameworks/genhttp-11/Program.cs | 27 +++ frameworks/genhttp-11/Project.cs | 68 +++++++ frameworks/genhttp-11/README.md | 30 +++ frameworks/genhttp-11/Tests/AsyncDatabase.cs | 49 +++++ frameworks/genhttp-11/Tests/Baseline.cs | 15 ++ frameworks/genhttp-11/Tests/Crud.cs | 175 ++++++++++++++++++ frameworks/genhttp-11/Tests/EchoHandler.cs | 23 +++ frameworks/genhttp-11/Tests/Json.cs | 60 ++++++ frameworks/genhttp-11/Tests/Upload.cs | 38 ++++ frameworks/genhttp-11/genhttp.csproj | 25 +++ frameworks/genhttp-11/meta.json | 27 +++ 14 files changed, 645 insertions(+) create mode 100644 frameworks/genhttp-11/Dockerfile create mode 100644 frameworks/genhttp-11/Infrastructure/Postgres.cs create mode 100644 frameworks/genhttp-11/Model.cs create mode 100644 frameworks/genhttp-11/Program.cs create mode 100644 frameworks/genhttp-11/Project.cs create mode 100644 frameworks/genhttp-11/README.md create mode 100644 frameworks/genhttp-11/Tests/AsyncDatabase.cs create mode 100644 frameworks/genhttp-11/Tests/Baseline.cs create mode 100644 frameworks/genhttp-11/Tests/Crud.cs create mode 100644 frameworks/genhttp-11/Tests/EchoHandler.cs create mode 100644 frameworks/genhttp-11/Tests/Json.cs create mode 100644 frameworks/genhttp-11/Tests/Upload.cs create mode 100644 frameworks/genhttp-11/genhttp.csproj create mode 100644 frameworks/genhttp-11/meta.json diff --git a/frameworks/genhttp-11/Dockerfile b/frameworks/genhttp-11/Dockerfile new file mode 100644 index 000000000..c86794a18 --- /dev/null +++ b/frameworks/genhttp-11/Dockerfile @@ -0,0 +1,15 @@ +FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build +WORKDIR /source + +COPY genhttp.csproj ./ +RUN dotnet restore + +COPY . . +RUN dotnet publish -c Release --no-self-contained -o /app + +FROM mcr.microsoft.com/dotnet/runtime:10.0 +WORKDIR /app +COPY --from=build /app . + +EXPOSE 8080 8081 8443 +ENTRYPOINT ["dotnet", "genhttp.dll"] diff --git a/frameworks/genhttp-11/Infrastructure/Postgres.cs b/frameworks/genhttp-11/Infrastructure/Postgres.cs new file mode 100644 index 000000000..8a38fc971 --- /dev/null +++ b/frameworks/genhttp-11/Infrastructure/Postgres.cs @@ -0,0 +1,34 @@ +using Npgsql; + +namespace genhttp.Infrastructure; + +public static class Postgres +{ + private static readonly NpgsqlDataSource? _pool = OpenPool(); + + public static NpgsqlDataSource? Pool { get => _pool; } + + private static NpgsqlDataSource? OpenPool() + { + var dbUrl = Environment.GetEnvironmentVariable("DATABASE_URL"); + + if (string.IsNullOrEmpty(dbUrl)) return null; + + try + { + var uri = new Uri(dbUrl); + var userInfo = uri.UserInfo.Split(':'); + var maxConn = int.TryParse(Environment.GetEnvironmentVariable("DATABASE_MAX_CONN"), out var p) && p > 0 ? p : 256; + var minConn = Math.Min(64, maxConn); + var connStr = $"Host={uri.Host};Port={uri.Port};Username={userInfo[0]};Password={userInfo[1]};Database={uri.AbsolutePath.TrimStart('/')};Maximum Pool Size={maxConn};Minimum Pool Size={minConn};Multiplexing=true;No Reset On Close=true;Max Auto Prepare=20;Auto Prepare Min Usages=1"; + var builder = new NpgsqlDataSourceBuilder(connStr); + + return builder.Build(); + } + catch + { + return null; + } + } + +} diff --git a/frameworks/genhttp-11/Model.cs b/frameworks/genhttp-11/Model.cs new file mode 100644 index 000000000..264cf3eb5 --- /dev/null +++ b/frameworks/genhttp-11/Model.cs @@ -0,0 +1,59 @@ +namespace genhttp; + +public sealed class DatasetItem +{ + public int Id { get; set; } + public string Name { get; set; } = ""; + public string Category { get; set; } = ""; + public int Price { get; set; } + public int Quantity { get; set; } + public bool Active { get; set; } + public List? Tags { get; set; } + public RatingInfo? Rating { get; set; } +} + +public sealed class ProcessedItem +{ + public int Id { get; set; } + public string Name { get; set; } = ""; + public string Category { get; set; } = ""; + public int Price { get; set; } + public int Quantity { get; set; } + public bool Active { get; set; } + public List? Tags { get; set; } + public RatingInfo? Rating { get; set; } + public long Total { get; set; } +} + +public sealed class RatingInfo +{ + public int Score { get; set; } + public int Count { get; set; } +} + +public sealed class ListWithCount(List items) +{ + + public List Items => items; + + public int Count => items.Count; + +} + + +public sealed class CrudListResponse +{ + public List Items { get; set; } = []; + public long Total { get; set; } + public int Page { get; set; } + public int Limit { get; set; } +} + +public sealed class CrudItem +{ + public int? Id { get; set; } + public string? Name { get; set; } + public string? Category { get; set; } + public int Price { get; set; } + public int Quantity { get; set; } +} diff --git a/frameworks/genhttp-11/Program.cs b/frameworks/genhttp-11/Program.cs new file mode 100644 index 000000000..ae6b9ea56 --- /dev/null +++ b/frameworks/genhttp-11/Program.cs @@ -0,0 +1,27 @@ +using System.Net; +using System.Security.Cryptography.X509Certificates; + +using genhttp; + +using GenHTTP.Engine.Internal; +using GenHTTP.Modules.Compression; + +var certPath = Environment.GetEnvironmentVariable("TLS_CERT") ?? "/certs/server.crt"; +var keyPath = Environment.GetEnvironmentVariable("TLS_KEY") ?? "/certs/server.key"; +var hasCert = File.Exists(certPath) && File.Exists(keyPath); + +var app = Project.Create(); + +var host = Host.Create() + .Handler(app) + .Compression(); + +host.Bind(IPAddress.Any, 8080); + +if (hasCert) +{ + host.Bind(IPAddress.Any, 8081, X509Certificate2.CreateFromPemFile(certPath, keyPath)); + host.Bind(IPAddress.Any, 8443, X509Certificate2.CreateFromPemFile(certPath, keyPath)); +} + +await host.RunAsync(); diff --git a/frameworks/genhttp-11/Project.cs b/frameworks/genhttp-11/Project.cs new file mode 100644 index 000000000..f5777d7cf --- /dev/null +++ b/frameworks/genhttp-11/Project.cs @@ -0,0 +1,68 @@ +using System.IO.Compression; + +using GenHTTP.Api.Content; +using GenHTTP.Modules.Compression; +using GenHTTP.Modules.IO; +using GenHTTP.Modules.Layouting; +using GenHTTP.Modules.Layouting.Provider; +using GenHTTP.Modules.ServerCaching; +using GenHTTP.Modules.Webservices; +using GenHTTP.Modules.Websockets; + +using genhttp.Tests; + +namespace genhttp; + +public static class Project +{ + public static IHandlerBuilder Create() + { + var crud = Layout.Create() + .AddService("items"); + + var app = Layout.Create() + .Add("pipeline", Content.From(Resource.FromString("ok"))) + .AddService("baseline11") + .AddService("baseline2") + .AddService("upload") + .AddService("json") + .AddService("async-db") + .Add("crud", crud) + .AddStaticFiles() + .AddWebsocket(); + + return app; + } + + private static LayoutBuilder AddStaticFiles(this LayoutBuilder app) + { + if (Directory.Exists("/data/static")) + { + var tree = ResourceTree.FromDirectory("/data/static"); + + var compression = CompressedContent.Default() + .Level(CompressionLevel.Optimal); + + var cache = ServerCache.TemporaryFiles() + .Invalidate(true); + + var handler = Resources.From(tree) // serve static resources + .Add(compression) // compress them on-the-fly + .Add(cache); // cache the compressed results + + app.Add("static", handler); + } + + return app; + } + + private static LayoutBuilder AddWebsocket(this LayoutBuilder app) + { + var websocket = Websocket.Imperative() + .DoNotAllocateFrameData() + .Handler(new EchoHandler()); + + return app.Add("ws", websocket); + } + +} diff --git a/frameworks/genhttp-11/README.md b/frameworks/genhttp-11/README.md new file mode 100644 index 000000000..c26cb329d --- /dev/null +++ b/frameworks/genhttp-11/README.md @@ -0,0 +1,30 @@ +# GenHTTP + +Lightweight embeddable C# web server using the GenHTTP library on the internal engine. + +## Stack + +- **Language:** C# / .NET 10 (Alpine) +- **Framework:** GenHTTP +- **Engine:** GenHTTP +- **Build:** Self-contained musl publish, `runtime-deps:10.0-alpine` + +## Endpoints + +| Endpoint | Method | Description | +|----------|--------|-------------| +| `/pipeline` | GET | Returns `ok` (plain text) | +| `/baseline11` | GET | Sums query parameter values | +| `/baseline11` | POST | Sums query parameters + request body | +| `/baseline2` | GET | Sums query parameter values (HTTP/2 variant) | +| `/json` | GET | Processes 50-item dataset, serializes JSON | +| `/compression` | GET | Gzip-compressed large JSON response | +| `/db` | GET | SQLite range query with JSON response | +| `/upload` | POST | Receives 1 MB body, returns byte count | +| `/static/{filename}` | GET | Serves preloaded static files with MIME types | + +## Notes + +- Implemented via web services and a layout router +- Compression and routing modules +- Self-contained single-file deployment diff --git a/frameworks/genhttp-11/Tests/AsyncDatabase.cs b/frameworks/genhttp-11/Tests/AsyncDatabase.cs new file mode 100644 index 000000000..d92158905 --- /dev/null +++ b/frameworks/genhttp-11/Tests/AsyncDatabase.cs @@ -0,0 +1,49 @@ +using System.Text.Json; +using genhttp.Infrastructure; +using GenHTTP.Modules.Webservices; + +namespace genhttp.Tests; + +public class AsyncDatabase +{ + + [ResourceMethod] + public async Task> Compute(int min = 10, int max = 50, int limit = 50) + { + var pool = Postgres.Pool; + + if (pool == null) + { + return new ListWithCount(new List()); + } + + await using var cmd = pool.CreateCommand( + "SELECT id, name, category, price, quantity, active, tags, rating_score, rating_count FROM items WHERE price BETWEEN $1 AND $2 LIMIT $3"); + + cmd.Parameters.AddWithValue(min); + cmd.Parameters.AddWithValue(max); + cmd.Parameters.AddWithValue(limit); + + await using var reader = await cmd.ExecuteReaderAsync(); + + var items = new List(limit); + + while (await reader.ReadAsync()) + { + items.Add(new + { + id = reader.GetInt32(0), + name = reader.GetString(1), + category = reader.GetString(2), + price = reader.GetInt32(3), + quantity = reader.GetInt32(4), + active = reader.GetBoolean(5), + tags = JsonSerializer.Deserialize>(reader.GetString(6)), + rating = new { score = reader.GetInt32(7), count = reader.GetInt32(8) }, + }); + } + + return new ListWithCount(items); + } + +} diff --git a/frameworks/genhttp-11/Tests/Baseline.cs b/frameworks/genhttp-11/Tests/Baseline.cs new file mode 100644 index 000000000..1e31cbf42 --- /dev/null +++ b/frameworks/genhttp-11/Tests/Baseline.cs @@ -0,0 +1,15 @@ +using GenHTTP.Modules.Reflection; +using GenHTTP.Modules.Webservices; + +namespace genhttp.Tests; + +public class Baseline +{ + + [ResourceMethod] + public int Sum(int a, int b) => a + b; + + [ResourceMethod(Method.Post)] + public int Sum(int a, int b, [FromBody] int c) => a + b + c; + +} diff --git a/frameworks/genhttp-11/Tests/Crud.cs b/frameworks/genhttp-11/Tests/Crud.cs new file mode 100644 index 000000000..1523ae925 --- /dev/null +++ b/frameworks/genhttp-11/Tests/Crud.cs @@ -0,0 +1,175 @@ +using System.Text.Json; + +using GenHTTP.Api.Content; +using GenHTTP.Api.Protocol; + +using genhttp.Infrastructure; + +using GenHTTP.Modules.Reflection; +using GenHTTP.Modules.Webservices; + +using Microsoft.Extensions.Caching.Memory; +using StringContent = GenHTTP.Modules.IO.Strings.StringContent; + +namespace genhttp.Tests; + +public class Crud +{ + private static readonly JsonSerializerOptions JsonOptions = new(JsonSerializerDefaults.Web); + + private static readonly IMemoryCache ItemCache = new MemoryCache(new MemoryCacheOptions()); + + private static readonly MemoryCacheEntryOptions ItemCacheOptions = new() { AbsoluteExpirationRelativeToNow = TimeSpan.FromMilliseconds(200) }; + + [ResourceMethod] + public async Task List(string category = "electronics", int page = 1, int limit = 10) + { + if (page < 1) page = 1; + if (limit is < 1 or > 50) limit = 10; + + var offset = (page - 1) * limit; + + await using var cmd = Postgres.Pool.CreateCommand( + "SELECT id, name, category, price, quantity, active, tags, rating_score, rating_count " + + "FROM items WHERE category = $1 ORDER BY id LIMIT $2 OFFSET $3"); + + cmd.Parameters.AddWithValue(category); + cmd.Parameters.AddWithValue(limit); + cmd.Parameters.AddWithValue(offset); + cmd.CommandTimeout = 2; + + await using var reader = await cmd.ExecuteReaderAsync(); + + var items = new List(); + + while (await reader.ReadAsync()) + { + items.Add(new ProcessedItem + { + Id = reader.GetInt32(0), + Name = reader.GetString(1), + Category = reader.GetString(2), + Price = reader.GetInt32(3), + Quantity = reader.GetInt32(4), + Active = reader.GetBoolean(5), + Tags = JsonSerializer.Deserialize>(reader.GetString(6)), + Rating = new RatingInfo + { + Score = (int)reader.GetDouble(7), + Count = reader.GetInt32(8) + } + }); + } + + return new CrudListResponse + { + Items = items, + Total = items.Count, + Page = page, + Limit = limit + }; + } + + [ResourceMethod(":id")] + public async ValueTask Get(int id, IRequest request) + { + if (ItemCache.TryGetValue(id, out string cached)) + { + return request.Respond() + .Content(new StringContent(cached, ContentType.ApplicationJson)) + .Header("X-Cache", "HIT") + .Build(); + } + + var item = await FetchItemByIdAsync(id); + + if (item == null) + { + throw new ProviderException(ResponseStatus.NotFound, $"Item with ID {id} does not exist"); + } + + var json = JsonSerializer.Serialize(item, JsonOptions); + + ItemCache.Set(id, json, ItemCacheOptions); + + return request.Respond() + .Content(new StringContent(json, ContentType.ApplicationJson)) + .Header("X-Cache", "MISS") + .Build(); + } + + [ResourceMethod(Method.Post)] + public async Task> Create(CrudItem item) + { + await using var cmd = Postgres.Pool.CreateCommand( + "INSERT INTO items (id, name, category, price, quantity, active, tags, rating_score, rating_count) " + + "VALUES ($1, $2, $3, $4, $5, true, '[\"bench\"]', 0, 0) " + + "ON CONFLICT (id) DO UPDATE SET name = $2, price = $4, quantity = $5 " + + "RETURNING id"); + + cmd.Parameters.AddWithValue(item.Id); + cmd.Parameters.AddWithValue(item.Name ?? "New Product"); + cmd.Parameters.AddWithValue(item.Category ?? "test"); + cmd.Parameters.AddWithValue(item.Price); + cmd.Parameters.AddWithValue(item.Quantity); + cmd.CommandTimeout = 2; + + item.Id = (int)(await cmd.ExecuteScalarAsync())!; + + return new Result(item).Status(ResponseStatus.Created); + } + + [ResourceMethod(Method.Put, ":id")] + public async Task Update(int id, CrudItem item) + { + await using var cmd = Postgres.Pool.CreateCommand( + "UPDATE items SET name = $1, price = $2, quantity = $3 WHERE id = $4"); + + cmd.Parameters.AddWithValue(item.Name ?? "Updated"); + cmd.Parameters.AddWithValue(item.Price); + cmd.Parameters.AddWithValue(item.Quantity); + cmd.Parameters.AddWithValue(id); + cmd.CommandTimeout = 2; + + var affected = await cmd.ExecuteNonQueryAsync(); + + if (affected == 0) + { + throw new ProviderException(ResponseStatus.NotFound, $"Item with ID {id} does not exist"); + } + + ItemCache.Remove(id); + + return item; + } + + private static async Task FetchItemByIdAsync(int id) + { + await using var cmd = Postgres.Pool!.CreateCommand( + "SELECT id, name, category, price, quantity, active, tags, rating_score, rating_count " + + "FROM items WHERE id = $1 LIMIT 1"); + + cmd.Parameters.AddWithValue(id); + cmd.CommandTimeout = 2; + + await using var reader = await cmd.ExecuteReaderAsync(); + if (!await reader.ReadAsync()) return null; + + return new ProcessedItem() + { + Id = reader.GetInt32(0), + Name = reader.GetString(1), + Category = reader.GetString(2), + Price = reader.GetInt32(3), + Quantity = reader.GetInt32(4), + Active = reader.GetBoolean(5), + Tags = JsonSerializer.Deserialize>(reader.GetString(6)), + Rating = new RatingInfo + { + Score = (int)reader.GetDouble(7), + Count = reader.GetInt32(8) + } + }; + } + +} diff --git a/frameworks/genhttp-11/Tests/EchoHandler.cs b/frameworks/genhttp-11/Tests/EchoHandler.cs new file mode 100644 index 000000000..7977a311a --- /dev/null +++ b/frameworks/genhttp-11/Tests/EchoHandler.cs @@ -0,0 +1,23 @@ +using GenHTTP.Modules.Websockets; +using GenHTTP.Modules.Websockets.Protocol; + +namespace genhttp.Tests; + +class EchoHandler : IImperativeHandler +{ + public async ValueTask HandleAsync(IImperativeConnection connection) + { + while (true) + { + var frame = await connection.ReadFrameAsync(); + + if (frame.Type == FrameType.Close) + break; + + if (frame.Type == FrameType.Text || frame.Type == FrameType.Binary) + { + await connection.WriteAsync(frame.Data, frame.Type); + } + } + } +} diff --git a/frameworks/genhttp-11/Tests/Json.cs b/frameworks/genhttp-11/Tests/Json.cs new file mode 100644 index 000000000..c15bc7494 --- /dev/null +++ b/frameworks/genhttp-11/Tests/Json.cs @@ -0,0 +1,60 @@ +using System.Text.Json; + +using GenHTTP.Api.Content; +using GenHTTP.Api.Protocol; +using GenHTTP.Modules.Webservices; + +namespace genhttp.Tests; + +public class Json +{ + private static readonly List? DatasetItems = LoadItems(); + + private static List? LoadItems() + { + var jsonOptions = new JsonSerializerOptions + { + PropertyNameCaseInsensitive = true, + PropertyNamingPolicy = JsonNamingPolicy.CamelCase + }; + + var datasetPath = Environment.GetEnvironmentVariable("DATASET_PATH") ?? "/data/dataset.json"; + + if (File.Exists(datasetPath)) + { + return JsonSerializer.Deserialize>(File.ReadAllText(datasetPath), jsonOptions); + } + + return null; + } + + [ResourceMethod(":count")] + public ListWithCount Compute(int count, int m = 1) + { + if (DatasetItems == null) + { + throw new ProviderException(ResponseStatus.InternalServerError, "No dataset"); + } + + if (count > DatasetItems.Count) count = DatasetItems.Count; + if (count < 0) count = 0; + + var processed = new List(count); + + for (var i = 0; i < count; i++) + { + var d = DatasetItems[i]; + + processed.Add(new ProcessedItem + { + Id = d.Id, Name = d.Name, Category = d.Category, + Price = d.Price, Quantity = d.Quantity, Active = d.Active, + Tags = d.Tags, Rating = d.Rating, + Total = d.Price * d.Quantity * m + }); + } + + return new(processed); + } + +} diff --git a/frameworks/genhttp-11/Tests/Upload.cs b/frameworks/genhttp-11/Tests/Upload.cs new file mode 100644 index 000000000..9bf435cca --- /dev/null +++ b/frameworks/genhttp-11/Tests/Upload.cs @@ -0,0 +1,38 @@ +using GenHTTP.Modules.Reflection; +using GenHTTP.Modules.Webservices; + +namespace genhttp.Tests; + +public class Upload +{ + + [ResourceMethod(Method.Post)] + public ValueTask Compute(Stream input) + { + if (input.CanSeek) + { + // internal engine + return ValueTask.FromResult(input.Length); + } + + // kestrel + return ComputeManually(input); + } + + private async ValueTask ComputeManually(Stream input) + { + var buffer = new byte[8192]; + + long total = 0; + + var read = 0; + + while ((read = await input.ReadAsync(buffer)) > 0) + { + total += read; + } + + return total; + } + +} diff --git a/frameworks/genhttp-11/genhttp.csproj b/frameworks/genhttp-11/genhttp.csproj new file mode 100644 index 000000000..200e814ef --- /dev/null +++ b/frameworks/genhttp-11/genhttp.csproj @@ -0,0 +1,25 @@ + + + Exe + net10.0 + enable + true + enable + + + + + + + + + + + + + + + + + + diff --git a/frameworks/genhttp-11/meta.json b/frameworks/genhttp-11/meta.json new file mode 100644 index 000000000..2bfd893b9 --- /dev/null +++ b/frameworks/genhttp-11/meta.json @@ -0,0 +1,27 @@ +{ + "display_name": "genhttp-11", + "language": "C#", + "type": "tuned", + "engine": "genhttp", + "description": "Lightweight, embeddable and modular C# web server.", + "repo": "https://github.com/Kaliumhexacyanoferrat/GenHTTP", + "enabled": true, + "tests": [ + "baseline", + "pipelined", + "limited-conn", + "json", + "json-comp", + "json-tls", + "upload", + "async-db", + "crud", + "static", + "echo-ws", + "api-4", + "api-16" + ], + "maintainers": [ + "Kaliumhexacyanoferrat" + ] +} From dc95941e09c8cb0a54ce4ddad2e1dec3b4ae41e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20N=C3=A4geli?= Date: Tue, 19 May 2026 17:53:44 +0200 Subject: [PATCH 2/6] Only enable working tests for now --- frameworks/genhttp-11/meta.json | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/frameworks/genhttp-11/meta.json b/frameworks/genhttp-11/meta.json index 2bfd893b9..3f5627d25 100644 --- a/frameworks/genhttp-11/meta.json +++ b/frameworks/genhttp-11/meta.json @@ -7,19 +7,9 @@ "repo": "https://github.com/Kaliumhexacyanoferrat/GenHTTP", "enabled": true, "tests": [ - "baseline", "pipelined", - "limited-conn", - "json", - "json-comp", - "json-tls", - "upload", "async-db", - "crud", - "static", - "echo-ws", - "api-4", - "api-16" + "echo-ws" ], "maintainers": [ "Kaliumhexacyanoferrat" From 23e7eba108e883ba14b9f8524e7d0144ce8fde0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20N=C3=A4geli?= Date: Tue, 19 May 2026 17:57:08 +0200 Subject: [PATCH 3/6] No WS for now --- frameworks/genhttp-11/meta.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/frameworks/genhttp-11/meta.json b/frameworks/genhttp-11/meta.json index 3f5627d25..ee31c7a1f 100644 --- a/frameworks/genhttp-11/meta.json +++ b/frameworks/genhttp-11/meta.json @@ -8,8 +8,7 @@ "enabled": true, "tests": [ "pipelined", - "async-db", - "echo-ws" + "async-db" ], "maintainers": [ "Kaliumhexacyanoferrat" From 515ce36aabe51ff5b3ac22aed6fb650c7ff50827 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20N=C3=A4geli?= Date: Tue, 26 May 2026 11:51:53 +0200 Subject: [PATCH 4/6] Bump version, re-enable tests --- frameworks/genhttp-11/genhttp.csproj | 18 +++++++++--------- frameworks/genhttp-11/meta.json | 15 +++++++++++++-- 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/frameworks/genhttp-11/genhttp.csproj b/frameworks/genhttp-11/genhttp.csproj index 200e814ef..bad3657cd 100644 --- a/frameworks/genhttp-11/genhttp.csproj +++ b/frameworks/genhttp-11/genhttp.csproj @@ -8,16 +8,16 @@ - - - - - - - + + + + + + + - - + + diff --git a/frameworks/genhttp-11/meta.json b/frameworks/genhttp-11/meta.json index ee31c7a1f..391a1278d 100644 --- a/frameworks/genhttp-11/meta.json +++ b/frameworks/genhttp-11/meta.json @@ -6,9 +6,20 @@ "description": "Lightweight, embeddable and modular C# web server.", "repo": "https://github.com/Kaliumhexacyanoferrat/GenHTTP", "enabled": true, - "tests": [ + "tests": [ + "baseline", "pipelined", - "async-db" + "limited-conn", + "json", + "json-comp", + "json-tls", + "upload", + "async-db", + "crud", + "static", + "echo-ws", + "api-4", + "api-16" ], "maintainers": [ "Kaliumhexacyanoferrat" From 83f8ff3a85379c9dcd7f5202b995dede23a84783 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 26 May 2026 10:11:41 +0000 Subject: [PATCH 5/6] Benchmark results: genhttp-11 --- site/data/api-16-1024.json | 26 +++++++++++++++++++ site/data/api-4-256.json | 26 +++++++++++++++++++ site/data/baseline-4096.json | 20 ++++++++++++++ site/data/baseline-512.json | 20 ++++++++++++++ site/data/crud-4096.json | 20 ++++++++++++++ site/data/echo-ws-16384.json | 19 ++++++++++++++ site/data/echo-ws-4096.json | 19 ++++++++++++++ site/data/echo-ws-512.json | 19 ++++++++++++++ site/data/frameworks.json | 7 +++++ site/data/json-4096.json | 20 ++++++++++++++ site/data/json-comp-16384.json | 20 ++++++++++++++ site/data/json-comp-4096.json | 20 ++++++++++++++ site/data/json-comp-512.json | 20 ++++++++++++++ site/data/json-tls-4096.json | 19 ++++++++++++++ site/data/limited-conn-4096.json | 20 ++++++++++++++ site/data/limited-conn-512.json | 20 ++++++++++++++ site/data/pipelined-4096.json | 19 ++++++++++++++ site/data/pipelined-512.json | 19 ++++++++++++++ site/data/static-1024.json | 19 ++++++++++++++ site/data/upload-256.json | 20 ++++++++++++++ site/data/upload-32.json | 20 ++++++++++++++ site/static/logs/api-16/1024/genhttp-11.log | 2 ++ site/static/logs/api-4/256/genhttp-11.log | 2 ++ site/static/logs/baseline/4096/genhttp-11.log | 0 site/static/logs/baseline/512/genhttp-11.log | 0 site/static/logs/crud/4096/genhttp-11.log | 2 ++ site/static/logs/echo-ws/16384/genhttp-11.log | 0 site/static/logs/echo-ws/4096/genhttp-11.log | 0 site/static/logs/echo-ws/512/genhttp-11.log | 0 .../logs/json-comp/16384/genhttp-11.log | 0 .../static/logs/json-comp/4096/genhttp-11.log | 0 site/static/logs/json-comp/512/genhttp-11.log | 0 site/static/logs/json-tls/4096/genhttp-11.log | 0 site/static/logs/json/4096/genhttp-11.log | 0 .../logs/limited-conn/4096/genhttp-11.log | 0 .../logs/limited-conn/512/genhttp-11.log | 0 .../static/logs/pipelined/4096/genhttp-11.log | 0 site/static/logs/pipelined/512/genhttp-11.log | 0 site/static/logs/static/1024/genhttp-11.log | 0 site/static/logs/upload/256/genhttp-11.log | 0 site/static/logs/upload/32/genhttp-11.log | 0 41 files changed, 418 insertions(+) create mode 100644 site/static/logs/api-16/1024/genhttp-11.log create mode 100644 site/static/logs/api-4/256/genhttp-11.log create mode 100644 site/static/logs/baseline/4096/genhttp-11.log create mode 100644 site/static/logs/baseline/512/genhttp-11.log create mode 100644 site/static/logs/crud/4096/genhttp-11.log create mode 100644 site/static/logs/echo-ws/16384/genhttp-11.log create mode 100644 site/static/logs/echo-ws/4096/genhttp-11.log create mode 100644 site/static/logs/echo-ws/512/genhttp-11.log create mode 100644 site/static/logs/json-comp/16384/genhttp-11.log create mode 100644 site/static/logs/json-comp/4096/genhttp-11.log create mode 100644 site/static/logs/json-comp/512/genhttp-11.log create mode 100644 site/static/logs/json-tls/4096/genhttp-11.log create mode 100644 site/static/logs/json/4096/genhttp-11.log create mode 100644 site/static/logs/limited-conn/4096/genhttp-11.log create mode 100644 site/static/logs/limited-conn/512/genhttp-11.log create mode 100644 site/static/logs/pipelined/4096/genhttp-11.log create mode 100644 site/static/logs/pipelined/512/genhttp-11.log create mode 100644 site/static/logs/static/1024/genhttp-11.log create mode 100644 site/static/logs/upload/256/genhttp-11.log create mode 100644 site/static/logs/upload/32/genhttp-11.log diff --git a/site/data/api-16-1024.json b/site/data/api-16-1024.json index 2aeb834df..898434f87 100644 --- a/site/data/api-16-1024.json +++ b/site/data/api-16-1024.json @@ -385,6 +385,32 @@ "tpl_static": 0, "tpl_async_db": 417987 }, + { + "framework": "genhttp-11", + "language": "C#", + "rps": 116162, + "avg_latency": "7.68ms", + "p99_latency": "34.00ms", + "cpu": "1535.4%", + "memory": "285MiB", + "connections": 1024, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "589.55MB/s", + "input_bw": "6.54MB/s", + "reconnects": 348345, + "status_2xx": 1742430, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0, + "tpl_baseline": 652652, + "tpl_json": 654009, + "tpl_db": 0, + "tpl_upload": 0, + "tpl_static": 0, + "tpl_async_db": 435768 + }, { "framework": "genhttp-kestrel", "language": "C#", diff --git a/site/data/api-4-256.json b/site/data/api-4-256.json index dd5eae068..0085eb6a5 100644 --- a/site/data/api-4-256.json +++ b/site/data/api-4-256.json @@ -385,6 +385,32 @@ "tpl_static": 0, "tpl_async_db": 155790 }, + { + "framework": "genhttp-11", + "language": "C#", + "rps": 40150, + "avg_latency": "5.64ms", + "p99_latency": "22.10ms", + "cpu": "391.0%", + "memory": "159MiB", + "connections": 256, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "203.50MB/s", + "input_bw": "2.26MB/s", + "reconnects": 120392, + "status_2xx": 602259, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0, + "tpl_baseline": 226078, + "tpl_json": 225470, + "tpl_db": 0, + "tpl_upload": 0, + "tpl_static": 0, + "tpl_async_db": 150710 + }, { "framework": "genhttp-kestrel", "language": "C#", diff --git a/site/data/baseline-4096.json b/site/data/baseline-4096.json index a9e8b9b62..d06c59efe 100644 --- a/site/data/baseline-4096.json +++ b/site/data/baseline-4096.json @@ -409,6 +409,26 @@ "status_4xx": 0, "status_5xx": 0 }, + { + "framework": "genhttp-11", + "language": "C#", + "rps": 1424919, + "avg_latency": "2.62ms", + "p99_latency": "12.60ms", + "cpu": "5789.0%", + "memory": "465MiB", + "connections": 4096, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "175.26MB/s", + "input_bw": "110.07MB/s", + "reconnects": 0, + "status_2xx": 7124599, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, { "framework": "genhttp-kestrel", "language": "C#", diff --git a/site/data/baseline-512.json b/site/data/baseline-512.json index 0e25db5f5..c4a3de28a 100644 --- a/site/data/baseline-512.json +++ b/site/data/baseline-512.json @@ -409,6 +409,26 @@ "status_4xx": 0, "status_5xx": 0 }, + { + "framework": "genhttp-11", + "language": "C#", + "rps": 1474025, + "avg_latency": "346us", + "p99_latency": "3.27ms", + "cpu": "5725.9%", + "memory": "216MiB", + "connections": 512, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "181.29MB/s", + "input_bw": "113.86MB/s", + "reconnects": 0, + "status_2xx": 7370125, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, { "framework": "genhttp-kestrel", "language": "C#", diff --git a/site/data/crud-4096.json b/site/data/crud-4096.json index 407118e6e..b930ec10d 100644 --- a/site/data/crud-4096.json +++ b/site/data/crud-4096.json @@ -77,6 +77,26 @@ "status_4xx": 0, "status_5xx": 0 }, + { + "framework": "genhttp-11", + "language": "C#", + "rps": 454767, + "avg_latency": "8.62ms", + "p99_latency": "29.70ms", + "cpu": "4095.6%", + "memory": "631MiB", + "connections": 4096, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "173.92MB/s", + "input_bw": "39.03MB/s", + "reconnects": 32087, + "status_2xx": 6821518, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, { "framework": "genhttp-kestrel", "language": "C#", diff --git a/site/data/echo-ws-16384.json b/site/data/echo-ws-16384.json index 5e0740ada..11c505831 100644 --- a/site/data/echo-ws-16384.json +++ b/site/data/echo-ws-16384.json @@ -133,6 +133,25 @@ "status_4xx": 0, "status_5xx": 0 }, + { + "framework": "genhttp-11", + "language": "C#", + "rps": 1635356, + "avg_latency": "5.74ms", + "p99_latency": "32.40ms", + "cpu": "5783.3%", + "memory": "1.6GiB", + "connections": 16384, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "11.36MB/s", + "reconnects": 0, + "status_2xx": 8176781, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, { "framework": "go-websocket", "language": "Go", diff --git a/site/data/echo-ws-4096.json b/site/data/echo-ws-4096.json index 257b35e07..bb1b2a820 100644 --- a/site/data/echo-ws-4096.json +++ b/site/data/echo-ws-4096.json @@ -133,6 +133,25 @@ "status_4xx": 0, "status_5xx": 0 }, + { + "framework": "genhttp-11", + "language": "C#", + "rps": 1739280, + "avg_latency": "2.15ms", + "p99_latency": "13.50ms", + "cpu": "5994.4%", + "memory": "687MiB", + "connections": 4096, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "11.72MB/s", + "reconnects": 0, + "status_2xx": 8696403, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, { "framework": "go-websocket", "language": "Go", diff --git a/site/data/echo-ws-512.json b/site/data/echo-ws-512.json index afceea163..cb983e259 100644 --- a/site/data/echo-ws-512.json +++ b/site/data/echo-ws-512.json @@ -133,6 +133,25 @@ "status_4xx": 0, "status_5xx": 0 }, + { + "framework": "genhttp-11", + "language": "C#", + "rps": 1789519, + "avg_latency": "285us", + "p99_latency": "1.66ms", + "cpu": "5833.9%", + "memory": "188MiB", + "connections": 512, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "11.94MB/s", + "reconnects": 0, + "status_2xx": 8947599, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, { "framework": "go-websocket", "language": "Go", diff --git a/site/data/frameworks.json b/site/data/frameworks.json index 430802393..7ab19ab1d 100644 --- a/site/data/frameworks.json +++ b/site/data/frameworks.json @@ -213,6 +213,13 @@ "type": "tuned", "engine": "frankenphp" }, + "genhttp-11": { + "dir": "genhttp-11", + "description": "Lightweight, embeddable and modular C# web server.", + "repo": "https://github.com/Kaliumhexacyanoferrat/GenHTTP", + "type": "tuned", + "engine": "genhttp" + }, "genhttp-kestrel": { "dir": "genhttp-kestrel", "description": "Lightweight, embeddable and modular C# web server.", diff --git a/site/data/json-4096.json b/site/data/json-4096.json index 3d9803f27..5eb54c725 100644 --- a/site/data/json-4096.json +++ b/site/data/json-4096.json @@ -355,6 +355,26 @@ "status_4xx": 0, "status_5xx": 0 }, + { + "framework": "genhttp-11", + "language": "C#", + "rps": 663217, + "avg_latency": "5.49ms", + "p99_latency": "26.40ms", + "cpu": "5900.8%", + "memory": "488MiB", + "connections": 4096, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "2.28GB/s", + "input_bw": "31.62MB/s", + "reconnects": 130983, + "status_2xx": 3316086, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, { "framework": "genhttp-kestrel", "language": "C#", diff --git a/site/data/json-comp-16384.json b/site/data/json-comp-16384.json index f449b5acf..b2bdcb228 100644 --- a/site/data/json-comp-16384.json +++ b/site/data/json-comp-16384.json @@ -299,6 +299,26 @@ "status_4xx": 0, "status_5xx": 0 }, + { + "framework": "genhttp-11", + "language": "C#", + "rps": 291962, + "avg_latency": "38.78ms", + "p99_latency": "106.80ms", + "cpu": "5783.0%", + "memory": "3.6GiB", + "connections": 16384, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "489.62MB/s", + "input_bw": "21.72MB/s", + "reconnects": 51670, + "status_2xx": 1459810, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, { "framework": "genhttp-kestrel", "language": "C#", diff --git a/site/data/json-comp-4096.json b/site/data/json-comp-4096.json index 8bb383fd1..2f19cda17 100644 --- a/site/data/json-comp-4096.json +++ b/site/data/json-comp-4096.json @@ -299,6 +299,26 @@ "status_4xx": 0, "status_5xx": 0 }, + { + "framework": "genhttp-11", + "language": "C#", + "rps": 317344, + "avg_latency": "11.29ms", + "p99_latency": "46.40ms", + "cpu": "5897.9%", + "memory": "2.1GiB", + "connections": 4096, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "532.21MB/s", + "input_bw": "23.61MB/s", + "reconnects": 61434, + "status_2xx": 1586721, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, { "framework": "genhttp-kestrel", "language": "C#", diff --git a/site/data/json-comp-512.json b/site/data/json-comp-512.json index 30362442f..659629943 100644 --- a/site/data/json-comp-512.json +++ b/site/data/json-comp-512.json @@ -299,6 +299,26 @@ "status_4xx": 0, "status_5xx": 0 }, + { + "framework": "genhttp-11", + "language": "C#", + "rps": 330394, + "avg_latency": "1.47ms", + "p99_latency": "7.71ms", + "cpu": "5594.1%", + "memory": "439MiB", + "connections": 512, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "554.29MB/s", + "input_bw": "24.58MB/s", + "reconnects": 66083, + "status_2xx": 1651974, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, { "framework": "genhttp-kestrel", "language": "C#", diff --git a/site/data/json-tls-4096.json b/site/data/json-tls-4096.json index ef664d45e..00713e951 100644 --- a/site/data/json-tls-4096.json +++ b/site/data/json-tls-4096.json @@ -190,6 +190,25 @@ "status_4xx": 0, "status_5xx": 0 }, + { + "framework": "genhttp-11", + "language": "C#", + "rps": 294202, + "avg_latency": "13.89ms", + "p99_latency": "13.89ms", + "cpu": "5788.4%", + "memory": "570MiB", + "connections": 4096, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "1.01GB", + "reconnects": 0, + "status_2xx": 1500629, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, { "framework": "genhttp-kestrel", "language": "C#", diff --git a/site/data/limited-conn-4096.json b/site/data/limited-conn-4096.json index c8b70ae34..5f24d82a9 100644 --- a/site/data/limited-conn-4096.json +++ b/site/data/limited-conn-4096.json @@ -409,6 +409,26 @@ "status_4xx": 0, "status_5xx": 0 }, + { + "framework": "genhttp-11", + "language": "C#", + "rps": 942884, + "avg_latency": "2.10ms", + "p99_latency": "27.10ms", + "cpu": "5688.0%", + "memory": "359MiB", + "connections": 4096, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "115.97MB/s", + "input_bw": "72.84MB/s", + "reconnects": 471829, + "status_2xx": 4714421, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, { "framework": "genhttp-kestrel", "language": "C#", diff --git a/site/data/limited-conn-512.json b/site/data/limited-conn-512.json index e25011441..8e94fff66 100644 --- a/site/data/limited-conn-512.json +++ b/site/data/limited-conn-512.json @@ -409,6 +409,26 @@ "status_4xx": 0, "status_5xx": 0 }, + { + "framework": "genhttp-11", + "language": "C#", + "rps": 983578, + "avg_latency": "508us", + "p99_latency": "5.27ms", + "cpu": "5711.2%", + "memory": "191MiB", + "connections": 512, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "120.97MB/s", + "input_bw": "75.98MB/s", + "reconnects": 491816, + "status_2xx": 4917894, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, { "framework": "genhttp-kestrel", "language": "C#", diff --git a/site/data/pipelined-4096.json b/site/data/pipelined-4096.json index 6dc92c164..0d214cc88 100644 --- a/site/data/pipelined-4096.json +++ b/site/data/pipelined-4096.json @@ -384,6 +384,25 @@ "status_4xx": 0, "status_5xx": 0 }, + { + "framework": "genhttp-11", + "language": "C#", + "rps": 3343454, + "avg_latency": "793us", + "p99_latency": "504us", + "cpu": "6262.0%", + "memory": "391MiB", + "connections": 4096, + "threads": 64, + "duration": "5s", + "pipeline": 16, + "bandwidth": "411.18MB/s", + "reconnects": 0, + "status_2xx": 16717270, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, { "framework": "genhttp-kestrel", "language": "C#", diff --git a/site/data/pipelined-512.json b/site/data/pipelined-512.json index 440aceacd..d18143b05 100644 --- a/site/data/pipelined-512.json +++ b/site/data/pipelined-512.json @@ -384,6 +384,25 @@ "status_4xx": 0, "status_5xx": 0 }, + { + "framework": "genhttp-11", + "language": "C#", + "rps": 3218546, + "avg_latency": "673us", + "p99_latency": "2.33ms", + "cpu": "5837.1%", + "memory": "172MiB", + "connections": 512, + "threads": 64, + "duration": "5s", + "pipeline": 16, + "bandwidth": "395.82MB/s", + "reconnects": 0, + "status_2xx": 16092733, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, { "framework": "genhttp-kestrel", "language": "C#", diff --git a/site/data/static-1024.json b/site/data/static-1024.json index 9256ce792..4fddd42c9 100644 --- a/site/data/static-1024.json +++ b/site/data/static-1024.json @@ -364,6 +364,25 @@ "status_4xx": 0, "status_5xx": 0 }, + { + "framework": "genhttp-11", + "language": "C#", + "rps": 39568, + "avg_latency": "52.97ms", + "p99_latency": "52.97ms", + "cpu": "4333.0%", + "memory": "383MiB", + "connections": 1024, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "2.32GB", + "reconnects": 0, + "status_2xx": 201277, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, { "framework": "genhttp-kestrel", "language": "C#", diff --git a/site/data/upload-256.json b/site/data/upload-256.json index b5dd25a98..c3ac99f16 100644 --- a/site/data/upload-256.json +++ b/site/data/upload-256.json @@ -318,6 +318,26 @@ "status_4xx": 0, "status_5xx": 0 }, + { + "framework": "genhttp-11", + "language": "C#", + "rps": 2999, + "avg_latency": "80.41ms", + "p99_latency": "350.50ms", + "cpu": "4037.4%", + "memory": "159MiB", + "connections": 256, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "393.25KB/s", + "input_bw": "23.79GB/s", + "reconnects": 2948, + "status_2xx": 15088, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, { "framework": "genhttp-kestrel", "language": "C#", diff --git a/site/data/upload-32.json b/site/data/upload-32.json index 26cf1c8d3..5e8ab7f84 100644 --- a/site/data/upload-32.json +++ b/site/data/upload-32.json @@ -318,6 +318,26 @@ "status_4xx": 0, "status_5xx": 0 }, + { + "framework": "genhttp-11", + "language": "C#", + "rps": 2655, + "avg_latency": "12.02ms", + "p99_latency": "35.10ms", + "cpu": "2713.4%", + "memory": "100MiB", + "connections": 32, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "347.92KB/s", + "input_bw": "21.06GB/s", + "reconnects": 2657, + "status_2xx": 13275, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, { "framework": "genhttp-kestrel", "language": "C#", diff --git a/site/static/logs/api-16/1024/genhttp-11.log b/site/static/logs/api-16/1024/genhttp-11.log new file mode 100644 index 000000000..ec73cd531 --- /dev/null +++ b/site/static/logs/api-16/1024/genhttp-11.log @@ -0,0 +1,2 @@ +Cannot load library libgssapi_krb5.so.2 +Error: libgssapi_krb5.so.2: cannot open shared object file: No such file or directory diff --git a/site/static/logs/api-4/256/genhttp-11.log b/site/static/logs/api-4/256/genhttp-11.log new file mode 100644 index 000000000..ec73cd531 --- /dev/null +++ b/site/static/logs/api-4/256/genhttp-11.log @@ -0,0 +1,2 @@ +Cannot load library libgssapi_krb5.so.2 +Error: libgssapi_krb5.so.2: cannot open shared object file: No such file or directory diff --git a/site/static/logs/baseline/4096/genhttp-11.log b/site/static/logs/baseline/4096/genhttp-11.log new file mode 100644 index 000000000..e69de29bb diff --git a/site/static/logs/baseline/512/genhttp-11.log b/site/static/logs/baseline/512/genhttp-11.log new file mode 100644 index 000000000..e69de29bb diff --git a/site/static/logs/crud/4096/genhttp-11.log b/site/static/logs/crud/4096/genhttp-11.log new file mode 100644 index 000000000..ec73cd531 --- /dev/null +++ b/site/static/logs/crud/4096/genhttp-11.log @@ -0,0 +1,2 @@ +Cannot load library libgssapi_krb5.so.2 +Error: libgssapi_krb5.so.2: cannot open shared object file: No such file or directory diff --git a/site/static/logs/echo-ws/16384/genhttp-11.log b/site/static/logs/echo-ws/16384/genhttp-11.log new file mode 100644 index 000000000..e69de29bb diff --git a/site/static/logs/echo-ws/4096/genhttp-11.log b/site/static/logs/echo-ws/4096/genhttp-11.log new file mode 100644 index 000000000..e69de29bb diff --git a/site/static/logs/echo-ws/512/genhttp-11.log b/site/static/logs/echo-ws/512/genhttp-11.log new file mode 100644 index 000000000..e69de29bb diff --git a/site/static/logs/json-comp/16384/genhttp-11.log b/site/static/logs/json-comp/16384/genhttp-11.log new file mode 100644 index 000000000..e69de29bb diff --git a/site/static/logs/json-comp/4096/genhttp-11.log b/site/static/logs/json-comp/4096/genhttp-11.log new file mode 100644 index 000000000..e69de29bb diff --git a/site/static/logs/json-comp/512/genhttp-11.log b/site/static/logs/json-comp/512/genhttp-11.log new file mode 100644 index 000000000..e69de29bb diff --git a/site/static/logs/json-tls/4096/genhttp-11.log b/site/static/logs/json-tls/4096/genhttp-11.log new file mode 100644 index 000000000..e69de29bb diff --git a/site/static/logs/json/4096/genhttp-11.log b/site/static/logs/json/4096/genhttp-11.log new file mode 100644 index 000000000..e69de29bb diff --git a/site/static/logs/limited-conn/4096/genhttp-11.log b/site/static/logs/limited-conn/4096/genhttp-11.log new file mode 100644 index 000000000..e69de29bb diff --git a/site/static/logs/limited-conn/512/genhttp-11.log b/site/static/logs/limited-conn/512/genhttp-11.log new file mode 100644 index 000000000..e69de29bb diff --git a/site/static/logs/pipelined/4096/genhttp-11.log b/site/static/logs/pipelined/4096/genhttp-11.log new file mode 100644 index 000000000..e69de29bb diff --git a/site/static/logs/pipelined/512/genhttp-11.log b/site/static/logs/pipelined/512/genhttp-11.log new file mode 100644 index 000000000..e69de29bb diff --git a/site/static/logs/static/1024/genhttp-11.log b/site/static/logs/static/1024/genhttp-11.log new file mode 100644 index 000000000..e69de29bb diff --git a/site/static/logs/upload/256/genhttp-11.log b/site/static/logs/upload/256/genhttp-11.log new file mode 100644 index 000000000..e69de29bb diff --git a/site/static/logs/upload/32/genhttp-11.log b/site/static/logs/upload/32/genhttp-11.log new file mode 100644 index 000000000..e69de29bb From cd3a6958b45dbce41bc86d587fc7330ed0611767 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 26 May 2026 17:54:44 +0000 Subject: [PATCH 6/6] Benchmark results: genhttp-11 async-db --- site/data/api-16-1024.json | 26 ------------------- site/data/api-4-256.json | 26 ------------------- site/data/async-db-1024.json | 20 ++++++++++++++ site/data/baseline-4096.json | 20 -------------- site/data/baseline-512.json | 20 -------------- site/data/crud-4096.json | 20 -------------- site/data/echo-ws-16384.json | 19 -------------- site/data/echo-ws-4096.json | 19 -------------- site/data/echo-ws-512.json | 19 -------------- site/data/json-4096.json | 20 -------------- site/data/json-comp-16384.json | 20 -------------- site/data/json-comp-4096.json | 20 -------------- site/data/json-comp-512.json | 20 -------------- site/data/json-tls-4096.json | 19 -------------- site/data/limited-conn-4096.json | 20 -------------- site/data/limited-conn-512.json | 20 -------------- site/data/pipelined-4096.json | 19 -------------- site/data/pipelined-512.json | 19 -------------- site/data/static-1024.json | 19 -------------- site/data/upload-256.json | 20 -------------- site/data/upload-32.json | 20 -------------- site/static/logs/async-db/1024/genhttp-11.log | 2 ++ 22 files changed, 22 insertions(+), 405 deletions(-) create mode 100644 site/static/logs/async-db/1024/genhttp-11.log diff --git a/site/data/api-16-1024.json b/site/data/api-16-1024.json index 898434f87..2aeb834df 100644 --- a/site/data/api-16-1024.json +++ b/site/data/api-16-1024.json @@ -385,32 +385,6 @@ "tpl_static": 0, "tpl_async_db": 417987 }, - { - "framework": "genhttp-11", - "language": "C#", - "rps": 116162, - "avg_latency": "7.68ms", - "p99_latency": "34.00ms", - "cpu": "1535.4%", - "memory": "285MiB", - "connections": 1024, - "threads": 64, - "duration": "5s", - "pipeline": 1, - "bandwidth": "589.55MB/s", - "input_bw": "6.54MB/s", - "reconnects": 348345, - "status_2xx": 1742430, - "status_3xx": 0, - "status_4xx": 0, - "status_5xx": 0, - "tpl_baseline": 652652, - "tpl_json": 654009, - "tpl_db": 0, - "tpl_upload": 0, - "tpl_static": 0, - "tpl_async_db": 435768 - }, { "framework": "genhttp-kestrel", "language": "C#", diff --git a/site/data/api-4-256.json b/site/data/api-4-256.json index 0085eb6a5..dd5eae068 100644 --- a/site/data/api-4-256.json +++ b/site/data/api-4-256.json @@ -385,32 +385,6 @@ "tpl_static": 0, "tpl_async_db": 155790 }, - { - "framework": "genhttp-11", - "language": "C#", - "rps": 40150, - "avg_latency": "5.64ms", - "p99_latency": "22.10ms", - "cpu": "391.0%", - "memory": "159MiB", - "connections": 256, - "threads": 64, - "duration": "5s", - "pipeline": 1, - "bandwidth": "203.50MB/s", - "input_bw": "2.26MB/s", - "reconnects": 120392, - "status_2xx": 602259, - "status_3xx": 0, - "status_4xx": 0, - "status_5xx": 0, - "tpl_baseline": 226078, - "tpl_json": 225470, - "tpl_db": 0, - "tpl_upload": 0, - "tpl_static": 0, - "tpl_async_db": 150710 - }, { "framework": "genhttp-kestrel", "language": "C#", diff --git a/site/data/async-db-1024.json b/site/data/async-db-1024.json index fc4953a91..9f2ad59b4 100644 --- a/site/data/async-db-1024.json +++ b/site/data/async-db-1024.json @@ -315,6 +315,26 @@ "status_4xx": 0, "status_5xx": 0 }, + { + "framework": "genhttp-11", + "language": "C#", + "rps": 176160, + "avg_latency": "5.14ms", + "p99_latency": "12.70ms", + "cpu": "3543.3%", + "memory": "400MiB", + "connections": 1024, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "682.39MB/s", + "input_bw": "11.76MB/s", + "reconnects": 70297, + "status_2xx": 1761603, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, { "framework": "genhttp-kestrel", "language": "C#", diff --git a/site/data/baseline-4096.json b/site/data/baseline-4096.json index d06c59efe..a9e8b9b62 100644 --- a/site/data/baseline-4096.json +++ b/site/data/baseline-4096.json @@ -409,26 +409,6 @@ "status_4xx": 0, "status_5xx": 0 }, - { - "framework": "genhttp-11", - "language": "C#", - "rps": 1424919, - "avg_latency": "2.62ms", - "p99_latency": "12.60ms", - "cpu": "5789.0%", - "memory": "465MiB", - "connections": 4096, - "threads": 64, - "duration": "5s", - "pipeline": 1, - "bandwidth": "175.26MB/s", - "input_bw": "110.07MB/s", - "reconnects": 0, - "status_2xx": 7124599, - "status_3xx": 0, - "status_4xx": 0, - "status_5xx": 0 - }, { "framework": "genhttp-kestrel", "language": "C#", diff --git a/site/data/baseline-512.json b/site/data/baseline-512.json index c4a3de28a..0e25db5f5 100644 --- a/site/data/baseline-512.json +++ b/site/data/baseline-512.json @@ -409,26 +409,6 @@ "status_4xx": 0, "status_5xx": 0 }, - { - "framework": "genhttp-11", - "language": "C#", - "rps": 1474025, - "avg_latency": "346us", - "p99_latency": "3.27ms", - "cpu": "5725.9%", - "memory": "216MiB", - "connections": 512, - "threads": 64, - "duration": "5s", - "pipeline": 1, - "bandwidth": "181.29MB/s", - "input_bw": "113.86MB/s", - "reconnects": 0, - "status_2xx": 7370125, - "status_3xx": 0, - "status_4xx": 0, - "status_5xx": 0 - }, { "framework": "genhttp-kestrel", "language": "C#", diff --git a/site/data/crud-4096.json b/site/data/crud-4096.json index b930ec10d..407118e6e 100644 --- a/site/data/crud-4096.json +++ b/site/data/crud-4096.json @@ -77,26 +77,6 @@ "status_4xx": 0, "status_5xx": 0 }, - { - "framework": "genhttp-11", - "language": "C#", - "rps": 454767, - "avg_latency": "8.62ms", - "p99_latency": "29.70ms", - "cpu": "4095.6%", - "memory": "631MiB", - "connections": 4096, - "threads": 64, - "duration": "5s", - "pipeline": 1, - "bandwidth": "173.92MB/s", - "input_bw": "39.03MB/s", - "reconnects": 32087, - "status_2xx": 6821518, - "status_3xx": 0, - "status_4xx": 0, - "status_5xx": 0 - }, { "framework": "genhttp-kestrel", "language": "C#", diff --git a/site/data/echo-ws-16384.json b/site/data/echo-ws-16384.json index 11c505831..5e0740ada 100644 --- a/site/data/echo-ws-16384.json +++ b/site/data/echo-ws-16384.json @@ -133,25 +133,6 @@ "status_4xx": 0, "status_5xx": 0 }, - { - "framework": "genhttp-11", - "language": "C#", - "rps": 1635356, - "avg_latency": "5.74ms", - "p99_latency": "32.40ms", - "cpu": "5783.3%", - "memory": "1.6GiB", - "connections": 16384, - "threads": 64, - "duration": "5s", - "pipeline": 1, - "bandwidth": "11.36MB/s", - "reconnects": 0, - "status_2xx": 8176781, - "status_3xx": 0, - "status_4xx": 0, - "status_5xx": 0 - }, { "framework": "go-websocket", "language": "Go", diff --git a/site/data/echo-ws-4096.json b/site/data/echo-ws-4096.json index bb1b2a820..257b35e07 100644 --- a/site/data/echo-ws-4096.json +++ b/site/data/echo-ws-4096.json @@ -133,25 +133,6 @@ "status_4xx": 0, "status_5xx": 0 }, - { - "framework": "genhttp-11", - "language": "C#", - "rps": 1739280, - "avg_latency": "2.15ms", - "p99_latency": "13.50ms", - "cpu": "5994.4%", - "memory": "687MiB", - "connections": 4096, - "threads": 64, - "duration": "5s", - "pipeline": 1, - "bandwidth": "11.72MB/s", - "reconnects": 0, - "status_2xx": 8696403, - "status_3xx": 0, - "status_4xx": 0, - "status_5xx": 0 - }, { "framework": "go-websocket", "language": "Go", diff --git a/site/data/echo-ws-512.json b/site/data/echo-ws-512.json index cb983e259..afceea163 100644 --- a/site/data/echo-ws-512.json +++ b/site/data/echo-ws-512.json @@ -133,25 +133,6 @@ "status_4xx": 0, "status_5xx": 0 }, - { - "framework": "genhttp-11", - "language": "C#", - "rps": 1789519, - "avg_latency": "285us", - "p99_latency": "1.66ms", - "cpu": "5833.9%", - "memory": "188MiB", - "connections": 512, - "threads": 64, - "duration": "5s", - "pipeline": 1, - "bandwidth": "11.94MB/s", - "reconnects": 0, - "status_2xx": 8947599, - "status_3xx": 0, - "status_4xx": 0, - "status_5xx": 0 - }, { "framework": "go-websocket", "language": "Go", diff --git a/site/data/json-4096.json b/site/data/json-4096.json index 5eb54c725..3d9803f27 100644 --- a/site/data/json-4096.json +++ b/site/data/json-4096.json @@ -355,26 +355,6 @@ "status_4xx": 0, "status_5xx": 0 }, - { - "framework": "genhttp-11", - "language": "C#", - "rps": 663217, - "avg_latency": "5.49ms", - "p99_latency": "26.40ms", - "cpu": "5900.8%", - "memory": "488MiB", - "connections": 4096, - "threads": 64, - "duration": "5s", - "pipeline": 1, - "bandwidth": "2.28GB/s", - "input_bw": "31.62MB/s", - "reconnects": 130983, - "status_2xx": 3316086, - "status_3xx": 0, - "status_4xx": 0, - "status_5xx": 0 - }, { "framework": "genhttp-kestrel", "language": "C#", diff --git a/site/data/json-comp-16384.json b/site/data/json-comp-16384.json index b2bdcb228..f449b5acf 100644 --- a/site/data/json-comp-16384.json +++ b/site/data/json-comp-16384.json @@ -299,26 +299,6 @@ "status_4xx": 0, "status_5xx": 0 }, - { - "framework": "genhttp-11", - "language": "C#", - "rps": 291962, - "avg_latency": "38.78ms", - "p99_latency": "106.80ms", - "cpu": "5783.0%", - "memory": "3.6GiB", - "connections": 16384, - "threads": 64, - "duration": "5s", - "pipeline": 1, - "bandwidth": "489.62MB/s", - "input_bw": "21.72MB/s", - "reconnects": 51670, - "status_2xx": 1459810, - "status_3xx": 0, - "status_4xx": 0, - "status_5xx": 0 - }, { "framework": "genhttp-kestrel", "language": "C#", diff --git a/site/data/json-comp-4096.json b/site/data/json-comp-4096.json index 2f19cda17..8bb383fd1 100644 --- a/site/data/json-comp-4096.json +++ b/site/data/json-comp-4096.json @@ -299,26 +299,6 @@ "status_4xx": 0, "status_5xx": 0 }, - { - "framework": "genhttp-11", - "language": "C#", - "rps": 317344, - "avg_latency": "11.29ms", - "p99_latency": "46.40ms", - "cpu": "5897.9%", - "memory": "2.1GiB", - "connections": 4096, - "threads": 64, - "duration": "5s", - "pipeline": 1, - "bandwidth": "532.21MB/s", - "input_bw": "23.61MB/s", - "reconnects": 61434, - "status_2xx": 1586721, - "status_3xx": 0, - "status_4xx": 0, - "status_5xx": 0 - }, { "framework": "genhttp-kestrel", "language": "C#", diff --git a/site/data/json-comp-512.json b/site/data/json-comp-512.json index 659629943..30362442f 100644 --- a/site/data/json-comp-512.json +++ b/site/data/json-comp-512.json @@ -299,26 +299,6 @@ "status_4xx": 0, "status_5xx": 0 }, - { - "framework": "genhttp-11", - "language": "C#", - "rps": 330394, - "avg_latency": "1.47ms", - "p99_latency": "7.71ms", - "cpu": "5594.1%", - "memory": "439MiB", - "connections": 512, - "threads": 64, - "duration": "5s", - "pipeline": 1, - "bandwidth": "554.29MB/s", - "input_bw": "24.58MB/s", - "reconnects": 66083, - "status_2xx": 1651974, - "status_3xx": 0, - "status_4xx": 0, - "status_5xx": 0 - }, { "framework": "genhttp-kestrel", "language": "C#", diff --git a/site/data/json-tls-4096.json b/site/data/json-tls-4096.json index 00713e951..ef664d45e 100644 --- a/site/data/json-tls-4096.json +++ b/site/data/json-tls-4096.json @@ -190,25 +190,6 @@ "status_4xx": 0, "status_5xx": 0 }, - { - "framework": "genhttp-11", - "language": "C#", - "rps": 294202, - "avg_latency": "13.89ms", - "p99_latency": "13.89ms", - "cpu": "5788.4%", - "memory": "570MiB", - "connections": 4096, - "threads": 64, - "duration": "5s", - "pipeline": 1, - "bandwidth": "1.01GB", - "reconnects": 0, - "status_2xx": 1500629, - "status_3xx": 0, - "status_4xx": 0, - "status_5xx": 0 - }, { "framework": "genhttp-kestrel", "language": "C#", diff --git a/site/data/limited-conn-4096.json b/site/data/limited-conn-4096.json index 5f24d82a9..c8b70ae34 100644 --- a/site/data/limited-conn-4096.json +++ b/site/data/limited-conn-4096.json @@ -409,26 +409,6 @@ "status_4xx": 0, "status_5xx": 0 }, - { - "framework": "genhttp-11", - "language": "C#", - "rps": 942884, - "avg_latency": "2.10ms", - "p99_latency": "27.10ms", - "cpu": "5688.0%", - "memory": "359MiB", - "connections": 4096, - "threads": 64, - "duration": "5s", - "pipeline": 1, - "bandwidth": "115.97MB/s", - "input_bw": "72.84MB/s", - "reconnects": 471829, - "status_2xx": 4714421, - "status_3xx": 0, - "status_4xx": 0, - "status_5xx": 0 - }, { "framework": "genhttp-kestrel", "language": "C#", diff --git a/site/data/limited-conn-512.json b/site/data/limited-conn-512.json index 8e94fff66..e25011441 100644 --- a/site/data/limited-conn-512.json +++ b/site/data/limited-conn-512.json @@ -409,26 +409,6 @@ "status_4xx": 0, "status_5xx": 0 }, - { - "framework": "genhttp-11", - "language": "C#", - "rps": 983578, - "avg_latency": "508us", - "p99_latency": "5.27ms", - "cpu": "5711.2%", - "memory": "191MiB", - "connections": 512, - "threads": 64, - "duration": "5s", - "pipeline": 1, - "bandwidth": "120.97MB/s", - "input_bw": "75.98MB/s", - "reconnects": 491816, - "status_2xx": 4917894, - "status_3xx": 0, - "status_4xx": 0, - "status_5xx": 0 - }, { "framework": "genhttp-kestrel", "language": "C#", diff --git a/site/data/pipelined-4096.json b/site/data/pipelined-4096.json index 0d214cc88..6dc92c164 100644 --- a/site/data/pipelined-4096.json +++ b/site/data/pipelined-4096.json @@ -384,25 +384,6 @@ "status_4xx": 0, "status_5xx": 0 }, - { - "framework": "genhttp-11", - "language": "C#", - "rps": 3343454, - "avg_latency": "793us", - "p99_latency": "504us", - "cpu": "6262.0%", - "memory": "391MiB", - "connections": 4096, - "threads": 64, - "duration": "5s", - "pipeline": 16, - "bandwidth": "411.18MB/s", - "reconnects": 0, - "status_2xx": 16717270, - "status_3xx": 0, - "status_4xx": 0, - "status_5xx": 0 - }, { "framework": "genhttp-kestrel", "language": "C#", diff --git a/site/data/pipelined-512.json b/site/data/pipelined-512.json index d18143b05..440aceacd 100644 --- a/site/data/pipelined-512.json +++ b/site/data/pipelined-512.json @@ -384,25 +384,6 @@ "status_4xx": 0, "status_5xx": 0 }, - { - "framework": "genhttp-11", - "language": "C#", - "rps": 3218546, - "avg_latency": "673us", - "p99_latency": "2.33ms", - "cpu": "5837.1%", - "memory": "172MiB", - "connections": 512, - "threads": 64, - "duration": "5s", - "pipeline": 16, - "bandwidth": "395.82MB/s", - "reconnects": 0, - "status_2xx": 16092733, - "status_3xx": 0, - "status_4xx": 0, - "status_5xx": 0 - }, { "framework": "genhttp-kestrel", "language": "C#", diff --git a/site/data/static-1024.json b/site/data/static-1024.json index 4fddd42c9..9256ce792 100644 --- a/site/data/static-1024.json +++ b/site/data/static-1024.json @@ -364,25 +364,6 @@ "status_4xx": 0, "status_5xx": 0 }, - { - "framework": "genhttp-11", - "language": "C#", - "rps": 39568, - "avg_latency": "52.97ms", - "p99_latency": "52.97ms", - "cpu": "4333.0%", - "memory": "383MiB", - "connections": 1024, - "threads": 64, - "duration": "5s", - "pipeline": 1, - "bandwidth": "2.32GB", - "reconnects": 0, - "status_2xx": 201277, - "status_3xx": 0, - "status_4xx": 0, - "status_5xx": 0 - }, { "framework": "genhttp-kestrel", "language": "C#", diff --git a/site/data/upload-256.json b/site/data/upload-256.json index c3ac99f16..b5dd25a98 100644 --- a/site/data/upload-256.json +++ b/site/data/upload-256.json @@ -318,26 +318,6 @@ "status_4xx": 0, "status_5xx": 0 }, - { - "framework": "genhttp-11", - "language": "C#", - "rps": 2999, - "avg_latency": "80.41ms", - "p99_latency": "350.50ms", - "cpu": "4037.4%", - "memory": "159MiB", - "connections": 256, - "threads": 64, - "duration": "5s", - "pipeline": 1, - "bandwidth": "393.25KB/s", - "input_bw": "23.79GB/s", - "reconnects": 2948, - "status_2xx": 15088, - "status_3xx": 0, - "status_4xx": 0, - "status_5xx": 0 - }, { "framework": "genhttp-kestrel", "language": "C#", diff --git a/site/data/upload-32.json b/site/data/upload-32.json index 5e8ab7f84..26cf1c8d3 100644 --- a/site/data/upload-32.json +++ b/site/data/upload-32.json @@ -318,26 +318,6 @@ "status_4xx": 0, "status_5xx": 0 }, - { - "framework": "genhttp-11", - "language": "C#", - "rps": 2655, - "avg_latency": "12.02ms", - "p99_latency": "35.10ms", - "cpu": "2713.4%", - "memory": "100MiB", - "connections": 32, - "threads": 64, - "duration": "5s", - "pipeline": 1, - "bandwidth": "347.92KB/s", - "input_bw": "21.06GB/s", - "reconnects": 2657, - "status_2xx": 13275, - "status_3xx": 0, - "status_4xx": 0, - "status_5xx": 0 - }, { "framework": "genhttp-kestrel", "language": "C#", diff --git a/site/static/logs/async-db/1024/genhttp-11.log b/site/static/logs/async-db/1024/genhttp-11.log new file mode 100644 index 000000000..ec73cd531 --- /dev/null +++ b/site/static/logs/async-db/1024/genhttp-11.log @@ -0,0 +1,2 @@ +Cannot load library libgssapi_krb5.so.2 +Error: libgssapi_krb5.so.2: cannot open shared object file: No such file or directory