Persistent VMs are now available.Learn more

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 once
    0.55s
    median
  • Beam's harness, 100 at once
    0.68s
    p95 0.90s

Placements per second as load grows, higher is better

  • Up to 1,000 sandboxes running
    1047/s
  • Up to 10,000 sandboxes running
    1015/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.6s
    new machine
  • 3.3 GB image, docker pull and run
    ~21s
  • 3.3 GB image on Beam
    ~2.0s
    new machine
  • 9.7 GB image, docker pull and run
    ~90s
  • 9.7 GB image on Beam
    ~3.7s
    new machine

Seconds until the image can start a container, lower is better

  • Cold build, one small Python package
    3.8s
    5 builds
  • Cold build, PyTorch (CPU wheel)
    11.7s
    5 builds
  • Rebuild of an unchanged recipe
    0.007s
    10 rebuilds

Megabytes per second read, higher is better

  • 10 GiB file through FUSE, in memory
    4.1 GB/s
    99% of host
  • 10 GiB file, from another worker
    1,386 MB/s
    95% of link

Seconds until the VM answers, lower is better

  • New VM from a cached image
    0.53s
    p95 0.89s
  • Resume a paused VM, RAM intact
    0.71s
    p95 1.16s
  • Wake a paused VM with an HTTP request
    1.22s
    p95 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 planeworkersinside a workerapp.pyfrom beam import Sandboxsb = Sandbox(cpu=1).create()gRPCPython SDKbeam CLIHTTPREST APITypeScript SDKcalls to endpointsMCPcoding agentsgatewayauth, routingprimitivessandbox, VM, imagefunction, endpointtask queue, volumeschedulerpicks a workera batch at a timepool controllerone per pooladds a workerRedisrequest queueworker capacityrunning containersPostgresworkspacesdeploymentstasks, snapshotsKubernetes poola cluster's nodesagent poolrented serversprivate poolyour own machinesworkeron every machineyour codemicroVM or containermountsimage, volumes, disksimage indexesobject storageembedded cachecontent-addressedin every workerOCI registriesimage layersobject storagevolumessnapshotsdisk layersworkertakes a requestwrites one specnetworkits own namespaceegress rulesmountsimage, volumesdisk layersmicroVMCloud Hypervisorits own kernelOCI runtime specthe same for bothcontainernamespacescgroupsif none fitscalls to your codecontainer requestbytes on first readon a misson a miss

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.
Pay as you go
billed by the second

Time it yourself

Sign up, install the CLI, and start a sandbox or a VM from your terminal or your coding agent.