Skip to content

Conversation

@iapicca
Copy link
Contributor

@iapicca iapicca commented Jan 2, 2026

Summary

This update optimizes the dart3 native benchmark for high-core count environments by implementing a hybrid process/isolate scaling architecture (inspired by this).

Previously, the benchmark ran as a single process, which encountered performance bottlenecks (see dart-lang/sdk#60815).
This new approach bypasses those limitations to ensure peak throughput on modern hardware.

Key Changes

  • Added a run.sh entrypoint to spawn multiple OS processes, distributing the load across independent Isolate Groups.

  • Used compile-time --define=MAX_ISOLATES to tune internal isolate spawning to match the process-level distribution.

  • Migrated from scratch to busybox:glibc. This provides the required minimal shell environment while maintaining a negligible footprint and full glibc compatibility for Dart.

cc @kevmoo @NateBrady23

@msmith-techempower msmith-techempower merged commit f8bb37d into TechEmpower:master Jan 2, 2026
4 checks passed
iapicca added a commit to iapicca/FrameworkBenchmarks that referenced this pull request Jan 3, 2026
* add logic for variable --define=MAX_ISOLATES

* add run.sh and optimize scaling logic in Dockerfile

* bump dart and dependencies version everywhere
msmith-techempower pushed a commit that referenced this pull request Jan 23, 2026
* add readme, analysis, config and ignore files

* cp bin from dart3 and add aot specific dockerfile

* rename dockerfile update pubspec

* implement multi-group isolate scaling for AOT deployment

* fix 'framework' and 'display_name' in 'benchmark_config'

* Update hyperlane (#10480)

* lock: toml

* lock: toml

* lock: toml

* lock: toml

* lock: toml

* lock: toml

* lock: toml

* lock: toml

* lock: toml

* lock: toml

* lock: toml

* lock: toml

* lock: toml

* feat: runtime

* feat: runtime

* feat: runtime

* lock: toml

* lock: toml

* lock: toml

* lock: toml

* lock: toml

* lock: toml

* lock: toml

* lock: toml

* feat: update

* Merge remote-tracking branch 'upstream/master'

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* Merge remote-tracking branch 'upstream/master'

* feat: hyperlane

* feat: update

* docs: readme

* feat: update

* Merge remote-tracking branch 'upstream/master'

* feat: update

* feat: update

* feat: update

* Merge remote-tracking branch 'upstream/master'

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: lock

* feat: use super

* feat: update lock

* feat: update

* feat: update lock

* feat: update lock

* feat: update lock

* feat: lock

* feat: update lock

* feat: update lock

* feat: update lock

* feat: update lock

* feat: update lock

* feat: update lock

* feat: update lock

* feat: update lock

* feat: update lock

* feat: update lock

* feat: update lock

* feat: update lock

* feat: update lock

* Merge remote-tracking branch 'upstream/master'

* feat: update

* feat: utf8

* feat: utf8

* feat: lock

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* update: code

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* Merge remote-tracking branch 'upstream/master'

* feat: update version

* feat: update version

* update: code

* Merge remote-tracking branch 'upstream/master'

* feat: lock

* feat: lock

* feat: lock

* feat: lock

* feat: lock

* feat: lock

* feat: lock

* feat: error handle

* feat: dep

* feat: get_thread_count

* update: code

* feat: lock

* feat: speed

* feat: speed

* update: code

* feat: speed

* update: code

* feat: lock

* fix: Framework hyperlane does not define a default test in benchmark_config.json

* feat: hyperlane http version

* feat: hyperlane http version

* feat: toml

* feat: toml

* feat: toml

* feat: toml

* feat: v0.1.0

* feat: toml

* feat: v6

* feat: v6

* feat: v6

* feat: v6

* feat: v6

* debug: test cache

* debug: test cache

* feat: v6

* feat: send unwrap

* feat: v6

* feat: v6

* feat: v0.1.0

* feat: toml

* feat: toml

* feat: db

* feat: toml

* feat: toml

* feat: toml

* feat: toml

* feat: dir update

* feat: toml

* feat: toml

* feat: toml

* feat: toml

* feat: toml

* feat: toml

* feat: toml

* feat: toml

* feat: toml

* feat: toml

* feat: toml

* feat: toml

* feat: toml

* feat: toml

* feat: toml

* feat: 2025-10-24 12:22:32

* feat: v0.1.0

* Merge branch 'master' of github.com:TechEmpower/FrameworkBenchmarks

* feat: v0.1.0

* Merge branch 'master' of github.com:TechEmpower/FrameworkBenchmarks

* feat: 2025-11-09 18:38:22

* feat: toml

* feat: toml

* feat: buffer

* feat: toml

* feat: toml

* feat: toml

* feat: toml

* feat: toml

* feat: toml

* feat: inline

* feat: toml

* feat: toml

* feat: toml

* feat: toml

* feat: toml

* feat: toml

* feat: toml

* feat: toml

* 更新依赖项:升级 hyperlane 到 10.19.0,serde_json 到 1.0.147,http-constant 到 1.78.0,http-type 到 5.20.0

* 修正 README.md 中的标题格式

* feat: v0.1.0

* feat: toml

* feat: v0.1.0

* feat: v0.1.0

* feat: v0.1.0

* feat: v0.1.0

* feat: v0.1.0

* feat: v0.1.0

* Express: optimize some slower/poor implementation (#10481)

* chore: optimize express

* perf: promise.all

* perf: optimize postgres

* fix: fast-json-stringify

* [ruby] Move database logic to seperate files for clarity (#10484)

boot.rb contains Bundler initialization, constant definitions, database
connections and model definitions.

Extracting the database connection and model definition to a separate
db.rb makes it more explicit what belongs where. It also makes it easier
to compare the models and database setup across frameworks.

* [ruby/grape] Update to 3.0 (#10485)

* [ruby/rack] Try ZJIT (#10486)

ZJIT is the successor JIT compiler to YJIT.

* [ruby/rack-sequel] Increase threads instead of workers (#10487)

Try more 1.25 more threads instead of 1.25 more workers.

* [ruby] Set puma workers to 1.25 * nproc (#10488)

WEB_CONCURRENCY=auto sets the number of workers to the number of
processors. Setting it to 1.25 the number of processors seems to
perform better.

* [ruby/rage] Remove logger from Gemfile (#10490)

It is now included by rage.

* [ruby/rage] Update ActiveRecord to 8.1 (#10491)

* vertx-web-kotlin-dsljson updates (#10492)

* Dart3 update (#10493)

* add logic for variable --define=MAX_ISOLATES

* add run.sh and optimize scaling logic in Dockerfile

* bump dart and dependencies version everywhere

* [ruby/rails] Remove references to Agoo (#10489)

Rails is no longer tested with Agoo.

* mv .dockarfile under dart3 and update dart3 benchmark_config

* include AOT horizontal scaling logic

* update dart3_aot.dockerfile to include MAX_ISOLATES arg

* align dart3. dart3_aot. dockerfile(s), and update run.sh

* clean up comments formatting in server.dart

* delete dart3_aot folder

* renaming .dockerfile dart3_aot to dart3-aot to make the CI happy

* update benchmark_config 'default' test and 'display_name's

* fix benchmark_config naming error

* add error handling and internalServerError Response

* remove duplicate 'if' statement

---------

Co-authored-by: 尤雨东 <root@ltpp.vip>
Co-authored-by: Nigro Simone <nigro.simone@gmail.com>
Co-authored-by: Petrik de Heus <petrik@deheus.net>
Co-authored-by: Andrew McCloskey <awmcc90@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants