Platform internals
Millisecond sandboxes come from a stack of kernel mechanisms working together: KVM, userfaultfd, copy-on-write storage, network namespaces and cgroups. These posts go underneath the API into memory, networking, storage and scheduling, with the measurements behind the design choices.
PandaStack benchmarks160 posts
Giving a MicroVM Access to a Customer's Private Network
The customer's database is in their VPC and your sandbox is not. The naive answer is to hand them your egress IPs and ask them to open a hole; the answer that survives a security review is a WireGuard peer per sandbox, minted after restore, revoked on teardown, and never, ever baked into a snapshot.
Rowhammer and the Attacks Below Your Hypervisor
Every isolation guarantee you buy is enforced by software running on hardware that several tenants share. Rowhammer is the clearest example of what that sentence costs: a bit flip in a DRAM row you do not own, achieved by physics rather than by a bug. Here's the honest version — what it takes to land, what ECC and TRR really buy, and the two mitigations that actually change the answer.
How to Put a CDN in Front of a Scale-to-Zero App
An origin that is allowed to sleep changes what your cache headers are for. Done properly, the wake happens in a background fetch and lands on nobody's request; done carelessly, one Vary header hands every visitor a cold boot.
Skipping DHCP: the Firecracker boot line you actually ship
Everybody ships the same eleven-token Firecracker kernel command line and nobody measures it. Ours is four tokens plus a generated ip= that skips DHCP entirely — here is how to work out which tokens are buying you anything, and why the answer changes completely once you restore snapshots instead of booting.
virtiofs vs virtio-blk: How Files Actually Get Into a MicroVM
One gives the guest a disk it owns. The other gives it a window onto a directory the host owns. That single difference decides whether you can fork a machine in 400ms, who parses guest-controlled input, and what a multi-tenant escape looks like.
What "persistent" actually means in a sandbox
You wrote the file. You ran cat and saw it. Neither of those facts says the bytes are on a disk. Here is every layer a write passes through inside a microVM, which of them a crash erases, and why the honest answer for an ephemeral rootfs is not "fsync harder" but "get the artifact out".
Interrupts, IRQs, and Where microVM Tail Latency Comes From
Median latency tells you the machine works. p99 tells you how the machine is built. Here is every handoff a virtio interrupt makes inside a Firecracker guest, which of those handoffs are queues, and which ones you can actually do something about.
Why the disk under your sandbox fleet decides your boot time
People pick a sandbox platform on features and then get bitten by storage hardware. A reflink clone is metadata-only and nearly free; every copy-on-write byte afterwards is a real read-modify-write against a real device. Under 50 concurrent restores, that device is either local NVMe or it is your bottleneck.
Your benchmark ran at a different clock speed than production
The same core does not run at the same speed twice. Governor, turbo bin, how many neighbours are busy, thermal headroom and ramp latency all move it — which is why the first sandbox on a quiet host looks fast and the fiftieth on a busy one gets blamed on the platform.
More posts in this topic
- Rate-Limiting the Network on a Per-Sandbox Basis
- Spectre, Meltdown, and What a microVM Actually Protects You From
- Conntrack Table Limits: The Shared Resource Under Your MicroVM Fleet
- Hyper-Threading and microVM Isolation: the SMT Decision
- PSI: The Right Instrument for Memory Oversubscription
- EEVDF vs CFS: What the New Linux Scheduler Means for MicroVM Density
- How to Debug a Hung Process in a Sandbox
- Where Sleeping Workloads Live: Storage Tiering Explained
- How to profile code running in a sandbox
- PID namespaces and process isolation, explained: what CLONE_NEWPID actually gives you
- Container Escape CVEs, by Class: What the Pattern Tells You
- tmpfs in a microVM: The Filesystem That Eats Your RAM
- How a Sandbox Scheduler Decides Where Your VM Lands
- How Many Sandboxes Fit on One Machine?
- Where Scale-to-Zero Wake Time Actually Goes
- UFFDIO_ZEROPAGE vs UFFDIO_COPY: Stop Paying RAM for Zeros
- The Snapshot-Restore Thundering Herd, Explained
- How to Benchmark Sandbox Cold Start Honestly
- Scheduling sandbox bursts: why 50 creates land on one host
- eBPF for sandbox observability: what it can and cannot see
- How to Expose a Sandbox Port on a Public URL
- userfaultfd in Production: How the Pager Fails
- Sparse Files and Hole Punching: Why Your Snapshot Lies About Its Size
- MAP_PRIVATE vs MAP_SHARED: The mmap Flag That Decides Everything
- Mount namespaces and pivot_root, explained for sandboxing: how filesystem isolation really works
- Your Firecracker Snapshot Restore Failed: A Field Guide
- You Ship the Kernel: Firecracker Guest 5.10 vs 6.1
- Should You Compress Firecracker Memory Snapshots?
- How to handle file uploads in a deployed app
- The best load testing platforms in 2026
- Per-Room WebRTC Media Servers in MicroVMs
- Guest kernel lockdown and module loading in Firecracker microVMs
- fsfreeze and the Three Tiers of Snapshot Consistency
- IPv6 for Firecracker MicroVM Fleets
- KSM Memory Deduplication for MicroVMs — And Why It's a Trap
- overlayfs Inside the Guest: Read-Only Rootfs, Writable Upper Layer
- Firecracker on arm64 vs x86_64: What Actually Differs
- Confidential computing for microVMs: SEV-SNP, TDX, and arm CCA explained
- Linux capabilities, explained for sandboxing: five sets, one bounding ceiling, and the bits that are still root
- io_uring and sandbox security: the fast path that walks around your syscall filter
- IP Address Planning for a MicroVM Fleet
- How to persist data in a sandbox
- Firecracker Guest DNS Resolution Explained
- CPU Steal Time in microVMs: Your VM Isn't Slow, It's Waiting
- MicroVM Rootfs Filesystems: ext4 vs XFS vs Btrfs
- AppArmor vs SELinux for sandboxing: what mandatory access control actually buys you
- Firecracker vCPU Hotplug, and How CPU Scaling Actually Works
- Firecracker Guest MTU and Network Tuning Explained
- Side-channel attacks in multi-tenant compute, explained
- Memory Prefetch: The Working Set Is the Real Unit of a Fast Restore
- Why your JavaScript build runs out of memory
- Connection pooling, and why you ran out of connections
- How much memory does your Postgres actually need?
- The Postgres metrics worth watching
- How many browsers can one machine actually run?
- Firecracker config file vs REST API: two ways to boot a microVM
- Snapshot-Restore vs Live Migration: Not the Same Problem
- Routing Postgres connections by SNI
- Building a load-testing fleet on microVMs
- How to Write a userfaultfd Handler for Firecracker
- Firecracker Boot Sources: initrd vs a Root Block Device
- User namespaces, explained for sandboxing: what root-in-a-namespace actually buys you
- The Firecracker REST API: booting a microVM by hand with curl
- Firecracker boot_args, argument by argument
- Snapshot, Restore, and the Connections You Left Open
- VM exits: the actual currency of virtualization overhead
- cgroups v2 Explained for Sandboxing Untrusted Code
- Firecracker Shutdown and Reboot Semantics, Explained
- Nested virtualization and Firecracker: what actually works
- What Runs as PID 1 Inside a MicroVM (and Why It Matters)
- virtio-blk Discard and TRIM in Firecracker, Explained
- Landlock explained: unprivileged filesystem sandboxing in the Linux kernel, and where it stops
- Database Branching with Copy-on-Write MicroVMs
- Firecracker Hugepages for Guest Memory, Explained
- What's Actually Inside a Firecracker Snapshot
- Firecracker Metrics and Logger FIFOs, Explained
- Firecracker virtio-net RX/TX Queues Explained
- NUMA Locality and Firecracker Snapshot Restore
- Snapshot Restore vs Process Preforking: Same Idea, Different Boundary
- Snapshot Restore vs Cold Boot: The Tradeoffs Nobody Lists
- Snapshot Restore vs Container Image Pull: Two Ways to Start Fast
- The Snapshot Clone Randomness Problem
- Swap and zram Inside a Firecracker MicroVM: What Actually Happens
- Guest Clock Drift After a Firecracker Snapshot Restore
- Firecracker's seccomp-BPF filters explained: locking down the VMM's own syscalls
- Firecracker vhost-user-block Devices Explained
- Firecracker CPUID masking, explained
- Guest page cache: why it bloats microVM snapshots
- Firecracker Dirty Page Tracking, Explained
- Why Firecracker Uses virtio-MMIO, Not virtio-PCI
- How Network Namespaces Isolate Each Firecracker MicroVM
- Firecracker Guest Memory Layout, Explained
- How Firecracker Restores Guest Memory: mmap & MAP_PRIVATE
- Guest Clocks and the TSC After a Firecracker Restore
- Firecracker's vsock-over-UDS Handoff, Explained
- Best Firecracker Networking Tools & Approaches (2026)
- Restoring a Firecracker Snapshot on a Different CPU
- How Firecracker uses the Linux KVM API: an internals explainer
- Designing a Guest-Agent Control Protocol Over vsock
- Memory Oversubscription in MicroVM Fleets, Explained
- The Firecracker VMGenID Device, Explained
- Firecracker Networking: TAP vs macvtap (and netns)
- CPU Pinning and Noisy Neighbors in microVM Fleets
- Firecracker Block Device Cache Modes Explained
- How Copy-on-Write Page Tables Work (and Why VM Fork Is Fast)
- Giving AI Agents Persistent Memory & State via microVM Snapshots
- Firecracker virtio-rng and Guest Entropy Explained
- Firecracker Snapshot Version Compatibility & Cross-Version Restore
- microVM Memory: Balloon vs Hotplug vs Re-Provision
- The PVH Boot Protocol: How Firecracker Skips Firmware
- Firecracker Diff Snapshots Explained
- Copy-on-Write and the Page-Fault Lifecycle, Step by Step
- Firecracker Snapshot-Restore vs AWS Lambda SnapStart
- The OOM Killer and Guest Memory in Firecracker
- Firecracker Doesn't Use vhost-net (On Purpose)
- Copy-on-Write Memory: Why Forking a VM's RAM Is Cheap
- How Firecracker Schedules vCPUs: The Threading Model
- Debugging a Firecracker microVM That Won't Boot
- The Zygote Pattern: Fork One Warm Snapshot Into Thousands of MicroVMs
- Firecracker Snapshot/Restore vs CRIU Checkpoint/Restore
- The Serverless Cold-Start Problem, Explained
- Building a Minimal Firecracker Guest Kernel
- Firecracker's Rate Limiter, Explained
- Firecracker CPU Templates, Explained
- Shared Pages & Copy-on-Write: Packing MicroVMs Densely
- Building an ephemeral web-scraper fleet on microVMs
- Firecracker's io_uring Block Backend Explained
- Snapshot-Restore vs Warm Pools: Two Ways to Kill Sandbox Cold Starts
- How gVisor intercepts syscalls: the Sentry, the Gofer, and platforms explained
- The Security Gotchas of Firecracker Snapshots (Secrets Frozen in RAM)
- Copy-on-Write Rootfs: dm-snapshot vs reflink for MicroVMs
- The Anatomy of a Sub-200ms MicroVM Create
- VM escape attacks explained: what they are and why microVMs shrink the target
- The Firecracker security model: how a microVM actually contains untrusted code
- Kill Cold Starts with microVM Snapshotting: Warm Starts Without a Warm Pool
- The Firecracker virtio-balloon Device, Explained
- Memory Overcommit & Page Sharing: How MicroVMs Get Dense
- The Firecracker Jailer Explained
- How Firecracker's virtio Devices Work
- The Snapshot-Restore Boot Path: Every Sandbox in Under 200ms
- Controlling Network Egress for Untrusted Code
- seccomp explained for developers: filtering syscalls to shrink the kernel attack surface
- vsock Explained: How the Host Talks to a microVM
- How to Optimize MicroVM Cold Start
- How Firecracker Memory Snapshots Actually Work
- Firecracker Networking Explained: TAP, netns, NAT
- Copy-on-Write Rootfs: Why MicroVM Create Is O(metadata)
- userfaultfd: Lazy Memory for Instant VM Restore
- How PandaStack Creates a MicroVM in Under 200ms
- Stop an AI Agent Touching the Host Filesystem & Network
- Why Docker Isn't a Sandbox