vdev shmem
Provide an inter-guest system shared memory device
Synopsis:
vdev shmem options
Options:
- allow fnpattern
- Allow the guest to create or attach to any shared memory region whose name matches the specified filename pattern (fnpattern).
- create name,size
- Pre-create a shared memory object named name of size bytes.
- deny fnpattern
- Deny the guest access to any shared memory region whose name matches the specified filename pattern (fnpattern).
- intr intr
- If the loc option is specified, you must also specify the value of intr; this sets the guest interrupt that is generated when another guest sends a notification of an update to shared memory.
- loc [addr]
- The base address of the factory page for the vdev. If addr isn't specified, the vdev appears as a PCI device, and the qvm process automatically assigns the factory page location and adds this location to the PCI BAR register.
- sched priority
- Use the priority specified by priority for pulses indicating that input is available.
- subst [match],prefix
- Specify a prefix to add to shared memory region names
(see
Using the subst option
below).
For a list of options available to all vdevs, see
Common vdev options
at the beginning of this chapter.
Description:
ARM and x86. The shmem vdev allows you to share memory between guests. Normally this device appears as a PCI device, but if the loc and intr options are specified, the guest running in the associated VM will see this device as a memory-mapped I/O (MMIO) device at the specified location.
Memoryin the
Understanding Virtual Environmentschapter.
Restrictions list
You can use the allow and deny options to define lists of shared memory regions that the guest may or may not access. By limiting access to shared memory and, hence, allocations of shared memory, these options help prevent denial-of-service attacks.
You can repeat either of these options multiple times to specify whatever filename patterns you need to manage the guest's access to shared memory regions. When specifying filename patterns, you can include wildcard characters such as the asterisk (*) to indicate multiple shared memory regions for convenience. We recommend defining either an allow or a deny policy for every named region used by the VM, including when using wildcard naming.
\escape character before the asterisk to get the instruction through the shell (e.g., vdev shmem allow test\*).
For more information about using the shared memory vdev, see Memory sharing
in the Using a QNX Hypervisor
System
chapter.
Using the subst option
You can use the subst option to present the host with different
names for shared memory regions for each guest, while presenting the same name to
each guest so you can use the same executables in the different guests. For example,
each guest might see a shared memory region called foomem
, but the host would
see these regions as guest0mem
, guest1mem
, etc.
The following VM configurations produce the result presented above by
substituting guest*
for foo
:
- VM 0
vdev shmem subst foo,guest0 create foomem,0xf0000 ...
- VM 1
vdev shmem subst foo,guest1 ...
An equivalent result can be achieved by simply adding the guest*
prefix, as follows:
- VM 0
vdev shmem subst ,guest0 create mem,0xf0000 ...
- VM 1
vdev shmem subst ,guest1 ...
- Only one instance of the subst option may be specified per shmem vdev.
- If you want the subst option to affect the name specified by a create option, you must place the subst before the create.
- The length of the memory region name (name + prefix) must not exceed the
value of GUEST_SHM_MAX_NAME (see
Virtual registers (guest_shm.h)
in theUsing Virtual Devices, Networking, and Memory Sharing
chapter).