BoxRouter

Disk

Builds on Common Methodology

Measures uncached sequential and random read and write speed of the sandbox's disk with fio, using direct I/O (O_DIRECT).

When a coding agent or CI pipeline unpacks a multi-gigabyte container layer, compiles a large Rust or C++ workspace, queries a local SQLite or vector index, or writes build artifacts in /workspace, performance depends on the sandbox's underlying storage once the working set exceeds or bypasses the guest page cache.

The Disk tab measures uncached storage performance in /workspace/fio using fio with direct I/O (O_DIRECT) across four access patterns: Sequential Read and Sequential Write (1m blocks, reported in MiB/s for large streaming transfers), and Random Read and Random Write (4k blocks, reported in IOPS for small scattered operations).

View the Procedure View Disk Results Download Raw Data View the Parameters

Metrics

Sequential Read

Sequential Read is the sustained uncached 1 MiB sequential read throughput across the 1 GiB file /workspace/fio/data.bin using direct I/O (O_DIRECT), reported by fio (rw=read, bs=1m) in binary mebibytes per second (2^20 = 1,048,576 bytes/s).

Sequential Write

Sequential Write is the sustained uncached 1 MiB sequential write throughput to the 1 GiB file /workspace/fio/data.bin using direct I/O (O_DIRECT), reported by fio (rw=write, bs=1m).

Random Read

Random Read is the sustained uncached 4 KiB random read rate across the 1 GiB file /workspace/fio/data.bin using direct I/O (O_DIRECT), reported by fio (rw=randread, bs=4k).

Random Write

Random Write is the sustained uncached 4 KiB random write rate across the 1 GiB file /workspace/fio/data.bin using direct I/O (O_DIRECT), reported by fio (rw=randwrite, bs=4k).

Timed Part Starts Ends
Sequential Read fio starts after the untimed setup and the data file's first write, or the row before it. fio exits after its 5 s ramp and 60 s measured interval, by the sandbox's own clock; its JSON is written to a file and read back, untimed, after.
Sequential Write fio starts after the untimed setup and the data file's first write, or the row before it. fio exits after its 5 s ramp and 60 s measured interval, by the sandbox's own clock; its JSON is written to a file and read back, untimed, after.
Random Read fio starts after the untimed setup and the data file's first write, or the row before it. fio exits after its 5 s ramp and 60 s measured interval, by the sandbox's own clock; its JSON is written to a file and read back, untimed, after.
Random Write fio starts after the untimed setup and the data file's first write, or the row before it. fio exits after its 5 s ramp and 60 s measured interval, by the sandbox's own clock; its JSON is written to a file and read back, untimed, after.
\mathrm{BW}_{\mathrm{MiB/s},\,i} = \dfrac{B_i}{1{,}048{,}576}
  • \mathrm{BW}_{\mathrm{MiB/s},\,i} Binary megabytes per second in trial i (1 MiB = 2^20 bytes = 1,048,576 bytes).
  • B_i The bytes per second fio reports over the 60 s measured interval in trial i.

After the 5 s ramp-up finishes, fio sums the bytes read or written across the 60 s measured window and reports bytes per second in its JSON output, which we divide by 1,048,576 (2^20) to report MiB/s for the sequential tests. For the random tests, fio counts completed 4 KiB read or write operations across the same window and reports iops directly.

Measurement

Each trial uses a sandbox created from BoxRouter's pinned standard image, running a static Linux x86_64 build of fio 3.39 (verified by SHA-256) with ioengine=libaio, direct=1, iodepth=64, and numjobs=1.

  1. Create sandbox and run readiness check.
  2. Record /workspace/fio mount facts, verify O_DIRECT support and required free space, and pre-write the 1 GiB data.bin file.
  3. Sequential Read Run the four fio rows as polled background scripts in shuffled order, with fresh random buffers on every write. Timed
  4. Run post-trial cache/compression checks and destroy sandbox.

Every buffer is filled with incompressible pseudo-random bytes so storage compression or deduplication cannot inflate throughput, with refill_buffers=1 and fsync=0 on write rows and uniformly distributed offsets on random rows.

The setup step checks for at least 2 GiB of free space in /workspace/fio, probes O_DIRECT with dd, and records memory usage before and after writing data.bin. The post-trial check runs a 256 MiB cached-versus-direct read probe and verifies that the first 64 MiB of data.bin has at least 99.9% of its 4 KiB blocks distinct and that zlib shrinks them by at most 1% (minimum ratio 0.99).

Scope Limits and Caveats

  • Bypasses the guest OS page cache via O_DIRECT to measure the storage path (so it does not reflect small cached file access); providers whose /workspace rejects O_DIRECT are not measured, such as Blaxel's default RAM filesystem.
  • Blaxel does not provision a disk for their sandboxes. They recommend using volumes, which are not measured by this test.
  • The write rows rewrite an existing 1 GiB file with O_DIRECT and fsync=0 (comparing rewrite speed against the initial file creation in a diagnostic check).
  • The random rows use a queue depth of 64 asynchronous requests (libaio) to measure storage IOPS ceilings rather than single-threaded synchronous time.
  • Every trial records diagnostic checks, and a check that fires attaches a note to the provider's result stating how many trials triggered it, without removing any result.
  • These tests measure sustained, high-queue-depth O_DIRECT throughput and IOPS on a 1 GiB file, while everyday operations on small cached files are measured in Files and Filesystem.
  • Trials run concurrently per provider, up to 10 at once, so sandboxes in the batch can share host storage bandwidth when the provider places them on the same backing host.

Failures and Exclusions

Outcome classifications, top-up rounds, and outlier rules follow Common Methodology; the first failed step ends the trial without in-trial retries.

A sandbox whose /workspace rejects O_DIRECT reads or writes or has fewer than 2 GiB free is recorded as a missed trial, not a failure.

A trial fails as a provider error if fio exits non-zero or runs for less than 59 s of its 60 s measured window, and as a benchmark error if the fio binary digest mismatches or if fewer than 99.9% of the four-kilobyte blocks of data.bin are distinct or it compresses below 0.99.

Diagnostic checks record informational notes on the provider's result without excluding trials:

  • when /workspace sits on tmpfs or consumes at least 0.8 GiB of sandbox memory during initial file creation
  • when direct reads run at memory speed (within half of cached read speed or under ten microseconds median)
  • when throughput drops by more than 30% between the first ten seconds and last ten seconds of the window
  • when fewer than 90% of requests keep 64 I/Os in flight or fio saturates more than 90% of a vCPU
Step Time Limit
Create 5 min
Sequential Read 3 min
Destroy 5 min

Statistics

Based On
Common Methodology

Per-unit percentiles, bootstrap confidence intervals, and tail rules follow Common Methodology.

A provider is ranked once it has at least 20 successful trials.

Sandbox and Trials

Image Digest
sha256
Image Version
0.3.11
Image Registry Page
View on the Registry
Pull the Image
docker pull ghcr.io/boxrouter/standard-image@sha256:89d4c97048dbdfb8b6d85ad91833962ff38d1c334a5f47e6de80a9762310191b Copy
Lifetime
30 min
Idle Connection Time
5.0 min

From Common Methodology

Idle Connection Exceptions
Provider Rule File Transfer Idle Time
Daytona The SDK has no idle-timeout setting. Its command channel keeps its connection open, and its file-transfer channel reconnects after 5 s of idle time. 5.0 s

From Common Methodology

Network Path Attempts
10

From Common Methodology

Mode
Single
Sandboxes per Trial
1
Parallel Trials
10
Concurrent Sandboxes
1

At a Glance

Metrics
  • Sequential Read Bandwidth · Mebibytes per Second (MiB/s)
  • Sequential Write Bandwidth · Mebibytes per Second (MiB/s)
  • Random Read Operations · Input/Output Operations per Second (IOPS)
  • Random Write Operations · Input/Output Operations per Second (IOPS)
Direction
Higher Is Better
Statistic
Median
Clock
Sandbox clock

From Common Methodology

Machine Size
2 vCPU / 4 GiB
Trials
40

All Methods

Disk

Measures uncached sequential and random read and write speed of the sandbox's disk with fio, using direct I/O (O_DIRECT).

When a coding agent or CI pipeline unpacks a multi-gigabyte container layer, compiles a large Rust or C++ workspace, queries a local SQLite or vector index, or writes build artifacts in /workspace, performance depends on the sandbox's underlying storage once the working set exceeds or bypasses the guest page cache.

The Disk tab measures uncached storage performance in /workspace/fio using fio with direct I/O (O_DIRECT) across four access patterns: Sequential Read and Sequential Write (1m blocks, reported in MiB/s for large streaming transfers), and Random Read and Random Write (4k blocks, reported in IOPS for small scattered operations).

Metrics

Loading results…

Measurement

Loading results…

Scope Limits and Caveats

Loading results…

Failures and Exclusions

Loading results…

Statistics

Loading results…

Sandbox and Trials

Loading results…