Configuration variables

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.
Note: For more information about the host-* variables, see About the set host-* variables in the set option reference.

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.