-
Notifications
You must be signed in to change notification settings - Fork 2.1k
Description
Updated on 05/09/2025:
Currently, the logic to create a Vm and a Vmm objects is scattered across vmm/lib.rs and vmm.builder.rs files and it is quite convoluted and some times difficult to follow. Moreover, there is a lot of architecture specific code inserted in arbitrary places which further increases the un-readability.
Currently Vmm object is a mix bag of Vm related fields and miscellaneous management fields. This makes the whole differentiation between Vm and Vmm more difficult and testing more convoluted.
The goal of this issue is to move all Vm related fields (vcpus_handles, device_manager and device_manager) into Vm. This also goes for all attach_*_device functions and unit tests from builder.rs
The final solution should have approximately this look:
pub fn build_microvm_for_boot(
instance_info: &InstanceInfo,
vm_resources: &super::resources::VmResources,
event_manager: &mut EventManager,
seccomp_filters: &BpfThreadMap,
) -> Result<Arc<Mutex<Vmm>>, StartMicrovmError> {
// vm_resources verification
// All Kvm, Vcpu creation and device attachment can
// happen here
let vm = Vm::new(vm_resources, event_manager)?;
// or move registration into separate function
let vm = Vm::new(vm_resources)?;
vm.register_device_events(event_manager)?;
let vmm = Vmm {
vm,
...
};
// GDB configuration
vmm.vm.start_vcpus(...vcpu seccomp filter)?;
...
}