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
3.2 KiB
3.2 KiB
Volt VMM
A lightweight, secure Virtual Machine Monitor (VMM) built on KVM. Volt is designed as a Firecracker alternative for running microVMs with minimal overhead and maximum security.
Features
- Lightweight: Minimal footprint, fast boot times
- Secure: Strong isolation using KVM hardware virtualization
- Simple API: REST API over Unix socket for VM management
- Async: Built on Tokio for efficient I/O handling
- VirtIO Devices: Block and network devices using VirtIO
- Serial Console: 8250 UART emulation for guest console access
Architecture
volt-vmm/
├── src/
│ ├── main.rs # Entry point and CLI
│ ├── vmm/ # Core VMM logic
│ │ └── mod.rs # VM lifecycle management
│ ├── kvm/ # KVM interface
│ │ └── mod.rs # KVM ioctls wrapper
│ ├── devices/ # Device emulation
│ │ ├── mod.rs # Device manager
│ │ ├── serial.rs # 8250 UART
│ │ ├── virtio_block.rs
│ │ └── virtio_net.rs
│ ├── api/ # HTTP API
│ │ └── mod.rs # REST endpoints
│ └── config/ # Configuration
│ └── mod.rs # VM config parsing
└── Cargo.toml
Building
cargo build --release
Usage
Command Line
# Start a VM with explicit options
volt-vmm \
--kernel /path/to/vmlinux \
--initrd /path/to/initrd.img \
--rootfs /path/to/rootfs.ext4 \
--vcpus 2 \
--memory 256
# Start a VM from config file
volt-vmm --config vm-config.json
Configuration File
{
"vcpus": 2,
"memory_mib": 256,
"kernel": "/path/to/vmlinux",
"cmdline": "console=ttyS0 reboot=k panic=1 pci=off",
"initrd": "/path/to/initrd.img",
"rootfs": {
"path": "/path/to/rootfs.ext4",
"read_only": false
},
"network": [
{
"id": "eth0",
"tap": "tap0"
}
],
"drives": [
{
"id": "data",
"path": "/path/to/data.img",
"read_only": false
}
]
}
API
The API is exposed over a Unix socket (default: /tmp/volt-vmm.sock).
# Get VM info
curl --unix-socket /tmp/volt-vmm.sock http://localhost/vm
# Pause VM
curl --unix-socket /tmp/volt-vmm.sock \
-X PUT -H "Content-Type: application/json" \
-d '{"action": "pause"}' \
http://localhost/vm/actions
# Resume VM
curl --unix-socket /tmp/volt-vmm.sock \
-X PUT -H "Content-Type: application/json" \
-d '{"action": "resume"}' \
http://localhost/vm/actions
# Stop VM
curl --unix-socket /tmp/volt-vmm.sock \
-X PUT -H "Content-Type: application/json" \
-d '{"action": "stop"}' \
http://localhost/vm/actions
Dependencies
Volt leverages the excellent rust-vmm project:
kvm-ioctls/kvm-bindings- KVM interfacevm-memory- Guest memory managementvirtio-queue/virtio-bindings- VirtIO device supportlinux-loader- Kernel/initrd loading
Roadmap
- Project structure
- KVM VM creation
- Guest memory setup
- vCPU initialization
- Kernel loading (bzImage, ELF)
- Serial console
- VirtIO block device
- VirtIO network device
- Snapshot/restore
- Live migration
License
Apache-2.0