Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 13 Nov 2025 12:20:22 +0100
From:      =?UTF-8?Q?Bojan_Novkovi=C4=87?= <bnovkov@freebsd.org>
To:        freebsd-virtualization@freebsd.org
Cc:        Mark Johnston <markj@freebsd.org>
Subject:   RFC: transient virtual machines and "monitor mode"
Message-ID:  <9d28570c-0700-4d24-8977-6f5eb68c23eb@freebsd.org>

next in thread | raw e-mail | index | archive | help

Hi,

As part of the work towards making unprivileged bhyve viable I made some 
changes
to the VM lifecycle, so I'd like to get some feedback on the new VM 
lifecycle scheme.

The first big change was to add mechanisms to automatically reclaim a 
virtual
machine's resources when the owning process goes away, especially when 
it's killed
by the OOM killer.
To address this we decided to tie a virtual machine's lifecycle to a 
file descriptor.
vmmctl's VMMCTL_VM_CREATE ioctl was extended with a new flag
(VMMCTL_CREATE_DESTROY_ON_CLOSE) that instructs it to destroy all virtual
machines associated with a specific vmmctl file descriptor when it is 
closed.
vmmctl uses the 'devfs_xxx_cdevpriv' functions to maintain a 
per-descriptor list
of such virtual machines.

Under this regime the virtual machine gets destroyed once the owning 
process
dies, which is not very useful when one just wants to restart a virtual 
machine.
The second big change addresses this by introducing "monitor mode" to bhyve
(for lack of a better term), which is enabled by passing the '-M' flag.
This will instruct bhyve to create a transient virtual machine using the 
mechanism
described in the above paragraph. At a certain point during startup, it 
will then fork
itself and let the child process continue with the setup and start the VM.
The parent process waits for the virtual machine to exit and will 
automatically
restart it if the child exited with a "reboot" status (i.e., 0).
Exiting with any other status code or killing the parent process will
automatically destroy the VM. Monitor mode also works with non-transient 
VMs,
but it will not destroy them when bhyve exits.

Please feel free to leave comments on any of the following reviews:
  - https://reviews.freebsd.org/D53729 (vmm: Add ability to destroy VMs 
on close)
  - https://reviews.freebsd.org/D53731 (bhyve: Introduce monitor mode)

Thanks,
Bojan




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?9d28570c-0700-4d24-8977-6f5eb68c23eb>