xref: /freebsd/usr.sbin/bhyve/bhyve.8 (revision d9a42747950146bf03cda7f6e25d219253f8a57a)
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.\" $FreeBSD$
26.\"
27.Dd August 19, 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 AaCDeHhPSuWwxY
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.Sm on
55.Oc
56.Op Fl k Ar config_file
57.Op Fl K Ar layout
58.Oo Fl l
59.Sm off
60.Ar lpcdev Op Cm \&, Ar conf
61.Sm on
62.Oc
63.Sm off
64.Oo Fl m\~
65.Ar memsize
66.Oo
67.Cm K | Cm k | Cm M | Cm m | Cm G | Cm g | Cm T | Cm t
68.Oc
69.Sm on
70.Oc
71.Op Fl o Ar var Ns Cm = Ns Ar value
72.Op Fl p Ar vcpu Ns Cm \&: Ns Ar hostcpu
73.Op Fl r Ar file
74.Sm off
75.Oo Fl s\~
76.Ar slot Cm \&, Ar emulation Op Cm \&, Ar conf
77.Sm on
78.Oc
79.Op Fl U Ar uuid
80.Ar vmname
81.Nm
82.Fl l Cm help
83.Nm
84.Fl s Cm help
85.Sh DESCRIPTION
86.Nm
87is a hypervisor that runs guest operating systems inside a
88virtual machine.
89.Pp
90Parameters such as the number of virtual CPUs, amount of guest memory, and
91I/O connectivity can be specified with command-line parameters.
92.Pp
93If not using a boot ROM, the guest operating system must be loaded with
94.Xr bhyveload 8
95or a similar boot loader before running
96.Nm ,
97otherwise, it is enough to run
98.Nm
99with a boot ROM of choice.
100.Pp
101.Nm
102runs until the guest operating system reboots or an unhandled hypervisor
103exit is detected.
104.Sh OPTIONS
105.Bl -tag -width 10n
106.It Fl A
107Generate ACPI tables.
108Required for
109.Fx Ns /amd64
110guests.
111.It Fl a
112The guest's local APIC is configured in xAPIC mode.
113The xAPIC mode is the default setting so this option is redundant.
114It will be deprecated in a future version.
115.It Fl C
116Include guest memory in core file.
117.It Fl c Op Ar setting ...
118Number of guest virtual CPUs
119and/or the CPU topology.
120The default value for each of
121.Ar numcpus ,
122.Ar sockets ,
123.Ar cores ,
124and
125.Ar threads
126is 1.
127The current maximum number of guest virtual CPUs is 16.
128If
129.Ar numcpus
130is not specified then it will be calculated from the other arguments.
131The topology must be consistent in that the
132.Ar numcpus
133must equal the product of
134.Ar sockets ,
135.Ar cores ,
136and
137.Ar threads .
138If a
139.Ar setting
140is specified more than once the last one has precedence.
141.It Fl D
142Destroy the VM on guest initiated power-off.
143.It Fl e
144Force
145.Nm
146to exit when a guest issues an access to an I/O port that is not emulated.
147This is intended for debug purposes.
148.It Fl G Xo
149.Sm off
150.Oo Ar w Oc
151.Oo Ar bind_address Cm \&: Oc
152.Ar port
153.Sm on
154.Xc
155Start a debug server that uses the GDB protocol to export guest state to a
156debugger.
157An IPv4 TCP socket will be bound to the supplied
158.Ar bind_address
159and
160.Ar port
161to listen for debugger connections.
162Only a single debugger may be attached to the debug server at a time.
163If the option begins with
164.Sq w ,
165.Nm
166will pause execution at the first instruction waiting for a debugger to attach.
167.It Fl H
168Yield the virtual CPU thread when a HLT instruction is detected.
169If this option is not specified, virtual CPUs will use 100% of a host CPU.
170.It Fl h
171Print help message and exit.
172.It Fl k Ar config_file
173Set configuration variables from a simple, key-value config file.
174Each line of the config file is expected to consist of a config variable
175name, an equals sign
176.It Fl K Ar layout
177Specify the keyboard layout.
178The value that can be specified sets the file name in
179.Ar /usr/share/bhyve/kbdlayout .
180This specification only works when loaded with UEFI mode for VNC.
181When using a VNC client that supports QEMU Extended Key Event Message (e.g. TigerVNC), this option isn't needed.
182When using a VNC client that doesn't support QEMU Extended Key Event Message (e.g. tightVNC), the layout defaults to the US keyboard unless specified otherwise.
183.Pq Sq = ,
184and a value.
185No spaces are permitted between the variable name, equals sign, or
186value.
187Blank lines and lines starting with
188.Sq #
189are ignored.
190See
191.Xr bhyve_config 5
192for more details.
193.It Fl l Cm help
194Print a list of supported LPC devices.
195.It Fl l Ar lpcdev Ns Op Cm \&, Ns Ar conf
196Allow devices behind the LPC PCI-ISA bridge to be configured.
197The only supported devices are the TTY-class devices
198.Cm com1 , com2 , com3 ,
199and
200.Cm com4 ,
201the boot ROM device
202.Cm bootrom ,
203the
204.Cm fwcfg
205type and the debug/test device
206.Cm pc-testdev .
207.Pp
208The possible values for the
209.Ar conf
210argument are listed in the
211.Fl s
212flag description.
213.It Xo
214.Fl m Ar memsize Ns Oo
215.Sm off
216.Cm K | k | M | m | G | g | T | t
217.Sm on
218.Oc
219.Xc
220Set the guest physical memory size
221This must be the same size that was given to
222.Xr bhyveload 8 .
223.Pp
224The size argument may be suffixed with one of
225.Cm K , M , G
226or
227.Cm T
228(either upper or lower case)
229to indicate a multiple of kilobytes, megabytes, gigabytes, or terabytes.
230If no suffix is given, the value is assumed to be in megabytes.
231.Pp
232The default is 256M.
233.It Fl o Ar var Ns Cm = Ns Ar value
234Set the configuration variable
235.Ar var
236to
237.Ar value .
238.It Fl P
239Force the guest virtual CPU to exit when a PAUSE instruction is detected.
240.It Fl p Ar vcpu Ns Cm \& : Ns Ar hostcpu
241Pin guest's virtual CPU
242.Em vcpu
243to
244.Em hostcpu .
245.It Fl r Ar file
246Resume a guest from a snapshot.
247The guest memory contents are restored from
248.Ar file ,
249and the guest device and vCPU state are restored from the file
250.Dq Ar file Ns .kern .
251.Pp
252Note that the current snapshot file format requires that the configuration of
253devices in the new VM match the VM from which the snapshot was taken by specifying the
254same
255.Fl s
256and
257.Fl l
258options.
259The count of vCPUs and memory configuration are read from the snapshot.
260.It Fl S
261Wire guest memory.
262.It Fl s Cm help
263Print a list of supported PCI devices.
264.It Fl s Ar slot Ns Cm \&, Ns Ar emulation Ns Op Cm \&, Ns Ar conf
265Configure a virtual PCI slot and function.
266.Pp
267.Nm
268provides PCI bus emulation and virtual devices that can be attached to
269slots on the bus.
270There are 32 available slots, with the option of providing up to 8 functions
271per slot.
272.Pp
273The
274.Ar slot
275can be specified in one of the following formats:
276.Pp
277.Bl -bullet -compact
278.It
279.Ar pcislot
280.It
281.Sm off
282.Ar pcislot Cm \&: Ar function
283.Sm on
284.It
285.Sm off
286.Ar bus Cm \&: Ar pcislot Cm \&: Ar function
287.Sm on
288.El
289.Pp
290The
291.Ar pcislot
292value is 0 to 31.
293The optional
294.Ar function
295value is 0 to 7.
296The optional
297.Ar bus
298value is 0 to 255.
299If not specified, the
300.Ar function
301value defaults to 0.
302If not specified, the
303.Ar bus
304value defaults to 0.
305.Pp
306The
307.Ar emulation
308argument
309can be one of the following:
310.Bl -tag -width "amd_hostbridge"
311.It Cm hostbridge
312A simple host bridge.
313This is usually configured at slot 0, and is required by most guest
314operating systems.
315.It Cm amd_hostbridge
316Emulation identical to
317.Cm hostbridge
318using a PCI vendor ID of AMD.
319.It Cm passthru
320PCI pass-through device.
321.It Cm virtio-net
322Virtio network interface.
323.It Cm virtio-blk
324Virtio block storage interface.
325.It Cm virtio-scsi
326Virtio SCSI interface.
327.It Cm virtio-9p
328Virtio 9p (VirtFS) interface.
329.It Cm virtio-rnd
330Virtio RNG interface.
331.It Cm virtio-console
332Virtio console interface, which exposes multiple ports
333to the guest in the form of simple char devices for simple IO
334between the guest and host userspaces.
335.It Cm virtio-input
336Virtio input interface.
337.It Cm ahci
338AHCI controller attached to arbitrary devices.
339.It Cm ahci-cd
340AHCI controller attached to an ATAPI CD/DVD.
341.It Cm ahci-hd
342AHCI controller attached to a SATA hard drive.
343.It Cm e1000
344Intel e82545 network interface.
345.It Cm uart
346PCI 16550 serial device.
347.It Cm lpc
348LPC PCI-ISA bridge with COM1, COM2, COM3, and COM4 16550 serial ports,
349a boot ROM, and,
350optionally, a fwcfg type and the debug/test device.
351The LPC bridge emulation can only be configured on bus 0.
352.It Cm fbuf
353Raw framebuffer device attached to VNC server.
354.It Cm xhci
355eXtensible Host Controller Interface (xHCI) USB controller.
356.It Cm nvme
357NVM Express (NVMe) controller.
358.It Cm hda
359High Definition Audio Controller.
360.El
361.Pp
362The optional parameter
363.Ar conf
364describes the backend for device emulations.
365If
366.Ar conf
367is not specified, the device emulation has no backend and can be
368considered unconnected.
369.Pp
370Network device backends:
371.Sm off
372.Bl -bullet
373.It
374.Xo
375.Cm tap Ar N
376.Op Cm \&,mac= Ar xx:xx:xx:xx:xx:xx
377.Op Cm \&,mtu= Ar N
378.Xc
379.It
380.Xo
381.Cm vmnet Ar N
382.Op Cm \&,mac= Ar xx:xx:xx:xx:xx:xx
383.Op Cm \&,mtu= Ar N
384.Xc
385.It
386.Xo
387.Cm netgraph,path= Ar ADDRESS Cm \&,peerhook= Ar HOOK
388.Op Cm \&,socket= Ar NAME
389.Op Cm \&,hook= Ar HOOK
390.Op Cm \&,mac= Ar xx:xx:xx:xx:xx:xx
391.Op Cm \&,mtu= Ar N
392.Xc
393.El
394.Sm on
395.Pp
396If
397.Cm mac
398is not specified, the MAC address is derived from a fixed OUI and the
399remaining bytes from an MD5 hash of the slot and function numbers and
400the device name.
401.Pp
402The MAC address is an ASCII string in
403.Xr ethers 5
404format.
405.Pp
406With
407.Cm virtio-net
408devices, the
409.Cm mtu
410parameter can be specified to inform the guest about the largest MTU
411that should be allowed, expressed in bytes.
412.Pp
413With
414.Cm netgraph
415backend, the
416.Cm path
417and
418.Cm peerhook
419parameters must be specified to set the destination node and corresponding hook.
420The optional parameters
421.Cm socket
422and
423.Cm hook
424may be used to set the
425.Xr ng_socket 4
426node name and source hook.
427The
428.Ar ADDRESS ,
429.Ar HOOK ,
430and
431.Ar NAME
432must comply with
433.Xr netgraph 4
434addressing rules.
435.Pp
436Block storage device backends:
437.Sm off
438.Bl -bullet
439.It
440.Ar /filename Op Cm \&, Ar block-device-options
441.It
442.Ar /dev/xxx Op Cm \&, Ar block-device-options
443.El
444.Sm on
445.Pp
446The
447.Ar block-device-options
448are:
449.Bl -tag -width 10n
450.It Cm nocache
451Open the file with
452.Dv O_DIRECT .
453.It Cm direct
454Open the file using
455.Dv O_SYNC .
456.It Cm ro
457Force the file to be opened read-only.
458.It Cm sectorsize= Ns Ar logical Ns Oo Cm \&/ Ns Ar physical Oc
459Specify the logical and physical sector sizes of the emulated disk.
460The physical sector size is optional and is equal to the logical sector size
461if not explicitly specified.
462.It Cm nodelete
463Disable emulation of guest trim requests via
464.Dv DIOCGDELETE
465requests.
466.El
467.Pp
468SCSI device backends:
469.Sm off
470.Bl -bullet
471.It
472.Pa /dev/cam/ctl Oo Ar pp Cm \&. Ar vp Oc Oo Cm \&, Ar scsi-device-options Oc
473.El
474.Sm on
475.Pp
476The
477.Ar scsi-device-options
478are:
479.Bl -tag -width 10n
480.It Cm iid= Ns Ar IID
481Initiator ID to use when sending requests to specified CTL port.
482The default value is 0.
483.El
484.Pp
4859P device backends:
486.Sm off
487.Bl -bullet
488.It
489.Ar sharename Cm = Ar /path/to/share Op Cm \&, Ar 9p-device-options
490.El
491.Sm on
492.Pp
493The
494.Ar 9p-device-options
495are:
496.Bl -tag -width 10n
497.It Cm ro
498Expose the share in read-only mode.
499.El
500.Pp
501TTY device backends:
502.Bl -tag -width 10n
503.It Cm stdio
504Connect the serial port to the standard input and output of
505the
506.Nm
507process.
508.It Ar /dev/xxx
509Use the host TTY device for serial port I/O.
510.El
511.Pp
512Boot ROM device backends:
513.Bl -tag -width 10n
514.It Ar romfile Ns Op Cm \&, Ns Ar varfile
515Map
516.Ar romfile
517in the guest address space reserved for boot firmware.
518If
519.Ar varfile
520is provided, that file is also mapped in the boot firmware guest
521address space, and any modifications the guest makes will be saved
522to that file.
523.El
524.Pp
525Fwcfg types:
526.Bl -tag -width 10n
527.It Ar fwcfg
528The fwcfg interface is used to pass information such as the CPU count or ACPI tables to the guest firmware.
529Supported values are
530.Ql bhyve
531and
532.Ql qemu .
533Due to backward compatibility reasons,
534.Ql bhyve
535is the default option.
536When
537.Ql bhyve
538is used, bhyve's fwctl interface is used.
539It currently reports only the CPU count to the guest firmware.
540The
541.Ql qemu
542option uses QEMU's fwcfg interface.
543This interface is widely used and allows user-defined information to be passed to the guest.
544It is used for passing the CPU count, ACPI tables, a boot order and many other things to the guest.
545Some operating systems such as Fedora CoreOS can be configured by qemu's fwcfg interface as well.
546.El
547.Pp
548Pass-through device backends:
549.Sm off
550.Bl -bullet
551.It
552.Cm ppt Ar N Oo , Ar passthru-device-options Oc
553.It
554.Ns Ar bus Cm \&/ Ar slot Cm \&/ Ar function
555.Op , Ar passthru-device-options
556.It
557.Cm pci Ar bus Cm : Ar slot Cm : Ns Ar function
558.Op , Ar passthru-device-options
559.El
560.Sm on
561.Pp
562Connect to a PCI device on the host either named ppt
563.Ns Ar N
564or at the selector described by
565.Ar slot ,
566.Ar bus ,
567and
568.Ar function
569numbers.
570.Pp
571The
572.Ar passthru-device-options
573are:
574.Bl -tag -width 10n
575.It Cm rom= Ns Ar romfile
576Add
577.Ar romfile
578as option ROM to the PCI device.
579The ROM will be loaded by firmware and should be capable of initializing the device.
580.El
581.Pp
582Guest memory must be wired using the
583.Fl S
584option when a pass-through device is configured.
585.Pp
586The host device must have been reserved at boot-time using the
587.Va pptdevs
588loader variable as described in
589.Xr vmm 4 .
590.Pp
591Virtio console device backends:
592.Bl -bullet
593.Sm off
594.It
595.Cm port1= Ns Ar /path/to/port1.sock Ns Op Cm ,port Ns Ar N Cm \&= Ns Ar /path/to/port2.sock No \~ Ar ...
596.Sm on
597.El
598.Pp
599A maximum of 16 ports per device can be created.
600Every port is named and corresponds to a Unix domain socket created by
601.Nm .
602.Nm
603accepts at most one connection per port at a time.
604.Pp
605Limitations:
606.Bl -bullet
607.It
608Due to lack of destructors in
609.Nm ,
610sockets on the filesystem must be cleaned up manually after
611.Nm
612exits.
613.It
614There is no way to use the
615.Dq console port
616feature, nor the console port
617resize at present.
618.It
619Emergency write is advertised, but no-op at present.
620.El
621.Pp
622Virtio input device backends:
623.Bl -tag -width 10n
624.It Ar /dev/input/eventX
625Send input events of
626.Ar /dev/input/eventX
627to guest by VirtIO Input Interface.
628.El
629.Pp
630Framebuffer devices backends:
631.Bl -bullet
632.Sm off
633.It
634.Op Cm rfb= Ar ip-and-port
635.Op Cm ,w= Ar width
636.Op Cm ,h= Ar height
637.Op Cm ,vga= Ar vgaconf
638.Op Cm ,wait
639.Op Cm ,password= Ar password
640.Sm on
641.El
642.Pp
643Configuration options are defined as follows:
644.Bl -tag -width 10n
645.It Cm rfb= Ns Ar ip-and-port Pq or Cm tcp= Ns Ar ip-and-port
646An IP address and a port VNC should listen on.
647There are two formats:
648.Pp
649.Bl -bullet -compact
650.It
651.Sm off
652.Op Ar IPv4 Cm \&:
653.Ar port
654.Sm on
655.It
656.Sm off
657.Cm \&[ Ar IPv6%zone Cm \&] Cm \&: Ar port
658.Sm on
659.El
660.Pp
661The default is to listen on localhost IPv4 address and default VNC port 5900.
662An IPv6 address must be enclosed in square brackets and may contain an
663optional zone identifier.
664.It Cm w= Ns Ar width No and Cm h= Ns Ar height
665A display resolution, width and height, respectively.
666If not specified, a default resolution of 1024x768 pixels will be used.
667Minimal supported resolution is 640x480 pixels,
668and maximum is 1920x1200 pixels.
669.It Cm vga= Ns Ar vgaconf
670Possible values for this option are
671.Cm io
672(default),
673.Cm on
674, and
675.Cm off .
676PCI graphics cards have a dual personality in that they are
677standard PCI devices with BAR addressing, but may also
678implicitly decode legacy VGA I/O space
679.Pq Ad 0x3c0-3df
680and memory space
681.Pq 64KB at Ad 0xA0000 .
682The default
683.Cm io
684option should be used for guests that attempt to issue BIOS calls which result
685in I/O port queries, and fail to boot if I/O decode is disabled.
686.Pp
687The
688.Cm on
689option should be used along with the CSM BIOS capability in UEFI
690to boot traditional BIOS guests that require the legacy VGA I/O and
691memory regions to be available.
692.Pp
693The
694.Cm off
695option should be used for the UEFI guests that assume that
696VGA adapter is present if they detect the I/O ports.
697An example of such a guest is
698.Ox
699in UEFI mode.
700.Pp
701Please refer to the
702.Nm
703.Fx
704wiki page
705.Pq Lk https://wiki.freebsd.org/bhyve
706for configuration notes of particular guests.
707.It Cm wait
708Instruct
709.Nm
710to only boot upon the initiation of a VNC connection, simplifying the
711installation of operating systems that require immediate keyboard input.
712This can be removed for post-installation use.
713.It Cm password= Ns Ar password
714This type of authentication is known to be cryptographically weak and is not
715intended for use on untrusted networks.
716Many implementations will want to use stronger security, such as running
717the session over an encrypted channel provided by IPsec or SSH.
718.El
719.Pp
720xHCI USB device backends:
721.Bl -tag -width 10n
722.It Cm tablet
723A USB tablet device which provides precise cursor synchronization
724when using VNC.
725.El
726.Pp
727NVMe device backends:
728.Bl -bullet
729.Sm off
730.It
731.Ar devpath
732.Op Cm ,maxq= Ar #
733.Op Cm ,qsz= Ar #
734.Op Cm ,ioslots= Ar #
735.Op Cm ,sectsz= Ar #
736.Op Cm ,ser= Ar #
737.Op Cm ,eui64= Ar #
738.Op Cm ,dsm= Ar opt
739.Sm on
740.El
741.Pp
742Configuration options are defined as follows:
743.Bl -tag -width 10n
744.It Ar devpath
745Accepted device paths are:
746.Ar /dev/blockdev
747or
748.Ar /path/to/image
749or
750.Cm ram= Ns Ar size_in_MiB .
751.It Cm maxq
752Max number of queues.
753.It Cm qsz
754Max elements in each queue.
755.It Cm ioslots
756Max number of concurrent I/O requests.
757.It Cm sectsz
758Sector size (defaults to blockif sector size).
759.It Cm ser
760Serial number with maximum 20 characters.
761.It Cm eui64
762IEEE Extended Unique Identifier (8 byte value).
763.It Cm dsm
764DataSet Management support.
765Supported values are:
766.Cm auto , enable ,
767and
768.Cm disable .
769.El
770.Pp
771AHCI device backends:
772.Bl -bullet
773.It
774.Sm off
775.Op Oo Cm hd\&: | cd\&: Oc Ar path
776.Op Cm ,nmrr= Ar nmrr
777.Op Cm ,ser= Ar #
778.Op Cm ,rev= Ar #
779.Op Cm ,model= Ar #
780.Sm on
781.El
782.Pp
783Configuration options are defined as follows:
784.Bl -tag -width 10n
785.It Cm nmrr
786Nominal Media Rotation Rate, known as RPM.
787Value 1 will indicate device as Solid State Disk.
788Default value is 0, not report.
789.It Cm ser
790Serial Number with maximum 20 characters.
791.It Cm rev
792Revision Number with maximum 8 characters.
793.It Cm model
794Model Number with maximum 40 characters.
795.El
796.Pp
797HD Audio device backends:
798.Bl -bullet
799.It
800.Sm off
801.Op Cm play= Ar playback
802.Op Cm ,rec= Ar recording
803.Sm on
804.El
805.Pp
806Configuration options are defined as follows:
807.Bl -tag -width 10n
808.It Cm play
809Playback device, typically
810.Ar /dev/dsp0 .
811.It Cm rec
812Recording device, typically
813.Ar /dev/dsp0 .
814.El
815.It Fl U Ar uuid
816Set the universally unique identifier
817.Pq UUID
818in the guest's System Management BIOS System Information structure.
819By default a UUID is generated from the host's hostname and
820.Ar vmname .
821.It Fl u
822RTC keeps UTC time.
823.It Fl W
824Force virtio PCI device emulations to use MSI interrupts instead of MSI-X
825interrupts.
826.It Fl w
827Ignore accesses to unimplemented Model Specific Registers (MSRs).
828This is intended for debug purposes.
829.It Fl x
830The guest's local APIC is configured in x2APIC mode.
831.It Fl Y
832Disable MPtable generation.
833.It Ar vmname
834Alphanumeric name of the guest.
835This should be the same as that created by
836.Xr bhyveload 8 .
837.El
838.Sh CONFIGURATION VARIABLES
839.Nm
840uses an internal tree of configuration variables to describe global and
841per-device settings.
842When
843.Nm
844starts,
845it parses command line options (including config files) in the order given
846on the command line.
847Each command line option sets one or more configuration variables.
848For example,
849the
850.Fl s
851option creates a new tree node for a PCI device and sets one or more variables
852under that node including the device model and device model-specific variables.
853Variables may be set multiple times during this parsing stage with the final
854value overriding previous values.
855.Pp
856Once all of the command line options have been processed,
857the configuration values are frozen.
858.Nm
859then uses the value of configuration values to initialize device models
860and global settings.
861.Pp
862More details on configuration variables can be found in
863.Xr bhyve_config 5 .
864.Sh DEBUG SERVER
865The current debug server provides limited support for debuggers.
866.Ss Registers
867Each virtual CPU is exposed to the debugger as a thread.
868.Pp
869General purpose registers can be queried for each virtual CPU, but other
870registers such as floating-point and system registers cannot be queried.
871.Ss Memory
872Memory (including memory mapped I/O regions) can be read and written by the debugger.
873Memory operations use virtual addresses that are resolved to physical addresses
874via the current virtual CPU's active address translation.
875.Ss Control
876The running guest can be interrupted by the debugger at any time
877.Pq for example, by pressing Ctrl-C in the debugger .
878.Pp
879Single stepping is only supported on Intel CPUs supporting the MTRAP VM exit.
880.Pp
881Breakpoints are supported on Intel CPUs that support single stepping.
882Note that continuing from a breakpoint while interrupts are enabled in the
883guest may not work as expected due to timer interrupts firing while single
884stepping over the breakpoint.
885.Sh SIGNAL HANDLING
886.Nm
887deals with the following signals:
888.Pp
889.Bl -tag -width SIGTERM -compact
890.It SIGTERM
891Trigger ACPI poweroff for a VM
892.El
893.Sh EXIT STATUS
894Exit status indicates how the VM was terminated:
895.Pp
896.Bl -tag -width indent -compact
897.It 0
898rebooted
899.It 1
900powered off
901.It 2
902halted
903.It 3
904triple fault
905.It 4
906exited due to an error
907.El
908.Sh EXAMPLES
909If not using a boot ROM, the guest operating system must have been loaded with
910.Xr bhyveload 8
911or a similar boot loader before
912.Xr bhyve 4
913can be run.
914Otherwise, the boot loader is not needed.
915.Pp
916To run a virtual machine with 1GB of memory, two virtual CPUs, a virtio
917block device backed by the
918.Pa /my/image
919filesystem image, and a serial port for the console:
920.Bd -literal -offset indent
921bhyve -c 2 -s 0,hostbridge -s 1,lpc -s 2,virtio-blk,/my/image \\
922  -l com1,stdio -A -H -P -m 1G vm1
923.Ed
924.Pp
925Run a 24GB single-CPU virtual machine with three network ports, one of which
926has a MAC address specified:
927.Bd -literal -offset indent
928bhyve -s 0,hostbridge -s 1,lpc -s 2:0,virtio-net,tap0 \\
929  -s 2:1,virtio-net,tap1 \\
930  -s 2:2,virtio-net,tap2,mac=00:be:fa:76:45:00 \\
931  -s 3,virtio-blk,/my/image -l com1,stdio \\
932  -A -H -P -m 24G bigvm
933.Ed
934.Pp
935Run an 8GB quad-CPU virtual machine with 8 AHCI SATA disks, an AHCI ATAPI
936CD-ROM, a single virtio network port, an AMD hostbridge, and the console
937port connected to an
938.Xr nmdm 4
939null-modem device.
940.Bd -literal -offset indent
941bhyve -c 4 \\
942  -s 0,amd_hostbridge -s 1,lpc \\
943  -s 1:0,ahci,hd:/images/disk.1,hd:/images/disk.2,\\
944hd:/images/disk.3,hd:/images/disk.4,\\
945hd:/images/disk.5,hd:/images/disk.6,\\
946hd:/images/disk.7,hd:/images/disk.8,\\
947cd:/images/install.iso \\
948  -s 3,virtio-net,tap0 \\
949  -l com1,/dev/nmdm0A \\
950  -A -H -P -m 8G
951.Ed
952.Pp
953Run a UEFI virtual machine with a display resolution of 800 by 600 pixels
954that can be accessed via VNC at: 0.0.0.0:5900.
955.Bd -literal -offset indent
956bhyve -c 2 -m 4G -w -H \\
957  -s 0,hostbridge \\
958  -s 3,ahci-cd,/path/to/uefi-OS-install.iso \\
959  -s 4,ahci-hd,disk.img \\
960  -s 5,virtio-net,tap0 \\
961  -s 29,fbuf,tcp=0.0.0.0:5900,w=800,h=600,wait \\
962  -s 30,xhci,tablet \\
963  -s 31,lpc -l com1,stdio \\
964  -l bootrom,/usr/local/share/uefi-firmware/BHYVE_UEFI.fd \\
965   uefivm
966.Ed
967.Pp
968Run a UEFI virtual machine with a VNC display that is bound to all IPv6
969addresses on port 5900.
970.Bd -literal -offset indent
971bhyve -c 2 -m 4G -w -H \\
972  -s 0,hostbridge \\
973  -s 4,ahci-hd,disk.img \\
974  -s 5,virtio-net,tap0 \\
975  -s 29,fbuf,tcp=[::]:5900,w=800,h=600 \\
976  -s 30,xhci,tablet \\
977  -s 31,lpc -l com1,stdio \\
978  -l bootrom,/usr/local/share/uefi-firmware/BHYVE_UEFI.fd \\
979   uefivm
980.Ed
981.Pp
982Run a UEFI virtual machine with a VARS file to save EFI variables.
983Note that
984.Nm
985will write guest modifications to the given VARS file.
986Be sure to create a per-guest copy of the template VARS file from
987.Pa /usr .
988.Bd -literal -offset indent
989bhyve -c 2 -m 4g -w -H \\
990  -s 0,hostbridge \\
991  -s 31,lpc -p com1,stdio \\
992  -l bootrom,/usr/local/share/uefi-firmware/BHYVE_UEFI_CODE.fd,BHYVE_UEFI_VARS.fd
993   uefivm
994.Ed
995.Sh SEE ALSO
996.Xr bhyve 4 ,
997.Xr netgraph 4 ,
998.Xr ng_socket 4 ,
999.Xr nmdm 4 ,
1000.Xr vmm 4 ,
1001.Xr bhyve_config 5 ,
1002.Xr ethers 5 ,
1003.Xr bhyvectl 8 ,
1004.Xr bhyveload 8
1005.Pp
1006.Rs
1007.%A Intel
1008.%B 64 and IA-32 Architectures Software Developer’s Manual
1009.%V Volume 3
1010.Re
1011.Sh HISTORY
1012.Nm
1013first appeared in
1014.Fx 10.0 .
1015.Sh AUTHORS
1016.An Neel Natu Aq Mt neel@freebsd.org
1017.An Peter Grehan Aq Mt grehan@freebsd.org
1018