Benchmarks
How fast can Beam start containers, microVMs, mount images and read files?
Results
TTI (time to interactive) in seconds, lower is better
- ComputeSDK's benchmark, 100 at once0.55smedian
- Beam's harness, 100 at once0.68sp95 0.90s
Inside a start
Milliseconds at the median, lower is better
- Mount the image5 msp95 8 ms
- Set up mounts and the overlay2 msp95 6 ms
- Set up the network7 msp95 10 ms
- Start the first process5 msp95 9 ms
- The sandbox's process manager answers49 msp95 84 ms
Placements per second as load grows, higher is better
- Up to 1,000 sandboxes running1047/s
- Up to 10,000 sandboxes running1015/s
Seconds until a new container's first command answers, lower is better
- 50 MB image, docker pull and run~2.8s
- 50 MB image on Beam~0.6snew machine
- 3.3 GB image, docker pull and run~21s
- 3.3 GB image on Beam~2.0snew machine
- 9.7 GB image, docker pull and run~90s
- 9.7 GB image on Beam~3.7snew machine
Until a program has imported its library
Seconds until PyTorch or vLLM is imported, lower is better
- 3.3 GB, docker pull, then the import~22s
- 3.3 GB on Beam, new machine~37s
- 3.3 GB on Beam, mounted before~2.7s
- 9.7 GB, docker pull, then the import~93s
- 9.7 GB on Beam, new machine~61s
- 9.7 GB on Beam, mounted before~6.1s
Seconds until the image can start a container, lower is better
- Cold build, one small Python package3.8s5 builds
- Cold build, PyTorch (CPU wheel)11.7s5 builds
- Rebuild of an unchanged recipe0.007s10 rebuilds
Megabytes per second read, higher is better
- 10 GiB file through FUSE, in memory4.1 GB/s99% of host
- 10 GiB file, from another worker1,386 MB/s95% of link
A 4 GiB file and the link itself
Megabytes per second, higher is better
- 4 GiB file through FUSE1,374 MB/s87% of host
- 4 GiB file, from another worker1,345 MB/s93% of link
- The network link itself1,455 MB/s
Seconds until the VM answers, lower is better
- New VM from a cached image0.53sp95 0.89s
- Resume a paused VM, RAM intact0.71sp95 1.16s
- Wake a paused VM with an HTTP request1.22sp95 1.38s
How Beam works
Beam is built around an open source control plane which aggregates and networks machines from many places: Kubernetes clusters, bare metal servers rented from cloud and GPU providers, and machines you bring yourself. Every machine runs the same worker, which carries the runtime, the mounts and the cache that the benchmarks above measure.
Control plane. Turns each call into a container request and places it on a worker with room for it, using the free CPU, memory and GPUs that workers have already reported.
Pools. A pool is a set of machines with the same hardware configuration, such as CPU-only, RTX 4090 or H100. A machine outside the cluster joins by running an agent, and its worker's token reaches only the worker API. A private pool runs only your workspace.
Worker. Each machine runs a worker binary, which starts your code in a microVM or a container on mounts fed by an embedded cache, with object storage and OCI registries behind the cache.
Storage. Object storage and OCI registries are the source of truth for images, volumes and disk layers. A distributed cache and custom FUSE filesystem make that data available to user containers or microVMs.
Why it's fast
- Placing container and microVM requests does not wait on a cloud API. Our scheduler and control plane are optimized for fast, bursty requests. Workers report their free capacity to the control plane, and the scheduler is able to place a whole batch of requests at once.
- An image is mounted, not pulled. A pull downloads and unpacks a whole image before anything starts, on every machine that is new to it. Beam indexes each image once into CLIP, its own image format. A worker mounts that index through FUSE and the container starts. The image's bytes arrive while it runs, from the nearest copy, so a first command answers in seconds (or less) whatever the image's size.
- Data comes from the nearest copy. Every worker serves a content-addressed cache from its own disk. A read is served from the machine's own disk, then from another worker's cache, and from object storage only when neither has it. Images, volumes and disk layers all take that path, at any provider.
- Reads skip the copies. An image never changes, so its mount answers a read with a file descriptor into the cache, which the kernel splices from directly. A worker serving another machine hands pages to the socket with sendfile.
- A microVM boots from the same mounts as a container. A Cloud Hypervisor guest reaches the host's image mount over virtio-fs instead of copying it into a disk, its disks are copy-on-write layers (using QCOW2), and a paused VM resumes from its saved memory instead of booting from a disk.
- A snapshot skips the boot and restores on any compatible machine. A sandbox or endpoint started from a memory snapshot begins with its processes already running. Snapshots are kept in object storage, so one restores on any worker with the same CPU features and GPU model, not only the machine that took it.
How we measure
- The timer covers what a user waits for. It starts when the client sends the request and stops when the result has been read back and checked. A sandbox counts as started when its first command's output matches, not when the API reports it running. That is its time to interactive. A VM counts as started when the gateway has checked that it takes commands, which is the time the CLI prints as VM ready.
- The p95 is beside each bar where there are enough samples for one.
- Volume reads A cached volume read counts as a cache read only when the file's contents have been checked by hash and nothing was read from object storage during it.
- Other providers' numbers aren't ours to publish. ComputeSDK runs one sandbox benchmark across providers every week and publishes all of the results.
Time it yourself
Sign up, install the CLI, and start a sandbox or a VM from your terminal or your coding agent.