From 36b9ae5f2b6c51516ae09988d9c2e605533ee92b Mon Sep 17 00:00:00 2001 From: iapicca Date: Mon, 16 Feb 2026 21:45:35 +0100 Subject: [PATCH 01/12] remove superseeded code and unnecessary dependencies --- frameworks/Dart/dart3/bin/server.dart | 26 +++++++++----------------- frameworks/Dart/dart3/pubspec.yaml | 3 --- 2 files changed, 9 insertions(+), 20 deletions(-) diff --git a/frameworks/Dart/dart3/bin/server.dart b/frameworks/Dart/dart3/bin/server.dart index 78ee11a10e8..0cd2d427c52 100755 --- a/frameworks/Dart/dart3/bin/server.dart +++ b/frameworks/Dart/dart3/bin/server.dart @@ -2,7 +2,6 @@ import 'dart:convert'; import 'dart:io'; import 'dart:isolate'; import 'dart:math' show min; -import 'package:args/args.dart' show ArgParser; /// Environment declarations are evaluated at compile-time. Use 'const' to /// ensure values are baked into AOT/Native binaries for the benchmark. @@ -14,6 +13,14 @@ import 'package:args/args.dart' show ArgParser; /// but most ahead-of-time compiled platforms will not have this information." const _maxIsolatesfromEnvironment = int.fromEnvironment('MAX_ISOLATES'); +/// The fixed TCP port used by the server. +/// Defined here for visibility and ease of configuration. +const _defaultPort = 8080; + +/// A reusable instance of the UTF-8 JSON encoder to efficiently +/// transform Dart objects into byte arrays for HTTP responses. +final _jsonEncoder = JsonUtf8Encoder(); + void main(List args) { /// Defines local isolate quota, using MAX_ISOLATES if provided. /// Falls back to total available cores while respecting hardware limits. @@ -74,7 +81,7 @@ void _startServer(List args) async { /// Binds the [HttpServer] on `0.0.0.0:8080`. final server = await HttpServer.bind( InternetAddress.anyIPv4, - _portParser(args, defaultPort: 8080), + _defaultPort, shared: true, ); @@ -142,18 +149,3 @@ void _plaintextTest(HttpRequest request) => _sendText( request, 'Hello, World!', ); - -final _jsonEncoder = JsonUtf8Encoder(); - -int _portParser( - List args, { - required int defaultPort, - portTag = 'port', -}) { - final parser = ArgParser() - ..addOption( - portTag, - defaultsTo: '$defaultPort', - ); - return int.tryParse(parser.parse(args)[portTag]) ?? defaultPort; -} diff --git a/frameworks/Dart/dart3/pubspec.yaml b/frameworks/Dart/dart3/pubspec.yaml index 28d0d22bec9..38e493c72fb 100644 --- a/frameworks/Dart/dart3/pubspec.yaml +++ b/frameworks/Dart/dart3/pubspec.yaml @@ -3,9 +3,6 @@ description: A benchmark of dart environment: sdk: ^3.10.8 -dependencies: - args: ^2.7.0 - dev_dependencies: lints: ^6.0.0 From 450876ad46b639a3d6ef2fbe86d4ec310cbcd672 Mon Sep 17 00:00:00 2001 From: iapicca Date: Mon, 16 Feb 2026 21:46:39 +0100 Subject: [PATCH 02/12] bump dependencies --- frameworks/Dart/dart3/pubspec.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frameworks/Dart/dart3/pubspec.yaml b/frameworks/Dart/dart3/pubspec.yaml index 38e493c72fb..aeb53912216 100644 --- a/frameworks/Dart/dart3/pubspec.yaml +++ b/frameworks/Dart/dart3/pubspec.yaml @@ -1,8 +1,8 @@ name: dartbenchmark description: A benchmark of dart environment: - sdk: ^3.10.8 + sdk: ^3.11.0 dev_dependencies: - lints: ^6.0.0 + lints: ^6.1.0 From d843d61d4ca8f67c6bfed9c8fd7fe00660bfff29 Mon Sep 17 00:00:00 2001 From: iapicca Date: Mon, 16 Feb 2026 21:57:09 +0100 Subject: [PATCH 03/12] move Dockerfile(s) in specific test folders --- frameworks/Dart/dart3/.gitignore | 2 +- frameworks/Dart/dart3/benchmark_config.json | 3 ++ frameworks/Dart/dart3/dart3-hybrid.dockerfile | 34 --------------- .../Dockerfile} | 4 +- frameworks/Dart/dart3/dart_hybrid/run.sh | 41 ------------------- .../Dart/dart3/dart_hybrid/traefik.yaml | 17 -------- .../dart3/dart_hybrid/traefik_dynamic.yaml | 19 --------- .../Dockerfile} | 2 +- 8 files changed, 6 insertions(+), 116 deletions(-) delete mode 100644 frameworks/Dart/dart3/dart3-hybrid.dockerfile rename frameworks/Dart/dart3/{dart3-aot.dockerfile => dart_aot/Dockerfile} (80%) delete mode 100644 frameworks/Dart/dart3/dart_hybrid/run.sh delete mode 100644 frameworks/Dart/dart3/dart_hybrid/traefik.yaml delete mode 100644 frameworks/Dart/dart3/dart_hybrid/traefik_dynamic.yaml rename frameworks/Dart/dart3/{dart3.dockerfile => dart_native/Dockerfile} (89%) diff --git a/frameworks/Dart/dart3/.gitignore b/frameworks/Dart/dart3/.gitignore index 5929f0f21e5..a4aa0af72a0 100644 --- a/frameworks/Dart/dart3/.gitignore +++ b/frameworks/Dart/dart3/.gitignore @@ -1,3 +1,3 @@ .dart_tool/ *.lock - +!bin \ No newline at end of file diff --git a/frameworks/Dart/dart3/benchmark_config.json b/frameworks/Dart/dart3/benchmark_config.json index 24a5f9ff776..10ddf7f9d98 100644 --- a/frameworks/Dart/dart3/benchmark_config.json +++ b/frameworks/Dart/dart3/benchmark_config.json @@ -3,6 +3,7 @@ "tests": [{ "default": { "display_name": "dart3_native", + "dockerfile": "dart_native/Dockerfile", "json_url": "/json", "plaintext_url": "/plaintext", "port": 8080, @@ -15,6 +16,7 @@ }, "aot": { "display_name": "dart3_aot", + "dockerfile": "dart_aot/Dockerfile", "json_url": "/json", "plaintext_url": "/plaintext", "port": 8080, @@ -27,6 +29,7 @@ }, "hybrid": { "display_name": "dart3_hybrid", + "docker_compose": "dart_hybrid/docker-compose.yml", "json_url": "/json", "plaintext_url": "/plaintext", "port": 8080, diff --git a/frameworks/Dart/dart3/dart3-hybrid.dockerfile b/frameworks/Dart/dart3/dart3-hybrid.dockerfile deleted file mode 100644 index bcff9adc16d..00000000000 --- a/frameworks/Dart/dart3/dart3-hybrid.dockerfile +++ /dev/null @@ -1,34 +0,0 @@ - -FROM dart:3.10.8 AS build -WORKDIR /app - -# Define the maximum number of Dart Isolates at build time -ARG MAX_ISOLATES=10 - -COPY pubspec.yaml . -COPY bin bin - -RUN dart compile exe bin/server.dart \ - --define=MAX_ISOLATES=${MAX_ISOLATES} \ - -o server - -FROM traefik:latest AS traefik_source - -FROM busybox:glibc -WORKDIR /app -# Matches `ARG MAX_ISOLATES` in `build` -ENV MAX_ISOLATES=10 -# Define the minimum number of processes dedicated to `Traefik` -ENV MIN_TRAEFIK_PROCESSES=4 - -COPY --from=build /runtime/ / -COPY --from=build /app/server /app/server -COPY --from=traefik_source /usr/local/bin/traefik /usr/local/bin/traefik -COPY /dart_hybrid/traefik.yaml /etc/traefik/traefik.yaml -COPY /dart_hybrid/traefik_dynamic.yaml /etc/traefik/traefik_dynamic.yaml -COPY /dart_hybrid/run.sh /app/run.sh - -RUN chmod +x /app/run.sh - -EXPOSE 8080 -CMD ["/app/run.sh"] \ No newline at end of file diff --git a/frameworks/Dart/dart3/dart3-aot.dockerfile b/frameworks/Dart/dart3/dart_aot/Dockerfile similarity index 80% rename from frameworks/Dart/dart3/dart3-aot.dockerfile rename to frameworks/Dart/dart3/dart_aot/Dockerfile index be6a6dff1a7..4797e76d1c2 100644 --- a/frameworks/Dart/dart3/dart3-aot.dockerfile +++ b/frameworks/Dart/dart3/dart_aot/Dockerfile @@ -1,8 +1,7 @@ -FROM dart:3.10.8 AS build +FROM dart:3.11.0 AS build WORKDIR /app -# Define the build-time argument (Default to 8) ARG MAX_ISOLATES=8 COPY pubspec.yaml . @@ -20,5 +19,4 @@ COPY --from=build /app/server.aot /app/server.aot EXPOSE 8080 -# Distroless requires absolute paths ENTRYPOINT ["/usr/lib/dart/bin/dartaotruntime", "/app/server.aot"] diff --git a/frameworks/Dart/dart3/dart_hybrid/run.sh b/frameworks/Dart/dart3/dart_hybrid/run.sh deleted file mode 100644 index 18a8bd0a620..00000000000 --- a/frameworks/Dart/dart3/dart_hybrid/run.sh +++ /dev/null @@ -1,41 +0,0 @@ -#!/bin/sh - -# --- 1. Environment & Hardware Detection --- -TOTAL_PROCESSES=$(grep -c ^processor /proc/cpuinfo) -MAX_ISO=${MAX_ISOLATES:-8} -RESERVED=${MIN_TRAEFIK_PROCESSES:-4} - -# --- 2. Scaling Logic --- -if [ "$TOTAL_PROCESSES" -le "$((MAX_ISO * 2))" ]; then - exec /app/server -else - DART_POOL=$((TOTAL_PROCESSES - RESERVED)) - NUM_WORKERS=$(( DART_POOL / MAX_ISO )) - DART_PROCESSES=$(( NUM_WORKERS * MAX_ISO )) - TRAEFIK_PROCESSES=$(( TOTAL_PROCESSES - DART_PROCESSES )) - - export GOMAXPROCS=$TRAEFIK_PROCESSES - -# --- 3. Generate Backend List --- - TMP_URLS="/tmp/urls.yaml" - true > "$TMP_URLS" - - for i in $(seq 1 $NUM_WORKERS); do - PORT=$((9000 + i)) - echo " - url: \"http://127.0.0.1:$PORT\"" >> "$TMP_URLS" - - /app/server --port=$PORT & - done - -# --- 4. Traefik Configuration --- - sed -i "/# DART_WORKERS_PLACEHOLDER/ { - r $TMP_URLS - d - }" /etc/traefik/traefik_dynamic.yaml - rm "$TMP_URLS" - -# --- 5. Readiness & Execution --- - until nc -z 127.0.0.1 9001; do sleep 0.1; done - - exec traefik --configfile=/etc/traefik/traefik.yaml -fi \ No newline at end of file diff --git a/frameworks/Dart/dart3/dart_hybrid/traefik.yaml b/frameworks/Dart/dart3/dart_hybrid/traefik.yaml deleted file mode 100644 index b7d0e8dee2e..00000000000 --- a/frameworks/Dart/dart3/dart_hybrid/traefik.yaml +++ /dev/null @@ -1,17 +0,0 @@ -global: - checkNewVersion: false - sendAnonymousUsage: false - -entryPoints: - web: - address: ":8080" - transport: - respondingTimeouts: - readTimeout: "0s" - writeTimeout: "0s" - idleTimeout: "0s" - -providers: - file: - filename: /etc/traefik/traefik_dynamic.yaml - watch: false \ No newline at end of file diff --git a/frameworks/Dart/dart3/dart_hybrid/traefik_dynamic.yaml b/frameworks/Dart/dart3/dart_hybrid/traefik_dynamic.yaml deleted file mode 100644 index f4c2dd2b150..00000000000 --- a/frameworks/Dart/dart3/dart_hybrid/traefik_dynamic.yaml +++ /dev/null @@ -1,19 +0,0 @@ -http: - routers: - to-dart: - rule: "PathPrefix(`/`)" - service: dart-service - middlewares: - - dart-header - entryPoints: - - web - middlewares: - dart-header: - headers: - customResponseHeaders: - Server: "dart" - services: - dart-service: - loadBalancer: - servers: - # DART_WORKERS_PLACEHOLDER \ No newline at end of file diff --git a/frameworks/Dart/dart3/dart3.dockerfile b/frameworks/Dart/dart3/dart_native/Dockerfile similarity index 89% rename from frameworks/Dart/dart3/dart3.dockerfile rename to frameworks/Dart/dart3/dart_native/Dockerfile index 5e5c6350ebb..863dd665d04 100644 --- a/frameworks/Dart/dart3/dart3.dockerfile +++ b/frameworks/Dart/dart3/dart_native/Dockerfile @@ -1,5 +1,5 @@ -FROM dart:3.10.8 AS build +FROM dart:3.11.0 AS build WORKDIR /app COPY pubspec.yaml . From 65db002f21a80767be6bd4a94738f06e25ff22de Mon Sep 17 00:00:00 2001 From: iapicca Date: Mon, 16 Feb 2026 22:04:37 +0100 Subject: [PATCH 04/12] move server.dart in specific test folders and remove unnecessary code --- .../Dart/dart3/dart_aot/bin/server.dart | 148 ++++++++++++++++++ .../Dart/dart3/dart_native/bin/server.dart | 96 ++++++++++++ 2 files changed, 244 insertions(+) create mode 100755 frameworks/Dart/dart3/dart_aot/bin/server.dart create mode 100755 frameworks/Dart/dart3/dart_native/bin/server.dart diff --git a/frameworks/Dart/dart3/dart_aot/bin/server.dart b/frameworks/Dart/dart3/dart_aot/bin/server.dart new file mode 100755 index 00000000000..af544644ea9 --- /dev/null +++ b/frameworks/Dart/dart3/dart_aot/bin/server.dart @@ -0,0 +1,148 @@ +import 'dart:convert'; +import 'dart:io'; +import 'dart:isolate'; +import 'dart:math' show min; + +/// Environment declarations are evaluated at compile-time. Use 'const' to +/// ensure values are baked into AOT/Native binaries for the benchmark. +/// +/// From https://api.dart.dev/dart-core/int/int.fromEnvironment.html: +/// "This constructor is only guaranteed to work when invoked as const. +/// It may work as a non-constant invocation on some platforms +/// which have access to compiler options at run-time, +/// but most ahead-of-time compiled platforms will not have this information." +const _maxIsolatesfromEnvironment = int.fromEnvironment('MAX_ISOLATES'); + +/// The fixed TCP port used by the server. +/// Defined here for visibility and ease of configuration. +const _defaultPort = 8080; + +/// A reusable instance of the UTF-8 JSON encoder to efficiently +/// transform Dart objects into byte arrays for HTTP responses. +final _jsonEncoder = JsonUtf8Encoder(); + +/// Internal token used to notify newly spawned processes that they +/// belong to a secondary "worker group". +const workerGroupTag = '--workerGroup'; + +void main(List args) { + /// Defines local isolate quota, using MAX_ISOLATES if provided. + /// Falls back to total available cores while respecting hardware limits. + var maxIsolates = _maxIsolatesfromEnvironment > 0 + ? min(_maxIsolatesfromEnvironment, Platform.numberOfProcessors) + : Platform.numberOfProcessors; + + /// Determine if this process instance was initialized as a worker group. + final isWorkerGroup = args.contains(workerGroupTag); + + if (isWorkerGroup) { + /// Sanitize the argument list to ensure the internal token does not + /// interfere with application-level argument parsing. + args.removeAt(args.indexOf(workerGroupTag)); + } + /// Prevents recursive spawning + /// by ensuring only the primary process can spawn worker groups + else { + /// Calculate the number of secondary worker groups required + /// to fully utilize the available hardware capacity. + /// + /// Each group serves as a container for multiple isolates, + /// helping to bypass internal VM scaling bottlenecks. + final workerGroups = Platform.numberOfProcessors ~/ maxIsolates - 1; + + /// Bootstraps independent worker processes via AOT snapshots. + /// Each process initializes its own Isolate Group. + for (var i = 0; i < workerGroups; i++) { + /// [Platform.script] identifies the AOT snapshot or executable. + /// [Isolate.spawnUri] spawns a new process group via [main()]. + Isolate.spawnUri(Platform.script, [...args, workerGroupTag], null); + } + + /// Updates local isolate limits, assigning the primary group + /// the remaining cores after worker group allocation. + maxIsolates = Platform.numberOfProcessors - workerGroups * maxIsolates; + } + + /// Create an [Isolate] containing an [HttpServer] + /// for each processor after the first + for (var i = 1; i < maxIsolates; i++) { + Isolate.spawn(_startServer, args); + } + + /// Create a [HttpServer] for the first processor + _startServer(args); +} + +/// Creates and setup a [HttpServer] +void _startServer(List args) async { + /// Binds the [HttpServer] on `0.0.0.0:8080`. + final server = await HttpServer.bind( + InternetAddress.anyIPv4, + _defaultPort, + shared: true, + ); + + server + ..defaultResponseHeaders.clear() + /// Sets [HttpServer]'s [serverHeader]. + ..serverHeader = 'dart' + /// Handles [HttpRequest]'s from [HttpServer]. + ..listen(_handleRequest); +} + +/// Dispatches requests to specific handlers. +void _handleRequest(HttpRequest request) { + switch (request.uri.path) { + case '/json': + _jsonTest(request); + break; + case '/plaintext': + _plaintextTest(request); + break; + default: + _sendResponse(request, HttpStatus.notFound); + } +} + +/// Completes the given [request] by writing the [bytes] with the given +/// [statusCode] and [type]. +void _sendResponse( + HttpRequest request, + int statusCode, { + ContentType? type, + List bytes = const [], +}) => request.response + ..statusCode = statusCode + ..headers.contentType = type + ..headers.date = DateTime.now() + ..contentLength = bytes.length + ..add(bytes) + ..close(); + +/// Completes the given [request] by writing the [response] as JSON. +void _sendJson(HttpRequest request, Object response) => _sendResponse( + request, + HttpStatus.ok, + type: ContentType.json, + bytes: _jsonEncoder.convert(response), +); + +/// Completes the given [request] by writing the [response] as plain text. +void _sendText(HttpRequest request, String response) => _sendResponse( + request, + HttpStatus.ok, + type: ContentType.text, + bytes: utf8.encode(response), +); + +/// Responds with the JSON test to the [request]. +void _jsonTest(HttpRequest request) => _sendJson( + request, + const {'message': 'Hello, World!'}, +); + +/// Responds with the plaintext test to the [request]. +void _plaintextTest(HttpRequest request) => _sendText( + request, + 'Hello, World!', +); diff --git a/frameworks/Dart/dart3/dart_native/bin/server.dart b/frameworks/Dart/dart3/dart_native/bin/server.dart new file mode 100755 index 00000000000..5a34edaa825 --- /dev/null +++ b/frameworks/Dart/dart3/dart_native/bin/server.dart @@ -0,0 +1,96 @@ +import 'dart:convert'; +import 'dart:io'; +import 'dart:isolate'; + +/// The fixed TCP port used by the server. +/// Defined here for visibility and ease of configuration. +const _defaultPort = 8080; + +/// A reusable instance of the UTF-8 JSON encoder to efficiently +/// transform Dart objects into byte arrays for HTTP responses. +final _jsonEncoder = JsonUtf8Encoder(); + +void main(List args) { + /// Create an [Isolate] containing an [HttpServer] + /// for each processor after the first + for (var i = 1; i < Platform.numberOfProcessors; i++) { + Isolate.spawn(_startServer, args); + } + + /// Create a [HttpServer] for the first processor + _startServer(args); +} + +/// Creates and setup a [HttpServer] +void _startServer(List args) async { + /// Binds the [HttpServer] on `0.0.0.0:8080`. + final server = await HttpServer.bind( + InternetAddress.anyIPv4, + _defaultPort, + shared: true, + ); + + server + ..defaultResponseHeaders.clear() + /// Sets [HttpServer]'s [serverHeader]. + ..serverHeader = 'dart' + /// Handles [HttpRequest]'s from [HttpServer]. + ..listen(_handleRequest); +} + +/// Dispatches requests to specific handlers. +void _handleRequest(HttpRequest request) { + switch (request.uri.path) { + case '/json': + _jsonTest(request); + break; + case '/plaintext': + _plaintextTest(request); + break; + default: + _sendResponse(request, HttpStatus.notFound); + } +} + +/// Completes the given [request] by writing the [bytes] with the given +/// [statusCode] and [type]. +void _sendResponse( + HttpRequest request, + int statusCode, { + ContentType? type, + List bytes = const [], +}) => request.response + ..statusCode = statusCode + ..headers.contentType = type + ..headers.date = DateTime.now() + ..contentLength = bytes.length + ..add(bytes) + ..close(); + +/// Completes the given [request] by writing the [response] as JSON. +void _sendJson(HttpRequest request, Object response) => _sendResponse( + request, + HttpStatus.ok, + type: ContentType.json, + bytes: _jsonEncoder.convert(response), +); + +/// Completes the given [request] by writing the [response] as plain text. +void _sendText(HttpRequest request, String response) => _sendResponse( + request, + HttpStatus.ok, + type: ContentType.text, + bytes: utf8.encode(response), +); + +/// Responds with the JSON test to the [request]. +void _jsonTest(HttpRequest request) => _sendJson( + request, + const {'message': 'Hello, World!'}, +); + +/// Responds with the plaintext test to the [request]. +void _plaintextTest(HttpRequest request) => _sendText( + request, + 'Hello, World!', +); From 26d40aef8dfe10f366cc011cff945324bb6fa1a6 Mon Sep 17 00:00:00 2001 From: iapicca Date: Mon, 16 Feb 2026 22:14:07 +0100 Subject: [PATCH 05/12] update path bin/server.dart relative to the root context --- frameworks/Dart/dart3/dart_aot/Dockerfile | 2 +- frameworks/Dart/dart3/dart_native/Dockerfile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/frameworks/Dart/dart3/dart_aot/Dockerfile b/frameworks/Dart/dart3/dart_aot/Dockerfile index 4797e76d1c2..36fb653f23a 100644 --- a/frameworks/Dart/dart3/dart_aot/Dockerfile +++ b/frameworks/Dart/dart3/dart_aot/Dockerfile @@ -5,7 +5,7 @@ WORKDIR /app ARG MAX_ISOLATES=8 COPY pubspec.yaml . -COPY bin bin +COPY dart_native/bin/ bin/ RUN dart compile aot-snapshot bin/server.dart \ --define=MAX_ISOLATES=${MAX_ISOLATES} \ diff --git a/frameworks/Dart/dart3/dart_native/Dockerfile b/frameworks/Dart/dart3/dart_native/Dockerfile index 863dd665d04..6b9a5b82753 100644 --- a/frameworks/Dart/dart3/dart_native/Dockerfile +++ b/frameworks/Dart/dart3/dart_native/Dockerfile @@ -3,7 +3,7 @@ FROM dart:3.11.0 AS build WORKDIR /app COPY pubspec.yaml . -COPY bin bin +COPY dart_native/bin/ bin/ RUN dart compile exe bin/server.dart -o server From a7440a4d42ccb05af3106d50c2951092e694c6e8 Mon Sep 17 00:00:00 2001 From: iapicca Date: Tue, 17 Feb 2026 00:01:41 +0100 Subject: [PATCH 06/12] update readme --- frameworks/Dart/dart3/README.md | 42 ++++++++++++++++++++++++--------- 1 file changed, 31 insertions(+), 11 deletions(-) diff --git a/frameworks/Dart/dart3/README.md b/frameworks/Dart/dart3/README.md index 837164c7eee..ca73188f547 100644 --- a/frameworks/Dart/dart3/README.md +++ b/frameworks/Dart/dart3/README.md @@ -1,22 +1,42 @@ # Dart 3 Benchmarking Test -## Test Type Implementation Source Code - -- [JSON](server.dart) -- [PLAINTEXT](server.dart) - ## Important Libraries The tests were run with: -- [Dart v3.10.8](https://dart.dev/) +- [Dart v3.11.0](https://dart.dev/) + +## Benchmark Variants + +### Native + +Minimal implementation with the smallest resource footprint. +Supports basic horizontal scaling via [Isolates](https://dart.dev/language/isolates) and socket sharing. +([source code](https://github.com/TechEmpower/FrameworkBenchmarks/tree/master/frameworks/Dart/dart3/dart_native)) + +Test URLs: + +- JSON: `http://localhost:8080/json` +- PLAINTEXT: `http://localhost:8080/plaintext` + +### AOT + +Performance-oriented AOT implementation for superior horizontal scaling. +Achieves lowest latency and higher throughput with a slightly larger footprint. +([source code](https://github.com/TechEmpower/FrameworkBenchmarks/tree/master/frameworks/Dart/dart3/dart_aot)) + +Test URLs: -## Test URLs +- JSON: `http://localhost:8080/json` +- PLAINTEXT: `http://localhost:8080/plaintext` -### JSON +### Hybrid -`http://localhost:8080/json` +Uses Dart Native, but leverages a load balancer to bypass horizontal scaling limits. +Designed for better hardware utilization despite increased complexity and overhead. +([source code](https://github.com/TechEmpower/FrameworkBenchmarks/tree/master/frameworks/Dart/dart3/dart_hybrid)) -### PLAINTEXT +Test URLs: -`http://localhost:8080/plaintext` +- JSON: `http://localhost:8080/json` +- PLAINTEXT: `http://localhost:8080/plaintext` From 13cdf4d9bb6383acb625fd380bd8b3c58dbed113 Mon Sep 17 00:00:00 2001 From: iapicca Date: Tue, 17 Feb 2026 00:03:17 +0100 Subject: [PATCH 07/12] delete server.dart in root folder --- frameworks/Dart/dart3/bin/server.dart | 151 -------------------------- 1 file changed, 151 deletions(-) delete mode 100755 frameworks/Dart/dart3/bin/server.dart diff --git a/frameworks/Dart/dart3/bin/server.dart b/frameworks/Dart/dart3/bin/server.dart deleted file mode 100755 index 0cd2d427c52..00000000000 --- a/frameworks/Dart/dart3/bin/server.dart +++ /dev/null @@ -1,151 +0,0 @@ -import 'dart:convert'; -import 'dart:io'; -import 'dart:isolate'; -import 'dart:math' show min; - -/// Environment declarations are evaluated at compile-time. Use 'const' to -/// ensure values are baked into AOT/Native binaries for the benchmark. -/// -/// From https://api.dart.dev/dart-core/int/int.fromEnvironment.html: -/// "This constructor is only guaranteed to work when invoked as const. -/// It may work as a non-constant invocation on some platforms -/// which have access to compiler options at run-time, -/// but most ahead-of-time compiled platforms will not have this information." -const _maxIsolatesfromEnvironment = int.fromEnvironment('MAX_ISOLATES'); - -/// The fixed TCP port used by the server. -/// Defined here for visibility and ease of configuration. -const _defaultPort = 8080; - -/// A reusable instance of the UTF-8 JSON encoder to efficiently -/// transform Dart objects into byte arrays for HTTP responses. -final _jsonEncoder = JsonUtf8Encoder(); - -void main(List args) { - /// Defines local isolate quota, using MAX_ISOLATES if provided. - /// Falls back to total available cores while respecting hardware limits. - var maxIsolates = _maxIsolatesfromEnvironment > 0 - ? min(_maxIsolatesfromEnvironment, Platform.numberOfProcessors) - : Platform.numberOfProcessors; - - /// Triggers process-level horizontal scaling when running in AOT. - if (Platform.script.toFilePath().endsWith('.aot')) { - /// Internal token used to notify newly spawned processes that they - /// belong to a secondary "worker group". - const workerGroupTag = '--workerGroup'; - - /// Determine if this process instance was initialized as a worker group. - final isWorkerGroup = args.contains(workerGroupTag); - - if (isWorkerGroup) { - /// Sanitize the argument list to ensure the internal token does not - /// interfere with application-level argument parsing. - args.removeAt(args.indexOf(workerGroupTag)); - } - /// Prevents recursive spawning - /// by ensuring only the primary process can spawn worker groups - else { - /// Calculate the number of secondary worker groups required - /// to fully utilize the available hardware capacity. - /// - /// Each group serves as a container for multiple isolates, - /// helping to bypass internal VM scaling bottlenecks. - final workerGroups = Platform.numberOfProcessors ~/ maxIsolates - 1; - - /// Bootstraps independent worker processes via AOT snapshots. - /// Each process initializes its own Isolate Group. - for (var i = 0; i < workerGroups; i++) { - /// [Platform.script] identifies the AOT snapshot or executable. - /// [Isolate.spawnUri] spawns a new process group via [main()]. - Isolate.spawnUri(Platform.script, [...args, workerGroupTag], null); - } - - /// Updates local isolate limits, assigning the primary group - /// the remaining cores after worker group allocation. - maxIsolates = Platform.numberOfProcessors - workerGroups * maxIsolates; - } - } - - /// Create an [Isolate] containing an [HttpServer] - /// for each processor after the first - for (var i = 1; i < maxIsolates; i++) { - Isolate.spawn(_startServer, args); - } - - /// Create a [HttpServer] for the first processor - _startServer(args); -} - -/// Creates and setup a [HttpServer] -void _startServer(List args) async { - /// Binds the [HttpServer] on `0.0.0.0:8080`. - final server = await HttpServer.bind( - InternetAddress.anyIPv4, - _defaultPort, - shared: true, - ); - - server - ..defaultResponseHeaders.clear() - /// Sets [HttpServer]'s [serverHeader]. - ..serverHeader = 'dart' - /// Handles [HttpRequest]'s from [HttpServer]. - ..listen(_handleRequest); -} - -/// Dispatches requests to specific handlers. -void _handleRequest(HttpRequest request) { - switch (request.uri.path) { - case '/json': - _jsonTest(request); - break; - case '/plaintext': - _plaintextTest(request); - break; - default: - _sendResponse(request, HttpStatus.notFound); - } -} - -/// Completes the given [request] by writing the [bytes] with the given -/// [statusCode] and [type]. -void _sendResponse( - HttpRequest request, - int statusCode, { - ContentType? type, - List bytes = const [], -}) => request.response - ..statusCode = statusCode - ..headers.contentType = type - ..headers.date = DateTime.now() - ..contentLength = bytes.length - ..add(bytes) - ..close(); - -/// Completes the given [request] by writing the [response] as JSON. -void _sendJson(HttpRequest request, Object response) => _sendResponse( - request, - HttpStatus.ok, - type: ContentType.json, - bytes: _jsonEncoder.convert(response), -); - -/// Completes the given [request] by writing the [response] as plain text. -void _sendText(HttpRequest request, String response) => _sendResponse( - request, - HttpStatus.ok, - type: ContentType.text, - bytes: utf8.encode(response), -); - -/// Responds with the JSON test to the [request]. -void _jsonTest(HttpRequest request) => _sendJson( - request, - const {'message': 'Hello, World!'}, -); - -/// Responds with the plaintext test to the [request]. -void _plaintextTest(HttpRequest request) => _sendText( - request, - 'Hello, World!', -); From 4dfd42c9c6418aa740f7053d77e83fced60b51f2 Mon Sep 17 00:00:00 2001 From: iapicca Date: Tue, 17 Feb 2026 00:55:38 +0100 Subject: [PATCH 08/12] add update dart_hybrid implementation --- .../Dart/dart3/dart_aot/bin/server.dart | 2 +- frameworks/Dart/dart3/dart_hybrid/Dockerfile | 15 +++ .../Dart/dart3/dart_hybrid/bin/server.dart | 108 ++++++++++++++++++ .../Dart/dart3/dart_hybrid/docker-compose.yml | 58 ++++++++++ .../Dart/dart3/dart_native/bin/server.dart | 2 +- 5 files changed, 183 insertions(+), 2 deletions(-) create mode 100644 frameworks/Dart/dart3/dart_hybrid/Dockerfile create mode 100644 frameworks/Dart/dart3/dart_hybrid/bin/server.dart create mode 100644 frameworks/Dart/dart3/dart_hybrid/docker-compose.yml diff --git a/frameworks/Dart/dart3/dart_aot/bin/server.dart b/frameworks/Dart/dart3/dart_aot/bin/server.dart index af544644ea9..8d7d8205fe8 100755 --- a/frameworks/Dart/dart3/dart_aot/bin/server.dart +++ b/frameworks/Dart/dart3/dart_aot/bin/server.dart @@ -85,7 +85,7 @@ void _startServer(List args) async { server ..defaultResponseHeaders.clear() /// Sets [HttpServer]'s [serverHeader]. - ..serverHeader = 'dart' + ..serverHeader = 'dart_aot' /// Handles [HttpRequest]'s from [HttpServer]. ..listen(_handleRequest); } diff --git a/frameworks/Dart/dart3/dart_hybrid/Dockerfile b/frameworks/Dart/dart3/dart_hybrid/Dockerfile new file mode 100644 index 00000000000..d36bc09fd3e --- /dev/null +++ b/frameworks/Dart/dart3/dart_hybrid/Dockerfile @@ -0,0 +1,15 @@ + +FROM dart:3.11.0 AS build +WORKDIR /app + +COPY pubspec.yaml . +COPY dart_hybrid/bin/ bin/ + +RUN dart compile exe bin/server.dart -o server + +FROM scratch +COPY --from=build /runtime/ / +COPY --from=build /app/server /bin/server + +EXPOSE 8080 +ENTRYPOINT ["server"] \ No newline at end of file diff --git a/frameworks/Dart/dart3/dart_hybrid/bin/server.dart b/frameworks/Dart/dart3/dart_hybrid/bin/server.dart new file mode 100644 index 00000000000..f92054e9988 --- /dev/null +++ b/frameworks/Dart/dart3/dart_hybrid/bin/server.dart @@ -0,0 +1,108 @@ +import 'dart:convert'; +import 'dart:io'; +import 'dart:isolate'; + +void main() { + /// Retrieve the maximum number of isolates from the environment variables. + final maxIsolatesFromEnvironment = Platform.environment['MAX_ISOLATES']; + if (maxIsolatesFromEnvironment == null) { + throw Exception('MAX_ISOLATES environment variable is not set.'); + } + + /// Parse the isolate count; ensures we have a valid integer for scaling. + final maxIsolates = int.tryParse(maxIsolatesFromEnvironment); + if (maxIsolates == null) { + throw Exception('MAX_ISOLATES must be a valid integer.'); + } + + /// Retrieve the file system path for the Unix Domain Socket. + final socketPath = Platform.environment['SOCKET_PATH']; + if (socketPath == null) { + throw Exception('SOCKET_PATH environment variable is not set.'); + } + + /// Define the network address as a Unix Domain Socket (UDS). + /// This is often faster than TCP for local inter-process communication. + final address = InternetAddress(socketPath, type: InternetAddressType.unix); + + /// Create an [Isolate] containing an [HttpServer] + /// for each processor after the first + for (int i = 1; i < maxIsolates; i++) { + Isolate.spawn(_startServer, address); + } + + /// Create a [HttpServer] for the first processor + _startServer(address); +} + +/// Initializes and binds the [HttpServer] to the provided [address]. +/// +/// Setting [shared] to true allows multiple isolates to bind to the same +/// address/port, enabling automatic load balancing by the OS kernel. +void _startServer(InternetAddress address) async { + final server = await HttpServer.bind(address, 0, shared: true); + + server + ..defaultResponseHeaders.clear() + /// Sets [HttpServer]'s [serverHeader]. + ..serverHeader = 'dart_hybrid' + /// Handles [HttpRequest]'s from [HttpServer]. + ..listen(_handleRequest); +} + +/// Dispatches requests to specific handlers. +void _handleRequest(HttpRequest request) { + switch (request.uri.path) { + case '/json': + _jsonTest(request); + break; + case '/plaintext': + _plaintextTest(request); + break; + default: + _sendResponse(request, HttpStatus.notFound); + } +} + +/// Completes the given [request] by writing the [bytes] with the given +/// [statusCode] and [type]. +void _sendResponse( + HttpRequest request, + int statusCode, { + ContentType? type, + List bytes = const [], +}) => request.response + ..statusCode = statusCode + ..headers.contentType = type + ..headers.date = DateTime.now() + ..contentLength = bytes.length + ..add(bytes) + ..close(); + +/// Completes the given [request] by writing the [response] as JSON. +void _sendJson(HttpRequest request, Object response) => _sendResponse( + request, + HttpStatus.ok, + type: ContentType.json, + bytes: JsonUtf8Encoder().convert(response), +); + +/// Completes the given [request] by writing the [response] as plain text. +void _sendText(HttpRequest request, String response) => _sendResponse( + request, + HttpStatus.ok, + type: ContentType.text, + bytes: utf8.encode(response), +); + +/// Responds with the JSON test to the [request]. +void _jsonTest(HttpRequest request) => _sendJson( + request, + const {'message': 'Hello, World!'}, +); + +/// Responds with the plaintext test to the [request]. +void _plaintextTest(HttpRequest request) => _sendText( + request, + 'Hello, World!', +); diff --git a/frameworks/Dart/dart3/dart_hybrid/docker-compose.yml b/frameworks/Dart/dart3/dart_hybrid/docker-compose.yml new file mode 100644 index 00000000000..fb9e16b4b91 --- /dev/null +++ b/frameworks/Dart/dart3/dart_hybrid/docker-compose.yml @@ -0,0 +1,58 @@ +x-dart-template: &dart-base + build: + context: . + dockerfile: ./dart-hybrid/Dockerfile + network_mode: host + restart: always + volumes: + - socket-data:/var/run/dart-sockets + +services: + traefik: + image: traefik:latest + network_mode: host + cpuset: "0-15" + volumes: + - ./traefik.yaml:/etc/traefik/traefik.yaml:ro + - socket-data:/var/run/dart-sockets + + dart-1: + <<: *dart-base + cpuset: "16-23" + environment: + - SOCKET_PATH=/var/run/dart-sockets/dart-1.sock + - MAX_ISOLATES=8 + + dart-2: + <<: *dart-base + cpuset: "24-31" + environment: + - SOCKET_PATH=/var/run/dart-sockets/dart-2.sock + - MAX_ISOLATES=8 + + dart-3: + <<: *dart-base + cpuset: "32-39" + environment: + - SOCKET_PATH=/var/run/dart-sockets/dart-3.sock + - MAX_ISOLATES=8 + + dart-4: + <<: *dart-base + cpuset: "40-47" + environment: + - SOCKET_PATH=/var/run/dart-sockets/dart-4.sock + - MAX_ISOLATES=8 + + dart-5: + <<: *dart-base + cpuset: "48-55" + environment: + - SOCKET_PATH=/var/run/dart-sockets/dart-5.sock + - MAX_ISOLATES=8 + +volumes: + socket-data: + driver_opts: + type: tmpfs + device: tmpfs \ No newline at end of file diff --git a/frameworks/Dart/dart3/dart_native/bin/server.dart b/frameworks/Dart/dart3/dart_native/bin/server.dart index 5a34edaa825..bab4cf30e62 100755 --- a/frameworks/Dart/dart3/dart_native/bin/server.dart +++ b/frameworks/Dart/dart3/dart_native/bin/server.dart @@ -33,7 +33,7 @@ void _startServer(List args) async { server ..defaultResponseHeaders.clear() /// Sets [HttpServer]'s [serverHeader]. - ..serverHeader = 'dart' + ..serverHeader = 'dart_native' /// Handles [HttpRequest]'s from [HttpServer]. ..listen(_handleRequest); } From 7d90bf28074c30ff0108b437df703715b2f65eec Mon Sep 17 00:00:00 2001 From: iapicca Date: Wed, 18 Feb 2026 09:38:26 +0100 Subject: [PATCH 09/12] remove dart_hybrid implementation --- frameworks/Dart/dart3/README.md | 11 -- frameworks/Dart/dart3/benchmark_config.json | 17 +-- .../Dockerfile => dart3.dockerfile} | 0 .../Dockerfile => dart3_aot.dockerfile} | 0 frameworks/Dart/dart3/dart_hybrid/Dockerfile | 15 --- .../Dart/dart3/dart_hybrid/bin/server.dart | 108 ------------------ .../Dart/dart3/dart_hybrid/docker-compose.yml | 58 ---------- 7 files changed, 2 insertions(+), 207 deletions(-) rename frameworks/Dart/dart3/{dart_native/Dockerfile => dart3.dockerfile} (100%) rename frameworks/Dart/dart3/{dart_aot/Dockerfile => dart3_aot.dockerfile} (100%) delete mode 100644 frameworks/Dart/dart3/dart_hybrid/Dockerfile delete mode 100644 frameworks/Dart/dart3/dart_hybrid/bin/server.dart delete mode 100644 frameworks/Dart/dart3/dart_hybrid/docker-compose.yml diff --git a/frameworks/Dart/dart3/README.md b/frameworks/Dart/dart3/README.md index ca73188f547..3be261226e2 100644 --- a/frameworks/Dart/dart3/README.md +++ b/frameworks/Dart/dart3/README.md @@ -29,14 +29,3 @@ Test URLs: - JSON: `http://localhost:8080/json` - PLAINTEXT: `http://localhost:8080/plaintext` - -### Hybrid - -Uses Dart Native, but leverages a load balancer to bypass horizontal scaling limits. -Designed for better hardware utilization despite increased complexity and overhead. -([source code](https://github.com/TechEmpower/FrameworkBenchmarks/tree/master/frameworks/Dart/dart3/dart_hybrid)) - -Test URLs: - -- JSON: `http://localhost:8080/json` -- PLAINTEXT: `http://localhost:8080/plaintext` diff --git a/frameworks/Dart/dart3/benchmark_config.json b/frameworks/Dart/dart3/benchmark_config.json index 10ddf7f9d98..47137c2f186 100644 --- a/frameworks/Dart/dart3/benchmark_config.json +++ b/frameworks/Dart/dart3/benchmark_config.json @@ -3,7 +3,7 @@ "tests": [{ "default": { "display_name": "dart3_native", - "dockerfile": "dart_native/Dockerfile", + "dockerfile": "dart_native/dart_native.dockerfile", "json_url": "/json", "plaintext_url": "/plaintext", "port": 8080, @@ -16,20 +16,7 @@ }, "aot": { "display_name": "dart3_aot", - "dockerfile": "dart_aot/Dockerfile", - "json_url": "/json", - "plaintext_url": "/plaintext", - "port": 8080, - "approach": "Stripped", - "classification": "Platform", - "database": "None", - "language": "Dart", - "os": "Linux", - "database_os": "Linux" - }, - "hybrid": { - "display_name": "dart3_hybrid", - "docker_compose": "dart_hybrid/docker-compose.yml", + "dockerfile": "dart_aot/dart_aot.dockerfile", "json_url": "/json", "plaintext_url": "/plaintext", "port": 8080, diff --git a/frameworks/Dart/dart3/dart_native/Dockerfile b/frameworks/Dart/dart3/dart3.dockerfile similarity index 100% rename from frameworks/Dart/dart3/dart_native/Dockerfile rename to frameworks/Dart/dart3/dart3.dockerfile diff --git a/frameworks/Dart/dart3/dart_aot/Dockerfile b/frameworks/Dart/dart3/dart3_aot.dockerfile similarity index 100% rename from frameworks/Dart/dart3/dart_aot/Dockerfile rename to frameworks/Dart/dart3/dart3_aot.dockerfile diff --git a/frameworks/Dart/dart3/dart_hybrid/Dockerfile b/frameworks/Dart/dart3/dart_hybrid/Dockerfile deleted file mode 100644 index d36bc09fd3e..00000000000 --- a/frameworks/Dart/dart3/dart_hybrid/Dockerfile +++ /dev/null @@ -1,15 +0,0 @@ - -FROM dart:3.11.0 AS build -WORKDIR /app - -COPY pubspec.yaml . -COPY dart_hybrid/bin/ bin/ - -RUN dart compile exe bin/server.dart -o server - -FROM scratch -COPY --from=build /runtime/ / -COPY --from=build /app/server /bin/server - -EXPOSE 8080 -ENTRYPOINT ["server"] \ No newline at end of file diff --git a/frameworks/Dart/dart3/dart_hybrid/bin/server.dart b/frameworks/Dart/dart3/dart_hybrid/bin/server.dart deleted file mode 100644 index f92054e9988..00000000000 --- a/frameworks/Dart/dart3/dart_hybrid/bin/server.dart +++ /dev/null @@ -1,108 +0,0 @@ -import 'dart:convert'; -import 'dart:io'; -import 'dart:isolate'; - -void main() { - /// Retrieve the maximum number of isolates from the environment variables. - final maxIsolatesFromEnvironment = Platform.environment['MAX_ISOLATES']; - if (maxIsolatesFromEnvironment == null) { - throw Exception('MAX_ISOLATES environment variable is not set.'); - } - - /// Parse the isolate count; ensures we have a valid integer for scaling. - final maxIsolates = int.tryParse(maxIsolatesFromEnvironment); - if (maxIsolates == null) { - throw Exception('MAX_ISOLATES must be a valid integer.'); - } - - /// Retrieve the file system path for the Unix Domain Socket. - final socketPath = Platform.environment['SOCKET_PATH']; - if (socketPath == null) { - throw Exception('SOCKET_PATH environment variable is not set.'); - } - - /// Define the network address as a Unix Domain Socket (UDS). - /// This is often faster than TCP for local inter-process communication. - final address = InternetAddress(socketPath, type: InternetAddressType.unix); - - /// Create an [Isolate] containing an [HttpServer] - /// for each processor after the first - for (int i = 1; i < maxIsolates; i++) { - Isolate.spawn(_startServer, address); - } - - /// Create a [HttpServer] for the first processor - _startServer(address); -} - -/// Initializes and binds the [HttpServer] to the provided [address]. -/// -/// Setting [shared] to true allows multiple isolates to bind to the same -/// address/port, enabling automatic load balancing by the OS kernel. -void _startServer(InternetAddress address) async { - final server = await HttpServer.bind(address, 0, shared: true); - - server - ..defaultResponseHeaders.clear() - /// Sets [HttpServer]'s [serverHeader]. - ..serverHeader = 'dart_hybrid' - /// Handles [HttpRequest]'s from [HttpServer]. - ..listen(_handleRequest); -} - -/// Dispatches requests to specific handlers. -void _handleRequest(HttpRequest request) { - switch (request.uri.path) { - case '/json': - _jsonTest(request); - break; - case '/plaintext': - _plaintextTest(request); - break; - default: - _sendResponse(request, HttpStatus.notFound); - } -} - -/// Completes the given [request] by writing the [bytes] with the given -/// [statusCode] and [type]. -void _sendResponse( - HttpRequest request, - int statusCode, { - ContentType? type, - List bytes = const [], -}) => request.response - ..statusCode = statusCode - ..headers.contentType = type - ..headers.date = DateTime.now() - ..contentLength = bytes.length - ..add(bytes) - ..close(); - -/// Completes the given [request] by writing the [response] as JSON. -void _sendJson(HttpRequest request, Object response) => _sendResponse( - request, - HttpStatus.ok, - type: ContentType.json, - bytes: JsonUtf8Encoder().convert(response), -); - -/// Completes the given [request] by writing the [response] as plain text. -void _sendText(HttpRequest request, String response) => _sendResponse( - request, - HttpStatus.ok, - type: ContentType.text, - bytes: utf8.encode(response), -); - -/// Responds with the JSON test to the [request]. -void _jsonTest(HttpRequest request) => _sendJson( - request, - const {'message': 'Hello, World!'}, -); - -/// Responds with the plaintext test to the [request]. -void _plaintextTest(HttpRequest request) => _sendText( - request, - 'Hello, World!', -); diff --git a/frameworks/Dart/dart3/dart_hybrid/docker-compose.yml b/frameworks/Dart/dart3/dart_hybrid/docker-compose.yml deleted file mode 100644 index fb9e16b4b91..00000000000 --- a/frameworks/Dart/dart3/dart_hybrid/docker-compose.yml +++ /dev/null @@ -1,58 +0,0 @@ -x-dart-template: &dart-base - build: - context: . - dockerfile: ./dart-hybrid/Dockerfile - network_mode: host - restart: always - volumes: - - socket-data:/var/run/dart-sockets - -services: - traefik: - image: traefik:latest - network_mode: host - cpuset: "0-15" - volumes: - - ./traefik.yaml:/etc/traefik/traefik.yaml:ro - - socket-data:/var/run/dart-sockets - - dart-1: - <<: *dart-base - cpuset: "16-23" - environment: - - SOCKET_PATH=/var/run/dart-sockets/dart-1.sock - - MAX_ISOLATES=8 - - dart-2: - <<: *dart-base - cpuset: "24-31" - environment: - - SOCKET_PATH=/var/run/dart-sockets/dart-2.sock - - MAX_ISOLATES=8 - - dart-3: - <<: *dart-base - cpuset: "32-39" - environment: - - SOCKET_PATH=/var/run/dart-sockets/dart-3.sock - - MAX_ISOLATES=8 - - dart-4: - <<: *dart-base - cpuset: "40-47" - environment: - - SOCKET_PATH=/var/run/dart-sockets/dart-4.sock - - MAX_ISOLATES=8 - - dart-5: - <<: *dart-base - cpuset: "48-55" - environment: - - SOCKET_PATH=/var/run/dart-sockets/dart-5.sock - - MAX_ISOLATES=8 - -volumes: - socket-data: - driver_opts: - type: tmpfs - device: tmpfs \ No newline at end of file From bddbb66b5002f013dd40ecd1a2be3b7848b03f3c Mon Sep 17 00:00:00 2001 From: iapicca Date: Wed, 18 Feb 2026 09:39:13 +0100 Subject: [PATCH 10/12] move dockerfiles in root folder --- frameworks/Dart/dart3/benchmark_config.json | 2 -- 1 file changed, 2 deletions(-) diff --git a/frameworks/Dart/dart3/benchmark_config.json b/frameworks/Dart/dart3/benchmark_config.json index 47137c2f186..e69e3780d30 100644 --- a/frameworks/Dart/dart3/benchmark_config.json +++ b/frameworks/Dart/dart3/benchmark_config.json @@ -3,7 +3,6 @@ "tests": [{ "default": { "display_name": "dart3_native", - "dockerfile": "dart_native/dart_native.dockerfile", "json_url": "/json", "plaintext_url": "/plaintext", "port": 8080, @@ -16,7 +15,6 @@ }, "aot": { "display_name": "dart3_aot", - "dockerfile": "dart_aot/dart_aot.dockerfile", "json_url": "/json", "plaintext_url": "/plaintext", "port": 8080, From 38fa21626b91dbb2b7d3b26d35bd15397187d95c Mon Sep 17 00:00:00 2001 From: iapicca Date: Wed, 18 Feb 2026 09:39:46 +0100 Subject: [PATCH 11/12] add myself as maintainer --- frameworks/Dart/dart3/benchmark_config.json | 1 + 1 file changed, 1 insertion(+) diff --git a/frameworks/Dart/dart3/benchmark_config.json b/frameworks/Dart/dart3/benchmark_config.json index e69e3780d30..2b3d7df97e1 100644 --- a/frameworks/Dart/dart3/benchmark_config.json +++ b/frameworks/Dart/dart3/benchmark_config.json @@ -1,5 +1,6 @@ { "framework": "dart3", + "maintainers": ["iapicca"], "tests": [{ "default": { "display_name": "dart3_native", From 30082393aa57a48604a97b0bb6e2817151b2d9de Mon Sep 17 00:00:00 2001 From: iapicca Date: Wed, 18 Feb 2026 09:56:43 +0100 Subject: [PATCH 12/12] fix typo in dockerfile name --- .../Dart/dart3/{dart3_aot.dockerfile => dart3-aot.dockerfile} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename frameworks/Dart/dart3/{dart3_aot.dockerfile => dart3-aot.dockerfile} (100%) diff --git a/frameworks/Dart/dart3/dart3_aot.dockerfile b/frameworks/Dart/dart3/dart3-aot.dockerfile similarity index 100% rename from frameworks/Dart/dart3/dart3_aot.dockerfile rename to frameworks/Dart/dart3/dart3-aot.dockerfile