# 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