---
name: "vmm"
section: "4"
platform: "openbsd"
package: "man"
version: "8.0-current-20261101"
release: "OpenBSD 8.0-current (2026-11-01)"
platforms: ["freebsd", "openbsd"]
url: "https://new.carta.tech/vmm/4"
---

# vmm(4)

virtual machine monitor

## NAME

**vmm** – virtual machine monitor

## SYNOPSIS

**vmm0    at mainbus0**

**#include \<machine/vmmvar.h\>**

## DESCRIPTION

The **vmm** driver implements a virtual machine monitor (VMM) suitable for executing *virtual* *machines* (VMs). A VMM runs on the *host* operating system and provides facilities to execute one or more VMs, each of which is provided with a suitable complement of virtual hardware.

These VMs run independently of the host, but may interact with it as any other machine would (e.g. via network communications or other means).

VMs are allocated hardware resources by the VMM during creation, including:

- Virtual CPUs

- Virtual network interfaces

- Virtual disk images

- Virtual serial ports

Although VMs execute independently of each other and the host, they do consume host resources and, as such, the number of VMs (and their configurations) should be taken into consideration when planning host capacity.

The **vmm** driver requires suitable host CPU capabilities in order to provide VM services. The **vmm** driver requires at least one CPU with hardware-assisted virtualization capabilities and nested or extended paging capabilities to be present on the host. For more information, consult the CPU vendor's documentation.

The following [ioctl(2)](/ioctl/2.md) commands are provided through two interfaces:

- */dev/vmm*

  Control device for creating VMs.

- VM file descriptor

  Per-VM handle returned by VMM\_IOC\_CREATE. The lifetime of a VM is tied to this descriptor. Closing the last reference to it tears down the VM.

The following ioctl call applies to the */dev/vmm* control device:

- VMM\_IOC\_CREATE *struct vm\_create\_params \**

  Create a VM via */dev/vmm*, initializing **vmm** if not yet started. Returns a VM file descriptor in *vcp\_fd*. (Does not start the VCPU.)

The following ioctl calls apply to the VM file descriptor returned by VMM\_IOC\_CREATE.

- VMM\_IOC\_RUN *struct vm\_run\_params \**

  Run a VCPU and return on VM-exit, when the VCPU stopped, or on error.

- VMM\_IOC\_RESETCPU *struct vm\_resetcpu\_params \**

  Reset a VCPU to power-on-init state using the provided register state.

- VMM\_IOC\_INTR *struct vm\_intr\_params \**

  Signal a pending interrupt for a VCPU.

- VMM\_IOC\_READREGS *struct vm\_rwregs\_params \**

  Read registers of a VCPU.

- VMM\_IOC\_WRITEREGS *struct vm\_rwregs\_params \**

  Write register values of a VCPU.

- VMM\_IOC\_READVMPARAMS *struct vm\_rwvmparams\_params \**

  Read paravirtualized hardware parameters (such as [pvclock(4)](/pvclock/4.md) version) for a VM.

- VMM\_IOC\_WRITEVMPARAMS *struct vm\_rwvmparams\_params \**

  Write paravirtualized hardware parameters (such as [pvclock(4)](/pvclock/4.md) guest physical address) for a VM.

- VMM\_IOC\_SHAREMEM *struct vm\_sharemem\_params \**

  Create shared mappings for the VM memory ranges into the calling process.

## SEE ALSO

[cpu(4)](/cpu/4.md), [intro(4)](/intro/4.md), [virtio(4)](/virtio/4.md), [vmctl(8)](/vmctl/8.md), [vmd(8)](/vmd/8.md)

## HISTORY

The **vmm** driver appeared in OpenBSD 5.9.

## AUTHORS

Mike Larkin ⟨*mlarkin@openbsd.org*⟩
