Last week, NVIDIA hand-delivered Modal’s first Vera CPU server to our SF office. It’s now purring away in a server rack, and we’re pretty excited about what it could mean for Modal Sandboxes and, consequently, Modal users.

Vera is NVIDIA’s new Arm-compatible CPU, built for the Vera Rubin GPU platform but also available as a standalone CPU server.

Supporting Arm would be a huge change for Modal, coming from a long history exclusively running x86 machines. We’d need to make changes across our infrastructure and image build system to support an entirely different CPU architecture, but the benchmarks are impressive: a 2x increase on throughput. With this, the NVIDIA Vera CPU becomes an incredibly compelling option for powering Modal Sandboxes.

Why Vera could be a big deal for Modal

Firstly, multi-tenant clusters are noisy.

Orchestration for a Sandbox product means running hundreds of concurrent containers and VMs on each cloud host. Unlike normal Kubernetes server deployments colocating pods on the same host, the shape of each sandbox workload is unique, and it leads to some interesting dynamics within a multi-tenant cluster:

  • Resource usage can be extremely spiky. A sandbox could spend most of its uptime relatively inactive, waiting on an LLM, with sudden and unpredictable CPU surges 10x above baseline, due to an npm install or expensive grep command.
  • Workload shapes are not statically known. An LLM could throw anything into the sandbox, and the shape of that is only known at runtime. Resource sizing is often just a guess.
  • All of these heterogeneous workloads jam together into a single homogeneous pool of compute, which can lead to noisy neighbor issues. One tenant’s performance can be impacted by another’s behavior.

As a result of this, it’s incredibly difficult for users to know how to size their workloads, and for Modal to schedule them without contention.

Unlike other providers that force users to choose fixed reservations for max usage, Modal Sandboxes support bursting, which allows users to reserve guaranteed capacity for their P50 usage, rather than the worst-case P100 npm install moment, and trust when the transient spike comes along it’d be absorbed by the padding within the host node.

It’s a great strategy, and we’ve saved users millions of dollars teaching them to trust burstability, but it increases exposure to noisy neighbor issues otherwise avoided by strict limits.

Secondly, every second of CPU time costs more than just that CPU.

Sandboxes are usually run to augment some external process, and that process bottlenecking on the CPU leads to real dollars spent.

At Modal, we see two prevalent use cases: background agents and reinforcement learning rollouts.

  • For background agents, such as Ramp Inspect or those running on Niteshift, faster agents mean faster answers, which means higher revenue and user retention. It also means lower CPU time, driving down COGS.
  • For reinforcement learning, there are GPUs sitting idle while sandboxed processes run. Most training setups are still synchronous, and an entire fanout of rollouts must complete before the GPU system can move forward to the next step. Any time saved on CPU is time saved on GPU.

Benchmarking the Vera CPU

To test Vera, we built a set of representative workloads and benchmarks for agentic Sandboxes.

Creating an “agentic” benchmark is a challenging task, given most of the work done on the servers is not CPU bound, and there’s no specific dimension we’d want to optimize for. Where a DB workload could optimize for disk I/O and an image processing workload could optimize SIMD, for sandboxes we needed to come up with a simulator that is both concurrent and heterogeneous: a big ol’ bag of chaos we could throw at the CPU.

From this we developed Agentless Agent Bench, a collection of 50 Terminal-Bench oracle solutions and verifiers, stripped of all network calls and prewarmed in concurrent Docker containers, isolating just the tasks actually performed on the CPU by agents and RL - compilation, file grepping, git operations, device emulation, and more.

Running the benchmark shows us both linear task completion time, and concurrent throughput metrics.

Below are results showing per-task latency for a selection of Terminal-Bench tasks you’d reasonably see an agent running in your sandboxes. This experiment was run on a machine without load, serially, so the results show pure straightline latency.

Serial task latency in seconds for ten selected workloads on NVIDIA Vera, Intel GNR, AWS Graviton 4, AWS Graviton 5, and AMD Zen 5

Seeing these results first, I was admittedly skeptical. Across the 50 tasks we benchmarked, Vera often performed better than the other CPUs, but not always, and not by a particularly large margin.

But straightline latency on a quiet host isn’t what Sandbox users experience. In practice, hundreds of workloads are competing for resources at once. Moving onward to testing under load, we get an entirely different story for Vera.

The false tradeoff

In most systems, throughput and latency are a tradeoff.

  • Latency can be defined as the time that elapses from the start to the end of a task.
  • Throughput is the quantity of completed tasks per unit time. This tests the host system’s ability to concurrently interleave processes and make progress on them all simultaneously.

The more densely you pack tasks, the higher the throughput. But once the CPU becomes fully utilized, individual task latency suffers due to contention.

In terms of the Modal scheduler, it’s always tempting for us to run at a higher packing density, to squeeze more juice out of the host machines we have, and to offer a higher absolute scale that users can reach. But just as workloads are spiky within their containers, the absolute scale of the containers in our cluster is also spiky, which leaves us at the risk of overpacking host machines.

Usually, overpacking is felt as increased latency by the user.

But we’ve found this isn’t the case for Vera.

Vera gets better under heavy load

Agentless Agent Bench has a test for throughput, in which it increases the count of concurrent containers running on the machine, looping as many task completions as possible in a fixed time.

Counterintuitively, Vera gets better under heavy load.

Task completion under contention An animated chart cycles through 50, 100 and 150 concurrent containers every 2.5 seconds. Vera, AMD Zen 5 and Intel GNR use solid lines. Graviton 4, Graviton 5 and Intel GNR VM use dotted lines. Both GNR curves are cyan. All views share axes spanning 1–192 logical CPUs and 0–7,000 verified completions per 60 seconds. Manual selections pause cycling; the playback button resumes it. SANDBOX WORKLOAD BENCHMARK Task completion under contention 50 TerminalBench tasks stripped of network calls Logical CPUs allowed by cpuset01k2k3k4k5k6k7k13264961281601928896128AWS Graviton 4 (vm): 1 logical CPUs, 73 completions / 60 s AWS Graviton 4 (vm): 2 logical CPUs, 146 completions / 60 s AWS Graviton 4 (vm): 3 logical CPUs, 209 completions / 60 s AWS Graviton 4 (vm): 4 logical CPUs, 265 completions / 60 s AWS Graviton 4 (vm): 5 logical CPUs, 315 completions / 60 s AWS Graviton 4 (vm): 6 logical CPUs, 345 completions / 60 s AWS Graviton 4 (vm): 7 logical CPUs, 381 completions / 60 s AWS Graviton 4 (vm): 8 logical CPUs, 411 completions / 60 s AWS Graviton 4 (vm): 10 logical CPUs, 475 completions / 60 s AWS Graviton 4 (vm): 12 logical CPUs, 519 completions / 60 s AWS Graviton 4 (vm): 14 logical CPUs, 595 completions / 60 s AWS Graviton 4 (vm): 16 logical CPUs, 693 completions / 60 s AWS Graviton 4 (vm): 20 logical CPUs, 866 completions / 60 s AWS Graviton 4 (vm): 26 logical CPUs, 1,208 completions / 60 s AWS Graviton 4 (vm): 32 logical CPUs, 1,513 completions / 60 s AWS Graviton 4 (vm): 40 logical CPUs, 1,930 completions / 60 s AWS Graviton 4 (vm): 50 logical CPUs, 2,381 completions / 60 s AWS Graviton 4 (vm): 63 logical CPUs, 2,503 completions / 60 s AWS Graviton 4 (vm): 79 logical CPUs, 2,889 completions / 60 s AWS Graviton 4 (vm): 96 logical CPUs, 2,940 completions / 60 s AWS Graviton 5 (vm): 1 logical CPUs, 91 completions / 60 s AWS Graviton 5 (vm): 2 logical CPUs, 176 completions / 60 s AWS Graviton 5 (vm): 3 logical CPUs, 260 completions / 60 s AWS Graviton 5 (vm): 4 logical CPUs, 320 completions / 60 s AWS Graviton 5 (vm): 5 logical CPUs, 371 completions / 60 s AWS Graviton 5 (vm): 6 logical CPUs, 400 completions / 60 s AWS Graviton 5 (vm): 7 logical CPUs, 451 completions / 60 s AWS Graviton 5 (vm): 8 logical CPUs, 490 completions / 60 s AWS Graviton 5 (vm): 10 logical CPUs, 557 completions / 60 s AWS Graviton 5 (vm): 12 logical CPUs, 627 completions / 60 s AWS Graviton 5 (vm): 14 logical CPUs, 713 completions / 60 s AWS Graviton 5 (vm): 16 logical CPUs, 817 completions / 60 s AWS Graviton 5 (vm): 20 logical CPUs, 1,035 completions / 60 s AWS Graviton 5 (vm): 26 logical CPUs, 1,445 completions / 60 s AWS Graviton 5 (vm): 32 logical CPUs, 1,805 completions / 60 s AWS Graviton 5 (vm): 40 logical CPUs, 2,299 completions / 60 s AWS Graviton 5 (vm): 50 logical CPUs, 2,631 completions / 60 s AWS Graviton 5 (vm): 63 logical CPUs, 2,855 completions / 60 s AWS Graviton 5 (vm): 79 logical CPUs, 3,468 completions / 60 s AWS Graviton 5 (vm): 96 logical CPUs, 3,474 completions / 60 s AMD Zen 5: 1 logical CPUs, 59 completions / 60 s AMD Zen 5: 2 logical CPUs, 129 completions / 60 s AMD Zen 5: 3 logical CPUs, 203 completions / 60 s AMD Zen 5: 4 logical CPUs, 279 completions / 60 s AMD Zen 5: 5 logical CPUs, 343 completions / 60 s AMD Zen 5: 6 logical CPUs, 409 completions / 60 s AMD Zen 5: 7 logical CPUs, 478 completions / 60 s AMD Zen 5: 8 logical CPUs, 537 completions / 60 s AMD Zen 5: 10 logical CPUs, 669 completions / 60 s AMD Zen 5: 12 logical CPUs, 856 completions / 60 s AMD Zen 5: 14 logical CPUs, 982 completions / 60 s AMD Zen 5: 16 logical CPUs, 1,099 completions / 60 s AMD Zen 5: 20 logical CPUs, 1,397 completions / 60 s AMD Zen 5: 26 logical CPUs, 1,561 completions / 60 s AMD Zen 5: 32 logical CPUs, 1,508 completions / 60 s AMD Zen 5: 40 logical CPUs, 1,494 completions / 60 s AMD Zen 5: 50 logical CPUs, 1,451 completions / 60 s AMD Zen 5: 63 logical CPUs, 1,531 completions / 60 s AMD Zen 5: 79 logical CPUs, 1,572 completions / 60 s AMD Zen 5: 99 logical CPUs, 1,470 completions / 60 s AMD Zen 5: 124 logical CPUs, 1,556 completions / 60 s AMD Zen 5: 155 logical CPUs, 1,482 completions / 60 s AMD Zen 5: 192 logical CPUs, 1,478 completions / 60 s Intel GNR (vm): 1 logical CPUs, 68 completions / 60 s Intel GNR (vm): 2 logical CPUs, 149 completions / 60 s Intel GNR (vm): 3 logical CPUs, 224 completions / 60 s Intel GNR (vm): 4 logical CPUs, 303 completions / 60 s Intel GNR (vm): 5 logical CPUs, 376 completions / 60 s Intel GNR (vm): 6 logical CPUs, 454 completions / 60 s Intel GNR (vm): 7 logical CPUs, 506 completions / 60 s Intel GNR (vm): 8 logical CPUs, 579 completions / 60 s Intel GNR (vm): 10 logical CPUs, 692 completions / 60 s Intel GNR (vm): 12 logical CPUs, 832 completions / 60 s Intel GNR (vm): 14 logical CPUs, 937 completions / 60 s Intel GNR (vm): 16 logical CPUs, 1,117 completions / 60 s Intel GNR (vm): 20 logical CPUs, 1,348 completions / 60 s Intel GNR (vm): 26 logical CPUs, 1,698 completions / 60 s Intel GNR (vm): 32 logical CPUs, 1,912 completions / 60 s Intel GNR (vm): 40 logical CPUs, 1,776 completions / 60 s Intel GNR (vm): 50 logical CPUs, 2,166 completions / 60 s Intel GNR (vm): 63 logical CPUs, 2,324 completions / 60 s Intel GNR (vm): 79 logical CPUs, 2,316 completions / 60 s Intel GNR (vm): 99 logical CPUs, 2,624 completions / 60 s Intel GNR (vm): 124 logical CPUs, 1,522 completions / 60 s Intel GNR (vm): 155 logical CPUs, 2,468 completions / 60 s Intel GNR (vm): 192 logical CPUs, 2,504 completions / 60 s Intel GNR: 1 logical CPUs, 51 completions / 60 s Intel GNR: 2 logical CPUs, 120 completions / 60 s Intel GNR: 3 logical CPUs, 182 completions / 60 s Intel GNR: 4 logical CPUs, 257 completions / 60 s Intel GNR: 5 logical CPUs, 322 completions / 60 s Intel GNR: 6 logical CPUs, 401 completions / 60 s Intel GNR: 7 logical CPUs, 474 completions / 60 s Intel GNR: 8 logical CPUs, 541 completions / 60 s Intel GNR: 10 logical CPUs, 675 completions / 60 s Intel GNR: 12 logical CPUs, 815 completions / 60 s Intel GNR: 14 logical CPUs, 895 completions / 60 s Intel GNR: 16 logical CPUs, 997 completions / 60 s Intel GNR: 20 logical CPUs, 1,241 completions / 60 s Intel GNR: 26 logical CPUs, 1,538 completions / 60 s Intel GNR: 32 logical CPUs, 1,777 completions / 60 s Intel GNR: 40 logical CPUs, 1,984 completions / 60 s Intel GNR: 50 logical CPUs, 1,766 completions / 60 s Intel GNR: 63 logical CPUs, 2,211 completions / 60 s Intel GNR: 79 logical CPUs, 2,383 completions / 60 s Intel GNR: 99 logical CPUs, 2,523 completions / 60 s Intel GNR: 124 logical CPUs, 2,545 completions / 60 s Intel GNR: 155 logical CPUs, 2,544 completions / 60 s Intel GNR: 194 logical CPUs, 2,494 completions / 60 s Intel GNR: 243 logical CPUs, 2,423 completions / 60 s Intel GNR: 256 logical CPUs, 2,337 completions / 60 s NVIDIA Vera: 1 logical CPUs, 86 completions / 60 s NVIDIA Vera: 2 logical CPUs, 191 completions / 60 s NVIDIA Vera: 3 logical CPUs, 298 completions / 60 s NVIDIA Vera: 4 logical CPUs, 403 completions / 60 s NVIDIA Vera: 5 logical CPUs, 510 completions / 60 s NVIDIA Vera: 6 logical CPUs, 615 completions / 60 s NVIDIA Vera: 7 logical CPUs, 712 completions / 60 s NVIDIA Vera: 8 logical CPUs, 820 completions / 60 s NVIDIA Vera: 10 logical CPUs, 1,010 completions / 60 s NVIDIA Vera: 12 logical CPUs, 1,211 completions / 60 s NVIDIA Vera: 14 logical CPUs, 1,400 completions / 60 s NVIDIA Vera: 16 logical CPUs, 1,586 completions / 60 s NVIDIA Vera: 20 logical CPUs, 1,928 completions / 60 s NVIDIA Vera: 26 logical CPUs, 2,423 completions / 60 s NVIDIA Vera: 32 logical CPUs, 2,752 completions / 60 s NVIDIA Vera: 40 logical CPUs, 3,253 completions / 60 s NVIDIA Vera: 50 logical CPUs, 3,591 completions / 60 s NVIDIA Vera: 63 logical CPUs, 3,913 completions / 60 s NVIDIA Vera: 79 logical CPUs, 4,238 completions / 60 s NVIDIA Vera: 99 logical CPUs, 4,281 completions / 60 s NVIDIA Vera: 124 logical CPUs, 4,142 completions / 60 s NVIDIA Vera: 155 logical CPUs, 4,169 completions / 60 s NVIDIA Vera: 176 logical CPUs, 3,978 completions / 60 s Verified completions / 60 s50 containers100 containers150 containersPause automatic cycling NVIDIA Vera AMD Zen 5 Intel GNR AWS Graviton 4 (vm) AWS Graviton 5 (vm) Intel GNR (vm)Physical core boundaries: Intel GNR 128 · Intel GNR (vm) & Graviton 96 · Vera 88

During one of our onsites at NVIDIA HQ, I vividly remember first seeing these results, and being unable to believe how they could be true.

Our early benchmarking runs show up to double the task throughput on Vera compared with an equivalent x86 GNR machine, despite individual task latency measuring equal to, or sometimes even lower than, the x86 machine. This is because Vera does not slow down as jobs accumulate but rips through each one at the original pace.

When asked, the Vera team confirmed that these results are not surprising. It was at this moment I became a Vera believer.

The killer feature is contention

Vera’s killer feature is the ability to hold up under contention. Its high memory bandwidth allows for significantly more container workloads to pack per core, without CPU throttling - which explains why Vera pulls so far ahead of the alternatives in our benchmarks.

At added CPU counts, the alternatives hit early throughput plateaus, while Vera continues to improve, suggesting we could push it even further than the node we had access to for benchmarking.

For Modal, this unlocks greater packing density and more forgiving burst protection.

For Sandbox users, we can offer higher absolute scale and throughput, without sacrificing latency.

We’re very excited to roll out support for Vera CPUs to power Modal Sandboxes, and work closely with NVIDIA and cloud providers to scale up our fleet.