You can set configuration variables that affect qvm process
instance, guest, CPU, and vdev behavior.
Configuration variables are specified using the
set option,
as follows:
set var val
Depending on the variable, its setting can apply to one of the implicit contexts
listed above. For more information about the syntax for setting variables and
about the implicit contexts to which they can apply, see the
set option reference. Here, we describe all supported
variables for each platform.
Note:
Unless otherwise indicated, each variable can be defined anywhere in the VM
configuration file.
Common variables
The following variables are supported on both ARM and x86 platforms:
- exit-on-halt
-
- Context: guest – applies to the current context only
- Variable type: boolean
- Default: on (guest exits on WFI or HLT instruction)
- Control if a WFI (on ARM) or HLT (on x86) instruction causes a guest exit.
Setting exit-on-halt to off increases
physical CPU usage by vCPU threads but reduces interrupt latency.
When the guest is allowed to execute WFI or HLT instructions, the host
can't schedule any other thread on the physical CPUs used by the guest
while it's executing those instructions.
- fdt-dump-file
-
- Context: guest – applies to the current context only
- Variable type: string
- Default: none
- Instruct the qvm process instance to write the VM's
FDT to the specified file. You can then examine the FDT to better understand
any customizations you may need to make to the FDT (see FDTs (ARM) in the
Configuration chapter).
If you set this variable and use the dryrun option, you can
get the guest's FDT without starting the guest. For example, starting a
qvm process instance as follows:
qvm @mainline-guest.qvmconf set fdt-dump-file /tmp/fdt.dtb dryrun
would cause the process instance to write the guest's FDT to
/tmp/fdt.dtb, then exit with a message like the following:
FDT saved to '/tmp/fdt.dtb'
Exiting: dryrun completed
Note that the dryrun option causes the
qvm process instance to exit before starting the
guest (see dryrun in this chapter).
- grow-heap
-
- Context: global – applies to the entire qvm
process instance
- Variable type: address
- Default: don't grow the heap
Grow the heap by the amount specified by val. For
example:
set grow-heap 0x4000
will increase the heap by 16384 bytes.
- message-block-timeout
-
- Context: global – applies to the entire qvm
process instance
- Variable type: number
- Default: 10000 milliseconds (10 seconds)
Set the maximum allowed time, in milliseconds, that a message from the
qvm process may be blocked before the service
sends an unblock pulse to the receiving server. For example:
set message-block-timeout 200
configures the qvm process to send an unblock pulse to
any server that doesn't respond to a message within 200
milliseconds.
- The set
message-block-timeout variable must be a value from 5
through 10000, or 0 (zero). A 0 makes the timeout infinite (never time
out).
- Depending on the server's response (or non-response), the
qvm service may terminate with an error. You can use
server-monitor to handle situations where a server
doesn't respond to an unblock pulse (see server-monitor in
the QNX Neutrino Utilities Reference).
- slog-buffer
-
- Context: global – applies to the entire qvm
process instance
- Variable type: address
- Default: 4K
- If entries to the slog require more space than is allocated for the slog
buffer, older entries are dropped to make room for new entries. Use the
slog-buffer variable to change the buffer size from the
default 4K; for example: set slog-buffer 8K.
Note that:
- The buffer size must be a multiple of 4K (e.g., 8K, 12K).
- This option must be specifed before the logger option in the
VM configuration.
- vdev-message-block-timeout
-
- Context: vdev – applies to the vdev currently being
configured
- Variable type: number
- Default: value specified by
message-block-timeout
- The vdev-message-block-timeout variable behaves exactly
like the message-block-timeout variable, but applies
only to the vdev currently being configured.
This means that the variable must be set within a context beginning with a
vdev option; for example:
vdev lithium-ion-battery
vdev-message-block-timeout 5
If vdev-message-block-timeout isn't used in a
vdev's configuration, the value specifed by
message-block-timeout is assumed.
ARM variables
The following variables are supported on ARM platforms only:
- gic-hwassist
-
- Context: global – applies to the entire qvm
process instance
- Variable type: boolean
- Default: true
- If gic-hwassist is set to true (default), the
qvm process instance will try to use the GIC hardware
assistance support. If this variable is set to false, the
qvm process instance won't try to use this support.
- host-paddr-gicd
-
- Context: global – applies to the entire qvm
process instance
- Variable type: address
- Default: the gicd entry in the system page
asinfo section
- Set the host-physical address of the GIC distributor registers.
- host-paddr-gich
-
- Context: global – applies to the entire qvm
process instance
- Variable type: string
- Default: the gich[.cpunum] entry
in the host's system page asinfo section
Set the host-physical addresses of the GIC hypervisor control registers.
The string should be formed as follows:
host_address[/cpu/spacing]{,host_address[/cpu/spacing]}
The string components are:
- host_address
- The host-physical address of the current physical CPU's GICH
registers.
- cpu
- If present, the number of the physical CPU whose registers are
located at the address specified by
host_address.
- spacing
- If present, the number of bytes to increase the offset to get
the address of each subsequent physical CPU's registers.
- host-paddr-gicr
-
- Context: global – applies to the entire qvm
process instance
- Variable type: address
- Default: the gicr entry in the host's system page
asinfo section
- Set the host-physical address of the GIC re-distributor registers.
- host-paddr-gicv
-
- Context: global – applies to the entire qvm
process instance
- Variable type: address
- Default: the gicv entry in the host's system page
asinfo section
- Set the host-physical address of the GIC virtual CPU interface
registers.
- host-ppi-gic-hwassist
-
- Context: global – applies to the entire qvm
process instance
- Variable type: number
- Default: 25
- Set the host interrupt number for the GIC hardware assist maintenance
interrupt.
- host-ppi-hcnt
-
- Context: global – applies to the entire qvm
process instance
- Variable type: number
- Default: 26
- Set the host interrupt number for the hypervisor counter interrupt.
- host-ppi-vcnt
-
- Context: global – applies to the entire qvm
process instance
- Variable type: number
- Default: 27
- Set the host interrupt number for the virtual counter hardware.
- trace-psci
-
- Context: global – applies to the entire qvm
process instance
- Variable type: boolean
- Default: false
- Some optimizations to the guest exit mechanisms will cause some guest PSCI
requests to not appear in a host trace log. Setting
trace-psci to true disables the optimizations,
allowing the omitted guest PSCI requests to appear in the host trace
log.
- trace-spectre-workaround
-
- Context: global – applies to the entire qvm
process instance
- Variable type: boolean
- Default: false
- Some optimizations to the guest exit mechanisms will cause some guest
spectre errata workaround requests to not appear in a host trace log.
Setting trace-spectre-workaround to true disables
the optimizations, allowing the omitted guest trace-spectre-workaround
requests to appear in the host trace log.
- trace-vtimer
-
- Context: global – applies to the entire qvm
process instance
- Variable type: boolean
- Default: false
- Some optimizations to the guest exit mechanisms will cause some guest
virtual timer interrupt deliveries to not appear in a host trace log.
Setting trace-vtimer to true disables the
optimizations, allowing the omitted guest virtual timer interrupt deliveries
to appear in the host trace log.
- trace-wfe
-
- Context: global – applies to the entire qvm
process instance
- Variable type: boolean
- Default: off
- Some optimizations to the guest exit mechanisms will cause some guest
executions of a WFE instruction to not appear in a host trace log. Setting
trace-wfe to true disables the optimizations,
allowing the omitted guest executions of a WFE instruction to appear in the
host trace log.
- vmid
-
Note: This variable is supported in QNX Hypervisor for Safety 2.2.7 or
later.
- Context: guest – applies to the current context only
- Variable type: number
- Default: auto-generated value
- Set the VMID for the guest. The value can't be 0. If this variable isn't
set, the hypervisor generates a VMID. A vdev can retrieve the value via
qvm_guest_vmid().
x86 variables
The following variables are supported on x86 platforms only:
- legacy-free
-
- Context: guest – applies to the current context only
- Variable type: boolean
- Default: off – don't permit arbitrary memory layout (i.e.,
require ACPI tables, etc.)
- The legacy-free variable
can be used to assemble a VM that hosts an x86 guest with an arbitrary
memory layout. Most notably, with legacy-free set to
on, the VM can be assembled for a guest that doesn't require
memory in the BIOS area (where the ACPI and SMBIOS tables are stored).
- If you use the legacy-free
variable, you should also use the suppress variable to
suppress generation of the ACPI system information table for the x86 guest
(see suppress in this chapter).
- posted-interrupts
-
- Context: guest – applies to the current context only
- Variable type: boolean
- Default: on
- If posted-interrupts is set to on (default), the
qvm process instance will try to use the hardware's
posted interrupt support, if such support is available. If this variable is
set to off, the qvm process instance won't try to
use the hardware's posted interrupt support.
- virtual-interrupts
-
- Context: guest – applies to the current context only
- Variable type: boolean
- Default: on
- If virtual-interrupts is set to on (default), the
qvm process instance will try to use the hardware's
virtual interrupt support, if such support is available. If this variable is
set to off, the qvm process instance won't try to
use the hardware's virtual interrupt support.