xref: /illumos-gate/usr/src/man/man8/bhyve.8 (revision 8b4261085e0d677be9a3253ff6b4c290e402576d)
1.\" Copyright (c) 2013 Peter Grehan
2.\" All rights reserved.
3.\"
4.\" Redistribution and use in source and binary forms, with or without
5.\" modification, are permitted provided that the following conditions
6.\" are met:
7.\" 1. Redistributions of source code must retain the above copyright
8.\"    notice, this list of conditions and the following disclaimer.
9.\" 2. Redistributions in binary form must reproduce the above copyright
10.\"    notice, this list of conditions and the following disclaimer in the
11.\"    documentation and/or other materials provided with the distribution.
12.\"
13.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND
14.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE
17.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
23.\" SUCH DAMAGE.
24.\"
25.\" Portions Copyright 2022 OmniOS Community Edition (OmniOSce) Association.
26.\"
27.Dd June 1, 2022
28.Dt BHYVE 8
29.Os
30.Sh NAME
31.Nm bhyve
32.Nd "run a guest operating system inside a virtual machine"
33.Sh SYNOPSIS
34.Nm
35.Op Fl aCDdeHhPSuWwxY
36.Oo
37.Sm off
38.Fl c\~
39.Oo
40.Op Cm cpus=
41.Ar numcpus
42.Oc
43.Op Cm ,sockets= Ar n
44.Op Cm ,cores= Ar n
45.Op Cm ,threads= Ar n
46.Oc
47.Sm on
48.Oo
49.Sm off
50.Fl G\~
51.Oo Ar w Oc
52.Oo Ar bind_address Cm \&: Oc
53.Ar port
54.Oc
55.Sm on
56.Oo Fl B
57.Sm off
58.Ar type Ns \&,
59.Op Ar key Ns = Ns Ar value
60.Oo \&, Ns Ar key Ns = Ns Ar value Ns Oc \&...
61.Oc
62.Sm on
63.Op Fl k Ar config_file
64.Op Fl K Ar layout
65.Oo Fl l
66.Sm off
67.Ar lpcdev Op Cm \&, Ar conf
68.Sm on
69.Oc
70.Sm off
71.Oo Fl m\~
72.Ar memsize
73.Oo
74.Cm K | k | M | m | G | g | T | t
75.Oc
76.Sm on
77.Oc
78.Op Fl o Ar var Ns Cm = Ns Ar value
79.Op Fl r Ar file
80.Sm off
81.Oo Fl s\~
82.Ar slot Cm \&, Ar emulation Op Cm \&, Ar conf
83.Sm on
84.Oc
85.Op Fl U Ar uuid
86.Ar vmname
87.Nm
88.Fl l Cm help
89.Nm
90.Fl s Cm help
91.Sh DESCRIPTION
92.Nm
93is a hypervisor that runs guest operating systems inside a
94virtual machine.
95.Pp
96Parameters such as the number of virtual CPUs, amount of guest memory, and
97I/O connectivity can be specified with command-line parameters.
98.Pp
99.Nm
100runs until the guest operating system reboots or an unhandled hypervisor
101exit is detected.
102.Sh OPTIONS
103.Bl -tag -width 10n
104.It Fl a
105The guest's local APIC is configured in xAPIC mode.
106The xAPIC mode is the default setting so this option is redundant.
107It will be deprecated in a future version.
108.It Xo
109.Fl B
110.Sm off
111.Ar type Ns \&,
112.Op Ar key Ns = Ns Ar value
113.Oo \&, Ns Ar key Ns = Ns Ar value Ns Oc \&...
114.Sm on
115.Xc
116Configure smbios data.
117.Ar type
118must be set to one of
119.Cm 0 , 1 , 2
120or
121.Cm 3 .
122Supported keys for each type are:
123.Bl -tag -width XXX -offset XXX
124.It Cm 0
125.Cm vendor , version , release_date .
126.It Cm 1
127.Cm manufacturer ,
128.Cm product_name Pq or Cm product ,
129.Cm version ,
130.Cm serial_number Pq or Cm serial ,
131.Cm sku ,
132.Cm family_name Pq or Cm family ,
133.Cm uuid .
134.It Cm 2
135.Cm manufacturer , product_name , version , serial_number , asset_tag ,
136.Cm location
137.It Ic 3
138.Cm manufacturer , version , serial_number , asset_tag, sku .
139.El
140.It Xo Fl c
141.Sm off
142.Op Oo Cm cpus= Oc Ar numcpus
143.Op Cm ,sockets= Ar n
144.Op Cm ,cores= Ar n
145.Op Cm ,threads= Ar n
146.Xc
147.Sm on
148Number of guest virtual CPUs
149and/or the CPU topology.
150The default value for each of
151.Ar numcpus ,
152.Ar sockets ,
153.Ar cores ,
154and
155.Ar threads
156is 1.
157The current maximum number of guest virtual CPUs is 32.
158If
159.Ar numcpus
160is not specified then it will be calculated from the other arguments.
161The topology must be consistent in that the
162.Ar numcpus
163must equal the product of
164.Ar sockets ,
165.Ar cores ,
166and
167.Ar threads .
168If a
169.Ar setting
170is specified more than once the last one has precedence.
171.It Fl C
172Include guest memory in core file.
173.It Fl D
174Destroy the VM on guest initiated power-off.
175.It Fl d
176Suspend CPUs at boot.
177.It Fl e
178Force
179.Nm
180to exit when a guest issues an access to an I/O port that is not emulated.
181This is intended for debug purposes.
182.It Fl G Xo
183.Sm off
184.Oo Ar w Oc
185.Oo Ar bind_address Cm \&: Oc
186.Ar port
187.Sm on
188.Xc
189Start a debug server that uses the GDB protocol to export guest state to a
190debugger.
191An IPv4 TCP socket will be bound to the supplied
192.Ar bind_address
193and
194.Ar port
195to listen for debugger connections.
196Only a single debugger may be attached to the debug server at a time.
197If the option begins with
198.Sq w ,
199.Nm
200will pause execution at the first instruction waiting for a debugger to attach.
201.It Fl H
202Yield the virtual CPU thread when a HLT instruction is detected.
203If this option is not specified, virtual CPUs will use 100% of a host CPU.
204.It Fl h
205Print help message and exit.
206.It Fl k Ar config_file
207Set configuration variables from a simple, key-value config file.
208Each line of the config file is expected to consist of a config variable
209name, an equals sign
210.Pq Sq = ,
211and a value.
212No spaces are permitted between the variable name, equals sign, or
213value.
214Blank lines and lines starting with
215.Sq #
216are ignored.
217See
218.Xr bhyve_config 5
219for more details.
220.It Fl K Ar layout
221Specify the keyboard layout.
222The value that can be specified sets the file name in
223.Pa /usr/share/bhyve/kbdlayout .
224This specification only works when loaded with UEFI mode for VNC.
225When using a VNC client that supports QEMU Extended Key Event Message
226.Pq e.g. TigerVNC ,
227this option isn't needed.
228When using a VNC client that doesn't support QEMU Extended Key Event Message
229.Pq e.g. tightVNC ,
230the layout defaults to the US keyboard unless specified otherwise.
231.It Fl l Cm help
232Print a list of supported LPC devices.
233.It Fl l Ar lpcdev Ns Op \&, Ns Ar conf
234Allow devices behind the LPC PCI-ISA bridge to be configured.
235The only supported devices are the TTY-class devices
236.Cm com1 , com2 , com3
237and
238.Cm com4 ,
239the boot ROM device
240.Cm bootrom ,
241and the debug/test device
242.Cm pc-testdev .
243.Pp
244The possible values for the
245.Ar conf
246argument are listed in the
247.Fl s
248flag description.
249.It Xo
250.Fl m Ar memsize Ns Oo
251.Sm off
252.Cm K | k | M | m | G | g | T | t
253.Sm on
254.Oc
255.Xc
256Set the guest physical memory size.
257The size argument may be suffixed with one of
258.Cm K , M , G
259or
260.Cm T
261.Pq either upper or lower case
262to indicate a multiple of kibibytes, mebibytes, gibibytes, or tebibytes.
263If no suffix is given, the value is assumed to be in mebibytes.
264.Pp
265The default is 256MiB.
266.It Fl o Ar var Ns Cm = Ns Ar value
267Set the configuration variable
268.Ar var
269to
270.Ar value .
271.It Fl P
272Force the guest virtual CPU to exit when a PAUSE instruction is detected.
273.It Fl S
274Wire guest memory.
275.It Fl s Cm help
276Print a list of supported PCI devices.
277.It Fl s Ar slot Ns Cm \&, Ns Ar emulation Ns Op Cm \&, Ns Ar conf
278Configure a virtual PCI slot and function.
279.Pp
280.Nm
281provides PCI bus emulation and virtual devices that can be attached to
282slots on the bus.
283There are 32 available slots, with the option of providing up to 8 functions
284per slot.
285.Pp
286The
287.Ar slot
288can be specified in one of the following formats:
289.Pp
290.Bl -bullet -compact
291.It
292.Ar pcislot
293.It
294.Sm off
295.Ar pcislot Cm \&: Ar function
296.Sm on
297.It
298.Sm off
299.Ar bus Cm \&: Ar pcislot Cm \&: Ar function
300.Sm on
301.El
302.Pp
303The
304.Ar pcislot
305value is 0 to 31.
306The optional
307.Ar function
308value is 0 to 7.
309The optional
310.Ar bus
311value is 0 to 255.
312If not specified, the
313.Ar function
314value defaults to 0.
315If not specified, the
316.Ar bus
317value defaults to 0.
318.Pp
319The
320.Ar emulation
321argument can be one of the following:
322.Bl -tag -width "amd_hostbridge"
323.It Cm hostbridge
324A simple host bridge.
325This is usually configured at slot 0, and is required by most guest
326operating systems.
327.It Cm amd_hostbridge
328Emulation identical to
329.Cm hostbridge
330but using a PCI vendor ID of AMD.
331.It Cm passthru
332PCI pass-through device.
333.It Cm virtio-net-viona
334Accelerated Virtio network interface.
335.It Cm virtio-net
336Legacy Virtio network interface.
337.It Cm virtio-blk
338Virtio block storage interface.
339.It Cm virtio-9p
340Virtio 9p (VirtFS) interface.
341.It Cm virtio-rnd
342Virtio random number generator interface.
343.It Cm virtio-console
344Virtio console interface, which exposes multiple ports
345to the guest in the form of simple char devices for simple IO
346between the guest and host userspaces.
347.It Cm ahci
348AHCI controller attached to arbitrary devices.
349.It Cm ahci-cd
350AHCI controller attached to an ATAPI CD/DVD.
351.It Cm ahci-hd
352AHCI controller attached to a SATA hard drive.
353.It Cm e1000
354Intel e82545 network interface.
355.It Cm uart
356PCI 16550 serial device.
357.It Cm lpc
358LPC PCI-ISA bridge with COM1, COM2, COM3, and COM4 16550 serial ports,
359a boot ROM, and, optionally, the debug/test device.
360The LPC bridge emulation can only be configured on bus 0.
361.It Cm fbuf
362Raw framebuffer device attached to VNC server.
363.It Cm xhci
364eXtensible Host Controller Interface (xHCI) USB controller.
365.It Cm nvme
366NVM Express (NVMe) controller.
367.El
368.Pp
369The optional parameter
370.Ar conf
371describes the backend for device emulations.
372If
373.Ar conf
374is not specified, the device emulation has no backend and can be
375considered unconnected.
376.Pp
377.Sy Host Bridge Devices
378.Bl -tag -width 10n
379.It Cm model Ns = Ns Ar model
380Specify a hostbridge model to emulate.
381Valid model strings, and their associated vendor and device IDs are:
382.Sy amd Pq 0x1022/0x7432 ,
383.Sy netapp Pq 0x1275/0x1275 ,
384.Sy i440fx Pq 0x8086/0x1237
385and
386.Sy q35 Pq 0x8086/0x29b0 .
387The default value of
388.Ar model
389is
390.Cm netapp .
391.It Cm vendor Ns = Ns Ar vendor
392PCI vendor ID.
393.It Cm devid Ns = Ns Ar devid
394PCI device ID.
395.El
396.Pp
397Providing extra configuration parameters for a host bridge is optional, but if
398parameters are provided then either
399.Va model
400by itself, or both of
401.Va vendor
402and
403.Va devid
404must be specified.
405.Pp
406.Sy Accelerated Virtio Network Backends :
407.Bl -tag -width 10n
408.It Oo Cm vnic Ns = Oc Ns Ar vnic Ns Oo , Ns Cm feature_mask Ns = Ns Ar mask Oc
409.Pp
410.Ar vnic
411is the name of a configured virtual NIC on the system.
412.Ar mask
413is applied to the virtio feature flags which are advertised to the guest.
414Bits set in the
415.Ar mask
416value are removed from the advertised features.
417.El
418.Pp
419.Sy Other Network Backends :
420.Bl -tag -width 10n
421.It Oo Cm vnic Ns = Oc Ns Ar vnic Ns Oo , Ns Ar network-backend-options Oc
422.Pp
423.Ar vnic
424is the name of a configured virtual NIC on the system.
425.El
426.Pp
427The
428.Ar network-backend-options
429are:
430.Bl -tag -width 8n
431.It Cm promiscphys
432Enable promiscuous mode at the physical level (default: false)
433.It Cm promiscsap
434Enable promiscuous mode at the SAP level (default: true)
435.It Cm promiscmulti
436Enable promiscuous mode for all multicast addresses (default: true)
437.It Cm promiscrxonly
438The selected promiscuous modes are only enabled for received traffic
439(default: true).
440.El
441.Pp
442.Sy Block storage device backends :
443.Sm off
444.Bl -bullet
445.It
446.Pa /filename Op Cm \&, Ar block-device-options
447.It
448.Pa /dev/xxx Op Cm \&, Ar block-device-options
449.El
450.Sm on
451.Pp
452The
453.Ar block-device-options
454are:
455.Bl -tag -width 10n
456.It Cm nocache
457Open the file with
458.Dv O_DIRECT .
459.It Cm direct
460Open the file using
461.Dv O_SYNC .
462.It Cm ro
463Force the file to be opened read-only.
464.It Cm sectorsize= Ns Ar logical Ns Oo Cm \&/ Ns Ar physical Oc
465Specify the logical and physical sector sizes of the emulated disk.
466The physical sector size is optional and is equal to the logical sector size
467if not explicitly specified.
468.It Cm nodelete
469Disable emulation of guest trim requests via
470.Dv DIOCGDELETE
471requests.
472.El
473.Pp
474.Sy 9P device backends :
475.Sm off
476.Bl -bullet
477.It
478.Ar sharename Cm = Ar /path/to/share Op Cm \&, Ar 9p-device-options
479.El
480.Sm on
481.Pp
482The
483.Ar 9p-device-options
484are:
485.Bl -tag -width 10n
486.It Cm ro
487Expose the share in read-only mode.
488.El
489.Pp
490.Sy TTY device backends :
491.Bl -tag -width 10n
492.It Cm stdio
493Connect the serial port to the standard input and output of
494the
495.Nm
496process.
497.It Pa /dev/xxx
498Use the host TTY device for serial port I/O.
499.El
500.Pp
501.Sy Boot ROM device backends :
502.Bl -tag -width 10n
503.It Pa romfile Ns Op Cm \&, Ns Ar varfile
504Map
505.Ar romfile
506in the guest address space reserved for boot firmware.
507If
508.Ar varfile
509is provided, that file is also mapped in the boot firmware guest
510address space, and any modifications the guest makes will be saved
511to that file.
512.El
513.Pp
514.Sy Pass-through device backends :
515.Bl -tag -width 10n
516.It Pa /dev/ppt Ns Ar N
517Connect to a PCI device on the host identified by the specified path.
518.It Cm rom= Ns Ar romfile
519Add
520.Ar romfile
521as option ROM to the PCI device.
522The ROM will be loaded by firmware and should be capable of initialising the
523device.
524.El
525.Pp
526Guest memory must be wired using the
527.Fl S
528option when a pass-through device is configured.
529.Pp
530The host device must have been previously attached to the
531.Sy ppt
532driver.
533.Pp
534.Sy Virtio console device backends :
535.Bl -bullet
536.Sm off
537.It
538.Cm port1= Ns Ar /path/to/port1.sock Ns
539.Op Cm ,port Ns Ar N Cm \&= Ns Ar /path/to/port2.sock No \~ Ar ...
540.Sm on
541.El
542.Pp
543A maximum of 16 ports per device can be created.
544Every port is named and corresponds to a UNIX domain socket created by
545.Nm .
546.Nm
547accepts at most one connection per port at a time.
548.Pp
549Limitations:
550.Bl -bullet
551.It
552Due to lack of destructors in
553.Nm ,
554sockets on the filesystem must be cleaned up manually after
555.Nm
556exits.
557.It
558There is no way to use the
559.Dq console port
560feature, nor the console port resize at present.
561.It
562Emergency write is advertised, but no-op at present.
563.El
564.Pp
565.Sy Framebuffer device backends :
566.Bl -bullet
567.Sm off
568.It
569.Op Cm rfb= Ar ip-and-port
570.Op Cm ,w= Ar width
571.Op Cm ,h= Ar height
572.Op Cm ,vga= Ar vgaconf
573.Op Cm ,wait
574.Op Cm ,password= Ar password
575.Sm on
576.El
577.Pp
578Configuration options are defined as follows:
579.Bl -tag -width 10n
580.It Cm rfb= Ns Ar ip-and-port Pq or Cm tcp= Ns Ar ip-and-port
581An IP address and a port VNC should listen on.
582There are two formats:
583.Pp
584.Bl -bullet -compact
585.It
586.Sm off
587.Op Ar IPv4 Cm \&:
588.Ar port
589.Sm on
590.It
591.Sm off
592.Cm \&[ Ar IPv6 Cm \&] Cm \&: Ar port
593.Sm on
594.El
595.Pp
596The default is to listen on localhost IPv4 address and default VNC port 5900.
597An IPv6 address must be enclosed in square brackets.
598.It Cm unix Ns = Ns Ar path
599The path to a UNIX socket which will be created and where
600.Nm
601will accept VNC connections.
602.It Cm w= Ns Ar width No and Cm h= Ns Ar height
603A display resolution, width and height, respectively.
604If not specified, a default resolution of 1024x768 pixels will be used.
605Minimal supported resolution is 640x480 pixels,
606and maximum is 1920x1200 pixels.
607.It Cm vga= Ns Ar vgaconf
608Possible values for this option are
609.Cm io
610(default),
611.Cm on
612, and
613.Cm off .
614PCI graphics cards have a dual personality in that they are
615standard PCI devices with BAR addressing, but may also
616implicitly decode legacy VGA I/O space
617.Pq Ad 0x3c0-3df
618and memory space
619.Pq 64KB at Ad 0xA0000 .
620The default
621.Cm io
622option should be used for guests that attempt to issue BIOS calls which result
623in I/O port queries, and fail to boot if I/O decode is disabled.
624.Pp
625The
626.Cm on
627option should be used along with the CSM BIOS capability in UEFI
628to boot traditional BIOS guests that require the legacy VGA I/O and
629memory regions to be available.
630.Pp
631The
632.Cm off
633option should be used for the UEFI guests that assume that
634VGA adapter is present if they detect the I/O ports.
635An example of such a guest is
636.Ox
637in UEFI mode.
638.It Cm wait
639Instruct
640.Nm
641to only boot upon the initiation of a VNC connection, simplifying the
642installation of operating systems that require immediate keyboard input.
643This can be removed for post-installation use.
644.It Cm password= Ns Ar password
645This type of authentication is known to be cryptographically weak and is not
646intended for use on untrusted networks.
647Many implementations will want to use stronger security, such as running
648the session over an encrypted channel provided by IPsec or SSH.
649.El
650.Pp
651.Sy xHCI USB device backends :
652.Bl -tag -width 10n
653.It Cm tablet
654A USB tablet device which provides precise cursor synchronization
655when using VNC.
656.El
657.Pp
658.Sy NVMe device backends :
659.Bl -bullet
660.Sm off
661.It
662.Ar devpath
663.Op Cm ,maxq= Ar #
664.Op Cm ,qsz= Ar #
665.Op Cm ,ioslots= Ar #
666.Op Cm ,sectsz= Ar #
667.Op Cm ,ser= Ar #
668.Op Cm ,eui64= Ar #
669.Op Cm ,dsm= Ar opt
670.Sm on
671.El
672.Pp
673Configuration options are defined as follows:
674.Bl -tag -width 10n
675.It Ar devpath
676Accepted device paths are:
677.Ar /dev/blockdev
678or
679.Ar /path/to/image
680or
681.Cm ram= Ns Ar size_in_MiB .
682.It Cm maxq
683Max number of queues.
684.It Cm qsz
685Max elements in each queue.
686.It Cm ioslots
687Max number of concurrent I/O requests.
688.It Cm sectsz
689Sector size (defaults to blockif sector size).
690.It Cm ser
691Serial number with maximum 20 characters.
692.It Cm eui64
693IEEE Extended Unique Identifier (8 byte value).
694.It Cm dsm
695DataSet Management support.
696Supported values are:
697.Cm auto , enable ,
698and
699.Cm disable .
700.El
701.Pp
702.Sy AHCI device backends :
703.Bl -bullet
704.It
705.Sm off
706.Op Oo Cm hd\&: | cd\&: Oc Ar path
707.Op Cm ,nmrr= Ar nmrr
708.Op Cm ,ser= Ar #
709.Op Cm ,rev= Ar #
710.Op Cm ,model= Ar #
711.Sm on
712.El
713.Pp
714Configuration options are defined as follows:
715.Bl -tag -width 10n
716.It Cm nmrr
717Nominal Media Rotation Rate, known as RPM.
718Value 1 will indicate device as Solid State Disk.
719Default value is 0, not report.
720.It Cm ser
721Serial Number with maximum 20 characters.
722.It Cm rev
723Revision Number with maximum 8 characters.
724.It Cm model
725Model Number with maximum 40 characters.
726.El
727.It Fl U Ar uuid
728Set the universally unique identifier
729.Pq UUID
730in the guest's System Management BIOS System Information structure.
731By default a UUID is generated from the host's hostname and
732.Ar vmname .
733.It Fl u
734RTC keeps UTC time.
735.It Fl W
736Force virtio PCI device emulations to use MSI interrupts instead of MSI-X
737interrupts.
738.It Fl w
739Ignore accesses to unimplemented Model Specific Registers (MSRs).
740This is intended for debug purposes.
741.It Fl x
742The guest's local APIC is configured in x2APIC mode.
743.It Fl Y
744Disable MPtable generation.
745.It Ar vmname
746Alphanumeric name of the guest.
747.El
748.Sh CONFIGURATION VARIABLES
749.Nm
750uses an internal tree of configuration variables to describe global and
751per-device settings.
752When
753.Nm
754starts,
755it parses command line options (including config files) in the order given
756on the command line.
757Each command line option sets one or more configuration variables.
758For example,
759the
760.Fl s
761option creates a new tree node for a PCI device and sets one or more variables
762under that node including the device model and device model-specific variables.
763Variables may be set multiple times during this parsing stage with the final
764value overriding previous values.
765.Pp
766Once all of the command line options have been processed,
767the configuration values are frozen.
768.Nm
769then uses the value of configuration values to initialize device models
770and global settings.
771.Pp
772More details on configuration variables can be found in
773.Xr bhyve_config 5 .
774.Sh SIGNAL HANDLING
775.Nm
776deals with the following signals:
777.Pp
778.Bl -tag -width SIGTERM -compact
779.It SIGTERM
780Trigger ACPI poweroff for a VM
781.El
782.Sh EXIT STATUS
783Exit status indicates how the VM was terminated:
784.Pp
785.Bl -tag -width indent -compact
786.It 0
787rebooted
788.It 1
789powered off
790.It 2
791halted
792.It 3
793triple fault
794.It 4
795exited due to an error
796.El
797.Sh EXAMPLES
798To run a virtual machine with 1GB of memory, two virtual CPUs, a virtio
799block device backed by the
800.Pa /my/image
801filesystem image, and a serial port for the console:
802.Bd -literal -offset indent
803bhyve -c 2 -s 0,hostbridge -s 1,lpc -s 2,virtio-blk,/my/image \e
804  -l com1,stdio -H -P -m 1G vm1
805.Ed
806.Pp
807Run a 24GB single-CPU virtual machine with three network ports.
808.Bd -literal -offset indent
809bhyve -s 0,hostbridge -s 1,lpc -s 2:0,virtio-net-viona,vmvnic0 \e
810  -s 2:1,virtio-net-viona,vmvnic1 -s 2:2,virtio-net-viona,vmvnic2 \e
811  -s 3,virtio-blk,/my/image -l com1,stdio \e
812  -H -P -m 24G bigvm
813.Ed
814.Pp
815Run an 8GB virtual machine with 2 quad core CPUs, 2 NVMe disks and one other
816disk attached as a Virtio block device, an AHCI ATAPI CD-ROM, a single viona
817network port, an i440fx hostbridge, and the console port connected to a socket.
818.Bd -literal -offset indent
819bhyve -c sockets=2,cores=4,threads=2 \e
820  -s 0,hostbridge,model=i440fx -s 1,lpc \e
821  -s 1:0,nvme,/dev/zvol/rdsk/tank/hdd0 \e
822  -s 1:1,nvme,/dev/zvol/rdsk/tank/hdd1 \e
823  -s 1:2,virtio-blk,/dev/zvol/rdsk/tank/hdd1 \e
824  -s 2:0,ahci,cd:/images/install.iso \e
825  -s 3,virtio-net-viona,vnic=vmvnic0 \e
826  -l com1,socket,/tmp/vm.com1,wait \e
827  -H -P -m 8G
828.Ed
829.Pp
830Run a UEFI virtual machine with a display resolution of 800 by 600 pixels
831that can be accessed via VNC at: 0.0.0.0:5900.
832.Bd -literal -offset indent
833bhyve -c 2 -m 4G -w -H \e
834  -s 0,hostbridge \e
835  -s 3,ahci-cd,/path/to/uefi-OS-install.iso \e
836  -s 4,nvme,/dev/zvol/rdsk/tank/hdd0 \e
837  -s 5,virtio-net-viona,vnic=vnmic0 \e
838  -s 29,fbuf,vga=off,rfb=0.0.0.0:5900,w=800,h=600,wait \e
839  -s 30,xhci,tablet \e
840  -s 31,lpc -l com1,stdio \e
841  -l bootrom,/usr/share/bhyve/firmware/BHYVE_UEFI.fd \e
842   uefivm
843.Ed
844.Pp
845Run a UEFI virtual machine with a VARS file to save EFI variables.
846Note that
847.Nm
848will write guest modifications to the given VARS file.
849Be sure to create a per-guest copy of the template VARS file from
850.Pa /usr/share/bhyve/firmware .
851.Bd -literal -offset indent
852bhyve -c 2 -m 4g -w -H \e
853  -s 0,hostbridge \e
854  -s 31,lpc -p com1,stdio \e
855  -l bootrom,/usr/share/bhyve/firmware/BHYVE_UEFI.fd,BHYVE_UEFI_VARS.fd \e
856   uefivm
857.Ed
858.Sh SEE ALSO
859.Xr bhyve_config 5 ,
860.Xr bhyvectl 8
861.Pp
862.Rs
863.%A Intel
864.%B 64 and IA-32 Architectures Software Developers' Manual
865.%V Volume 3
866.Re
867