Firecracker on nested KVM: 1.38 s median to a healthy agent

305 production cold boots on nested KVM, and the guest clock fix when two documented methods fail.

Plori

On September 25, 2026, plori started to run new agent sessions in Firecracker microVMs. Each node is itself a KVM guest, so the microVMs use nested KVM. These numbers cover the period to September 27.

The short answer

  • 305 cold boots: the median time from create request to a healthy agent process was 1.38 s and the 95th percentile was 1.76 s. Firecracker itself configured and started each guest in a median of 10 ms.
  • Guest clock: clock_realtime and KVM PTP both fail on our nodes, so guests use NTP with the node as time server. A guest restored from a 120 s old snapshot read 120 s behind for the first 3 s, and had offset 0 s at 5 s.
  • Memory: at an overcommit ratio of 1.5, a node holds nine sessions instead of six.

Production boot phases, 305 cold boots

Phase Median 95th percentile
create 19 ms 32 ms
boot 10 ms 18 ms
health 1.34 s 1.72 s
total 1.38 s 1.76 s

When the answer changes

  1. Your host clock source: both clock methods need a TSC-based clock source on the host. Read /sys/devices/system/clocksource/clocksource0/current_clocksource. With tsc both can work. With kvm-clock, as on our nodes, serve NTP from the node. The problem is not certain on every nested host.
  2. Concurrency: at most five VMs were in use at the same time in the week measured. We have not measured boot time under higher concurrency.
  3. Not proven in production: snapshot restore and memory pressure handling ran only on test nodes. Production ran at ratio 1.5 from September 26, and the memory pressure loop took zero steps.

The full post has the jailer and reflink root disks, the per-VM network rules, and the memory admission settings.

Read the full post

Try plori.ai

Subscribe to Plori Engineering

Engineering notes building AI agents in the cloud

Free. Unsubscribe anytime.

Keep reading

All issues →
  1. Scion-style merges: one comparison takes 1.93 s at 100,000 files

    What we took from Anthropic's Scion for Workspaces, and the merge cost we measured before changing anything.

  2. Claude Code handed 0 of 240 unnamed-server prompts to our MCP server, then 21

    What Claude Code shows the model about MCP tools, and what a rewrite of our server text changed in 240 runs.

  3. AI agent files: a local disk, saved to object storage every 60 seconds

    What a crash can lose, how results are accepted, and the start and save times we measured.