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
140 lines
3.2 KiB
Markdown
140 lines
3.2 KiB
Markdown
# 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
|
|
|
|
```bash
|
|
cargo build --release
|
|
```
|
|
|
|
## Usage
|
|
|
|
### Command Line
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```json
|
|
{
|
|
"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`).
|
|
|
|
```bash
|
|
# 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](https://github.com/rust-vmm) project:
|
|
|
|
- `kvm-ioctls` / `kvm-bindings` - KVM interface
|
|
- `vm-memory` - Guest memory management
|
|
- `virtio-queue` / `virtio-bindings` - VirtIO device support
|
|
- `linux-loader` - Kernel/initrd loading
|
|
|
|
## Roadmap
|
|
|
|
- [x] 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
|