Volt VMM Benchmark Results (Updated)
Date: 2026-03-08 (updated with security stack + volt-init)
Version: Volt v0.1.0 (with CPUID + Seccomp-BPF + Capability dropping + Landlock + i8042 + volt-init)
Host: Intel Xeon Silver 4210R @ 2.40GHz (2 sockets × 10 cores, 40 threads)
Host Kernel: Linux 6.1.0-42-amd64 (Debian)
Guest Kernel: Linux 4.14.174 (vmlinux ELF format, 21,441,304 bytes)
Summary
| Metric |
Previous |
Current |
Change |
| Binary size |
3.10 MB |
3.45 MB |
+354 KB (+11%) |
| Cold boot to userspace |
N/A |
548 ms |
New capability |
| Cold boot to kernel panic (median) |
1,723 ms |
1,338 ms |
−385 ms (−22%) |
| VMM init time (TRACE) |
88.9 ms |
85.0 ms |
−3.9 ms (−4%) |
| VMM init time (wall-clock median) |
110 ms |
91 ms |
−19 ms (−17%) |
| Memory overhead (128M guest) |
6.6 MB |
9.3 MB |
+2.7 MB |
| Security layers |
1 (CPUID) |
4 |
+3 layers |
| Security overhead |
— |
<1 ms |
Negligible |
| Init system |
None |
volt-init (509 KB) |
New |
1. Binary & Component Sizes
| Component |
Size |
Format |
| volt-vmm VMM |
3,612,896 bytes (3.45 MB) |
ELF 64-bit, dynamic, stripped |
| volt-init |
520,784 bytes (509 KB) |
ELF 64-bit, static-pie musl, stripped |
| initramfs.cpio.gz |
265,912 bytes (260 KB) |
gzipped cpio archive |
| Total deployable |
~3.71 MB |
|
Dynamic dependencies (volt-vmm): libc, libm, libgcc_s
2. Cold Boot to Userspace (10 iterations)
Process start → "VOLT VM READY" banner displayed. 128M RAM, 1 vCPU, initramfs with volt-init.
| Iteration |
Time (ms) |
| 1 |
505 |
| 2 |
556 |
| 3 |
555 |
| 4 |
561 |
| 5 |
548 |
| 6 |
564 |
| 7 |
553 |
| 8 |
544 |
| 9 |
559 |
| 10 |
535 |
| Stat |
Value |
| Minimum |
505 ms |
| Median |
548 ms |
| Maximum |
564 ms |
| Spread |
59 ms (10.8%) |
Kernel internal uptime at shell prompt: ~320ms (from volt-init output).
3. Cold Boot to Kernel Panic (10 iterations)
Process start → "Rebooting in" message. No initramfs, no rootfs. 128M RAM, 1 vCPU.
| Iteration |
Time (ms) |
| 1 |
1,322 |
| 2 |
1,332 |
| 3 |
1,345 |
| 4 |
1,358 |
| 5 |
1,338 |
| 6 |
1,340 |
| 7 |
1,322 |
| 8 |
1,347 |
| 9 |
1,313 |
| 10 |
1,319 |
| Stat |
Value |
| Minimum |
1,313 ms |
| Median |
1,338 ms |
| Maximum |
1,358 ms |
| Spread |
45 ms (3.4%) |
Improvement: −385 ms (−22%) from previous (1,723 ms). The i8042 device emulation eliminated the ~500ms keyboard controller probe timeout.
4. VMM Initialization Breakdown (TRACE-level)
| Δ from start (ms) |
Duration (ms) |
Phase |
| +0.000 |
— |
Program start |
| +0.110 |
0.1 |
KVM initialized |
| +35.444 |
35.3 |
CPUID configured (46 entries) |
| +69.791 |
34.3 |
Guest memory allocated (128 MB) |
| +69.805 |
0.0 |
VM created |
| +69.812 |
0.0 |
Devices initialized (serial + i8042) |
| +83.812 |
14.0 |
Kernel loaded (21 MB ELF) |
| +84.145 |
0.3 |
vCPU configured |
| +84.217 |
0.1 |
Landlock sandbox applied |
| +84.476 |
0.3 |
Capabilities dropped |
| +85.026 |
0.5 |
Seccomp-BPF installed (72 syscalls, 365 BPF instructions) |
| +85.038 |
— |
VM running |
| Phase |
Duration (ms) |
% |
| KVM init |
0.1 |
0.1% |
| CPUID configuration |
35.3 |
41.5% |
| Memory allocation |
34.3 |
40.4% |
| Kernel loading |
14.0 |
16.5% |
| Device + vCPU setup |
0.4 |
0.5% |
| Security hardening |
0.9 |
1.1% |
| Total |
85.0 |
100% |
Wall-clock VMM Init (5 iterations)
| Iteration |
Time (ms) |
| 1 |
91 |
| 2 |
115 |
| 3 |
84 |
| 4 |
91 |
| 5 |
84 |
Median: 91 ms (previous: 110 ms, −17%)
5. Memory Overhead
RSS measured 2 seconds after VM boot:
| Guest Memory |
RSS (KB) |
VSZ (KB) |
Overhead (KB) |
Overhead (MB) |
| 128 MB |
140,388 |
2,910,232 |
9,316 |
9.3 |
| 256 MB |
269,500 |
3,041,304 |
7,356 |
7.2 |
| 512 MB |
535,540 |
3,303,452 |
11,252 |
11.0 |
Average VMM overhead: ~9.2 MB (slight increase from previous 6.6 MB due to security structures, i8042 device state, and initramfs buffering).
6. Security Stack
Layers
| Layer |
Details |
| CPUID filtering |
46 entries; strips VMX, TSX, MPX, MONITOR, thermal, perf |
| Seccomp-BPF |
72 syscalls allowed, all others → KILL_PROCESS (365 BPF instructions) |
| Capability dropping |
All 64 Linux capabilities cleared |
| Landlock |
Filesystem sandboxed to kernel/initrd files + /dev/kvm |
| NO_NEW_PRIVS |
Set via prctl (enforced by Landlock) |
Security Overhead
| Mode |
VMM Init (median, ms) |
| All security ON |
90 |
| Security OFF (--no-seccomp --no-landlock) |
91 |
| Overhead |
<1 ms |
Security is effectively free from a performance perspective.
7. Devices
| Device |
I/O Address |
IRQ |
Notes |
| Serial (ttyS0) |
0x3f8 |
IRQ 4 |
16550 UART with IRQ injection |
| i8042 |
0x60, 0x64 |
IRQ 1/12 |
Keyboard controller (responds to probes) |
| IOAPIC |
0xfec00000 |
— |
Interrupt routing |
| Local APIC |
0xfee00000 |
— |
Per-CPU interrupt controller |
The i8042 device is the key improvement — it responds to keyboard controller probes immediately, eliminating the ~500ms timeout that plagued the previous version and Firecracker's default configuration.
Generated by automated benchmark suite, 2026-03-08