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
This commit is contained in:
139
vmm/README.md
Normal file
139
vmm/README.md
Normal file
@@ -0,0 +1,139 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user