Skip to content

fix: standardize dax benchmark resources to 8 vCPU / 16 GiB - #196

Merged
HeyGarrison merged 17 commits into
masterfrom
fix/dax-standardize-resources
Jul 20, 2026
Merged

fix: standardize dax benchmark resources to 8 vCPU / 16 GiB#196
HeyGarrison merged 17 commits into
masterfrom
fix/dax-standardize-resources

Conversation

@HeyGarrison

Copy link
Copy Markdown
Collaborator

Standardizes sandbox sizing across providers for fair comparison. Previously Modal was bursting to 17 vCPUs while Tensorlake had 1 vCPU, making results incomparable.

Sized providers (8 vCPU / 16 GiB)

Provider CPU param Memory param
E2B cpuCount=8 memoryMB=16384
Modal cpu=4 (4 physical = 8 vCPUs) memoryMiB=16384
Tensorlake cpus=8 memoryMb=16384
isorun vcpus=8 memMiB=16384
runloop customCpuCores=8 customMemoryGb=16
daytona resources.cpu=8 resources.memory=16 (GiB)
upstash size=large (8 cores, 16 GB preset) -
vercel resources.vcpus=8 no memory control
blaxel memory=16384 (CPU derived: 16384/2048=8) -

Providers without CPU/memory control (use defaults)

archil, cloudflare, northflank, beam, declaw, hopx, codesandbox

Each provider gets 8 vCPUs and 16 GiB RAM for fair comparison:
- E2B: cpuCount=8, memoryMB=16384
- Modal: cpu=4 (4 physical = 8 vCPUs), memoryMiB=16384
- Tensorlake: cpus=8, memoryMb=16384
- isorun: vcpus=8, memMiB=16384
- runloop: customCpuCores=8, customMemoryGb=16
- daytona: resources.cpu=8, resources.memory=16 (GiB)
- upstash: size=large (8 cores, 16 GB)
- vercel: resources.vcpus=8 (no memory control)
- blaxel: memory=16384 (CPU derived: 16384/2048=8 cores)

Providers without CPU/memory control (archil, cloudflare, northflank,
beam, declaw, hopx, codesandbox) use their defaults.
@open-cla

open-cla Bot commented Jul 17, 2026

Copy link
Copy Markdown

Contributor License Agreement

All contributors are covered by a CLA.

@github-actions

This comment was marked as off-topic.

@github-actions

github-actions Bot commented Jul 17, 2026

Copy link
Copy Markdown
Contributor

Sandbox Dax Benchmark Results

Provider Phases Total Prepare Clone Install Typecheck Status
archil -- 0.00s 0.00s 0.00s 0.00s 0.00s 0/1 OK
beam 7/7 57.73s 21.16s 1.77s 9.59s 9.79s 1/1 OK
blaxel 0/7 0.00s 0.00s 0.00s 0.00s 0.00s 0/1 OK
cloud-run 0/7 0.00s 0.00s 0.00s 0.00s 0.00s 0/1 OK
cloudflare 0/7 0.00s 0.00s 0.00s 0.00s 0.00s 0/1 OK
codesandbox 0/7 0.00s 0.00s 0.00s 0.00s 0.00s 0/1 OK
createos 0/7 0.00s 0.00s 0.00s 0.00s 0.00s 0/1 OK
daytona -- 0.00s 0.00s 0.00s 0.00s 0.00s 0/1 OK
declaw 7/7 109.93s 17.25s 7.13s 24.34s 43.01s 1/1 OK
e2b 7/7 87.52s 12.15s 3.72s 20.55s 40.82s 1/1 OK
hopx -- 0.00s 0.00s 0.00s 0.00s 0.00s 0/1 OK
isorun -- 0.00s 0.00s 0.00s 0.00s 0.00s 0/1 OK
lightning -- 0.00s 0.00s 0.00s 0.00s 0.00s 0/1 OK
modal 7/7 112.71s 7.80s 2.46s 22.89s 71.35s 1/1 OK
namespace 7/7 31.19s 4.04s 1.35s 8.00s 13.47s 1/1 OK
northflank -- 0.00s 0.00s 0.00s 0.00s 0.00s 0/1 OK
runloop 7/7 114.13s 24.66s 3.70s 29.11s 48.40s 1/1 OK
superserve 6/7 35.16s 28.32s 3.25s 1.92s 0.01s 0/1 OK
tensorlake 7/7 61.85s 15.54s 1.55s 11.40s 28.31s 1/1 OK
upstash 7/7 57.58s 10.37s 2.01s 9.79s 24.53s 1/1 OK
vercel 0/7 0.00s 0.00s 0.00s 0.00s 0.00s 0/1 OK

View full run

… time

E2B's Sandbox.create() accepts SandboxOpts which does not include
cpuCount/memoryMB. Those are template build options only.
@shivam-declaw

Copy link
Copy Markdown
Contributor

For declaw, the cpu, memory and disk are property of the template, you can create a custom template with the required size or we can have a node-large template with above spec

HeyGarrison and others added 5 commits July 18, 2026 01:56
- Fix runloop: nest resource params in launch_parameters with snake_case
- Add beam: cpu=8, memory=16384 MiB
- Add codesandbox: vmTier=VMTier.Small (8 CPU / 16 GiB)
- Add northflank: deploymentPlan resolved via API at runtime
- Add E2B template build prereq (base-8cpu-16gb with 8 vCPU / 16 GiB)
- Add Northflank plan discovery prereq script
- Add scripts/provider-benchmark.sh: vendored from upstream with dnf
  support (RHEL/Fedora) alongside apt-get (Debian/Ubuntu) and aarch64
  architecture detection for Node.js and Bun downloads
- Update dax.ts to load script from local filesystem instead of curl,
  eliminating curl dependency for providers that don't ship it
Adds declaw to DAX_RESOURCE_OPTIONS so it targets the same 8 vCPU / 16 GiB profile as the other providers in the map. The node-large template provisions 8 vCPU / 16 GiB RAM with an 8 GiB disk overlay.

Co-authored-by: shivam-declaw <272314190+shivam-declaw@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Comment thread scripts/find-northflank-plan.ts
Comment thread scripts/find-northflank-plan.ts
@superagent-security superagent-security Bot added the pr:flagged PR flagged for review by security analysis. label Jul 18, 2026
…ce node image

- Fix BUN_INTERNAL_PATH: remove .zip extension from zip-internal path
  (was bun-linux-x64-baseline.zip/bun, should be bun-linux-x64-baseline/bun)
- Northflank: robust API response parsing, graceful fallback to nf-compute-50,
  sanitize plan ID before writing to GITHUB_ENV
- Daytona: remove from DAX_RESOURCE_OPTIONS (resources not supported with
  snapshot-based sandbox creation)
- Namespace: add sandboxOptions image node:22 (dax benchmark requires node)
@superagent-security superagent-security Bot removed the pr:flagged PR flagged for review by security analysis. label Jul 18, 2026
- Northflank: pick smallest suitable plan instead of closest to reduce
  chance of exceeding project resource allowance
- E2B: workaround for 60s command timeout by setting
  defaultProcessConnectionTimeout=0 via getInstance() while waiting
  for upstream wrapper fix to forward timeoutMs
Add image: 'node:22' to daytona sandboxOptions to switch from
snapshot-based to image-based creation, which allows specifying
resources. Re-add daytona to DAX_RESOURCE_OPTIONS with 8 vCPU / 16 GiB.

@superagent-security superagent-security Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Superagent found 1 security concern(s).

Comment thread scripts/dax-benchmark.sh
@superagent-security superagent-security Bot added pr:flagged PR flagged for review by security analysis. and removed pr:flagged PR flagged for review by security analysis. labels Jul 18, 2026
@HeyGarrison
HeyGarrison force-pushed the fix/dax-standardize-resources branch from 2224965 to 19c21a1 Compare July 20, 2026 15:07

@superagent-security superagent-security Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Superagent found 1 security concern(s).

Comment thread src/sandbox/providers.ts
@superagent-security superagent-security Bot added the pr:flagged PR flagged for review by security analysis. label Jul 20, 2026
Update all @computesdk/* packages to versions from changeset PR #652:
- @computesdk/e2b@1.7.52: forwards RunCommandOptions.timeout to E2B commands
- @computesdk/hopx@0.2.27: forwards RunCommandOptions.timeout to hopx commands
- @computesdk/runloop@1.3.54: properly merges launch_parameters
- computesdk@4.1.4: typed SandboxResourceOptions

Remove E2B defaultProcessConnectionTimeout workaround (no longer needed
since @computesdk/e2b now forwards timeout natively). Pass timeout to
sandbox.runCommand() so the native timeout forwarding kicks in for E2B
and hopx.
@github-actions

github-actions Bot commented Jul 20, 2026

Copy link
Copy Markdown
Contributor

Snapshot/Fork Benchmark Results

small dataset

# Provider Score Snapshot create Fork (snapshot) Fork (live) First read Status
1 Azure-blob 99.0 0.67s 0.71s 0.69s 0.02s 1/1
2 Tigris 98.9 0.58s 1.04s 0.28s 0.37s 1/1
3 Cloudflare R2 97.3 1.82s 1.74s 1.71s 0.21s 1/1
4 AWS S3 0.0 0.00s 0.00s 0.00s 0.00s 0/1

View full run

@github-actions

github-actions Bot commented Jul 20, 2026

Copy link
Copy Markdown
Contributor

Storage Benchmark Results

1MB Files

# Provider Score Download Throughput Upload Status
1 Azure Blob Storage 96.7 0.02s 362.6 Mbps 0.07s 10/10
2 Vercel Blob 94.8 0.12s 71.9 Mbps 0.20s 10/10
3 AWS S3 94.7 0.14s 61.6 Mbps 0.26s 10/10
4 Cloudflare R2 94.5 0.14s 58.5 Mbps 0.30s 10/10
5 Tigris 94.3 0.05s 154.5 Mbps 0.70s 10/10

View full run · SVGs available as build artifacts

@github-actions

github-actions Bot commented Jul 20, 2026

Copy link
Copy Markdown
Contributor

Browser Benchmark Results

# Provider Score Create Connect Navigate Release Total Status
1 Kernel 97.4 0.03s 0.10s 0.11s 0.04s 0.31s 10/10
2 Browserbase 93.8 0.23s 0.12s 0.12s 0.14s 0.65s 10/10
3 Notte 90.0 0.17s 0.50s 0.21s 0.08s 1.06s 10/10
4 Browseruse 88.7 0.86s 0.13s 0.07s 0.05s 1.12s 10/10
5 Hyperbrowser 88.0 0.33s 0.57s 0.25s 0.10s 1.30s 10/10
6 Steel 41.8 1.07s 1.12s 0.14s 0.97s 6.26s 10/10

View full run · SVG available as build artifact

@github-actions

github-actions Bot commented Jul 20, 2026

Copy link
Copy Markdown
Contributor

Browser Throughput Benchmark Results

# Provider Score APS (med) Task (med) Task (p95) Screenshot Status
1 Kernel 78.1 5.31/s 1.88s 2.10s 293ms 3/3
2 Browseruse 69.2 3.46/s 2.89s 3.06s 282ms 3/3
3 Browserbase 61.4 2.19/s 4.57s 4.96s 425ms 3/3
4 Hyperbrowser 53.1 1.30/s 7.71s 7.84s 962ms 3/3
5 Notte 50.4 1.12/s 8.91s 9.03s 1186ms 3/3
6 Steel 39.0 0.69/s 14.58s 16.89s 800ms 3/3

View full run · SVG available as build artifact

@superagent-security superagent-security Bot added pr:flagged PR flagged for review by security analysis. and removed pr:flagged PR flagged for review by security analysis. labels Jul 20, 2026
Upstash: remove ephemeral: true from sandboxOptions. The ComputeSDK
wrapper's ephemeral path doesn't forward 'size' to EphemeralBox.create(),
so size: 'large' was silently dropped and the box ran on 'small'. Using
a regular Box ensures the resource sizing is applied.

Superserve: add vcpu: 8, memoryMib: 16384 to DAX_RESOURCE_OPTIONS.
Previously had no resource sizing at all - relied on template defaults
which may be undersized. The superserve SDK accepts these as overrides
on sandbox creation.
Omit explicit image from namespace sandboxOptions so the provider
defaults to its builtin:base image, as intended by the namespace team.
@superagent-security superagent-security Bot removed the pr:flagged PR flagged for review by security analysis. label Jul 20, 2026
E2B default sandbox lifespan is 5 minutes (300s). The benchmark can
take longer on cold starts or under resource contention, causing the
sandbox to be killed mid-execution. Pass timeout: 600_000 (10 min)
to Sandbox.create() via the timeoutMs option.
The E2B ComputeSDK provider destructures 'templateId' from sandbox
options, not 'template'. Passing 'template' caused it to be treated as
an unknown passthrough option, and the sandbox was created from E2B's
default template instead of our custom base-8cpu-16gb template.
@HeyGarrison
HeyGarrison merged commit f98cb47 into master Jul 20, 2026
139 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants