Files
volt-vmm/docs/benchmark-volt-updated.md
Karl Clinger 40ed108dd5 Volt VMM (Neutron Stardust): source-available under AGPSL v5.0
KVM-based microVMM for the Volt platform:
- Sub-second VM boot times
- Minimal memory footprint
- Landlock LSM + seccomp security
- Virtio device support
- Custom kernel management

Copyright (c) Armored Gates LLC. All rights reserved.
Licensed under AGPSL v5.0
2026-03-21 01:04:35 -05:00

189 lines
5.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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*