From 0380f8e907137a52dad98f9e967168cbe4d37f46 Mon Sep 17 00:00:00 2001 From: "Reyes, Amy" Date: Fri, 24 Jun 2022 15:27:50 -0700 Subject: [PATCH] doc: Update IVSHMEM tutorial - Update overview, dependencies and constraints - Update to match Configurator UI instead of manually editing XML files - Remove architectural details and instead point to high-level design documentation Signed-off-by: Reyes, Amy --- doc/tutorials/enable_ivshmem.rst | 289 +++++------------- .../images/configurator-ivshmem01.png | Bin 0 -> 11250 bytes .../images/configurator-ivshmem02.png | Bin 0 -> 50309 bytes doc/tutorials/inter-vm_communication.rst | 1 + 4 files changed, 76 insertions(+), 214 deletions(-) create mode 100644 doc/tutorials/images/configurator-ivshmem01.png create mode 100644 doc/tutorials/images/configurator-ivshmem02.png diff --git a/doc/tutorials/enable_ivshmem.rst b/doc/tutorials/enable_ivshmem.rst index 79f865321..f059139bc 100644 --- a/doc/tutorials/enable_ivshmem.rst +++ b/doc/tutorials/enable_ivshmem.rst @@ -1,229 +1,90 @@ .. _enable_ivshmem: -Enable Inter-VM Communication Based on Ivshmem -############################################## +Enable Inter-VM Shared Memory Communication (IVSHMEM) +##################################################### -You can use inter-VM communication based on the ``ivshmem`` dm-land -solution or hv-land solution, according to the usage scenario needs. -(See :ref:`ivshmem-hld` for a high-level description of these solutions.) -While both solutions can be used at the same time, VMs using different -solutions cannot communicate with each other. +About Inter-VM Shared Memory Communication (IVSHMEM) +**************************************************** -Enable Ivshmem Support +Inter-VM shared memory communication allows VMs to communicate with each other +via a shared memory mechanism. + +As an example, users in the industrial segment can use a shared memory region to +exchange commands and responses between a Windows VM that is taking inputs from +operators and a real-time VM that is running real-time tasks. + +The ACRN Device Model or hypervisor emulates a virtual PCI device (called an +IVSHMEM device) to expose this shared memory's base address and size. + +* Device Model: The IVSHMEM device is emulated in the ACRN Device Model, and the + shared memory regions are reserved in the Service VM's memory space. This + solution only supports communication between post-launched User VMs. + +* Hypervisor: The IVSHMEM device is emulated in the hypervisor, and the shared + memory regions are reserved in the hypervisor's memory space. This solution + works for both pre-launched and post-launched User VMs. + +While both solutions can be used in the same ACRN configuration, VMs using +different solutions cannot communicate with each other. + +Dependencies and Constraints +**************************** + +Consider the following dependencies and constraints: + +* Inter-VM shared memory communication is a hardware-neutral feature. + +* Guest OSes are required to have either of the following: + + - An IVSHMEM driver, such as `virtio-WIN + `__ for Windows and + `ivshmem APIs + `__ in + Zephyr + + - A mechanism granting user-space applications access to a PCI device, such as + the `Userspace I/O (UIO) driver + `__ in + Linux + +Configuration Overview ********************** -The ``ivshmem`` solution is disabled by default in ACRN. You can enable -it using the :ref:`ACRN Configurator ` with these -steps: +The :ref:`acrn_configurator_tool` lets you configure inter-VM shared memory +communication among VMs. The following documentation is a general overview of +the configuration process. -- Enable ``ivshmem`` via ACRN Configurator GUI. +To configure inter-VM shared memory communication among VMs, go to the +**Hypervisor Global Settings > Basic Parameters > InterVM shared memory**. Click +**+** to add the first shared memory region. - - Set ``hv.FEATURES.IVSHMEM.IVSHMEM_ENABLED`` to ``y`` +.. image:: images/configurator-ivshmem01.png + :align: center + :class: drop-shadow - - Edit ``hv.FEATURES.IVSHMEM.IVSHMEM_REGION`` to specify the shared - memory name, size and - communication VMs. The ``IVSHMEM_REGION`` format is ``shm_name,shm_size,VM IDs``: +For the shared memory region: - - ``shm_name`` - Specify a shared memory name. The name needs to start - with the ``hv:/`` prefix for hv-land, or ``dm:/`` for dm-land. - For example, ``hv:/shm_region_0`` for hv-land and ``dm:/shm_region_0`` - for dm-land. +#. Enter a name for the shared memory region. +#. Select the source of the emulation, either Hypervisor or Device Model. +#. Select the size of the shared memory region. +#. Select at least two VMs that can use the shared memory region. +#. Enter a virtual Board:Device.Function (BDF) address for each VM or leave it + blank. If the field is blank, the tool provides an address when the + configuration is saved. +#. Add more VMs to the shared memory region by clicking **+** on the right + side of an existing VM. Or click **-** to delete a VM. - - ``shm_size`` - Specify a shared memory size. The unit is megabyte. The - size ranges from 2 megabytes to 512 megabytes and must be a power of 2 megabytes. - For example, to set up a shared memory of 2 megabytes, use ``2`` - instead of ``shm_size``. +To add another shared memory region, click **+** on the right side of an +existing region. Or click **-** to delete a region. - - ``VM IDs`` - Specify the VM IDs to use the same shared memory - communication and separate it with ``:``. For example, the - communication between VM0 and VM2, it can be written as ``0:2`` +.. image:: images/configurator-ivshmem02.png + :align: center + :class: drop-shadow -- Build with the XML configuration, refer to :ref:`gsg`. +Learn More +********** -Ivshmem DM-Land Usage -********************* +ACRN supports multiple inter-VM communication methods. For a comparison, see +:ref:`inter-vm_communication`. -Follow `Enable Ivshmem Support`_ and -add below line as an ``acrn-dm`` boot parameter:: - - -s slot,ivshmem,shm_name,shm_size - -where - -- ``-s slot`` - Specify the virtual PCI slot number - -- ``ivshmem`` - Virtual PCI device emulating the Shared Memory - -- ``shm_name`` - Specify a shared memory name. This ``shm_name`` must be listed - in ``hv.FEATURES.IVSHMEM.IVSHMEM_REGION`` in `Enable Ivshmem Support`_ section and needs to start - with ``dm:/`` prefix. - -- ``shm_size`` - Shared memory size of selected ``shm_name``. - -There are two ways to insert the above boot parameter for ``acrn-dm``: - -- Manually edit the launch script file. In this case, ensure that both - ``shm_name`` and ``shm_size`` match those defined via the ACRN Configurator - tool. - -- Use the following command to create a launch script, when IVSHMEM is enabled - and ``hv.FEATURES.IVSHMEM.IVSHMEM_REGION`` is properly configured via - the ACRN Configurator. - - .. code-block:: none - :emphasize-lines: 5 - - python3 misc/config_tools/launch_config/launch_cfg_gen.py \ - --board \ - --scenario \ - --launch \ - --user_vmid - -.. note:: This device can be used with real-time VM (RTVM) as well. - -.. _ivshmem-hv: - -Ivshmem HV-Land Usage -********************* - - Follow `Enable Ivshmem Support`_ to setup HV-Land Ivshmem support. - -Ivshmem Notification Mechanism -****************************** - -Notification (doorbell) of ivshmem device allows VMs with ivshmem -devices enabled to notify (interrupt) each other following this flow: - -Notification Sender (VM): - VM triggers the notification to target VM by writing target Peer ID - (Equals to VM ID of target VM) and vector index to doorbell register of - ivshmem device, the layout of doorbell register is described in - :ref:`ivshmem-hld`. - -Hypervisor: - When doorbell register is programmed, hypervisor will search the - target VM by target Peer ID and inject MSI interrupt to the target VM. - -Notification Receiver (VM): - VM receives MSI interrupt and forwards it to related application. - -ACRN supports up to 8 (MSI-X) interrupt vectors for ivshmem device. -Guest VMs shall implement their own mechanism to forward MSI interrupts -to applications. - -.. note:: Notification is supported only for HV-land ivshmem devices. (Future - support may include notification for DM-land ivshmem devices.) - -Inter-VM Communication Examples -******************************* - -DM-Land Example -=============== - -This example uses dm-land inter-VM communication between two -Linux-based post-launched VMs (VM1 and VM2). - -.. note:: An ``ivshmem`` Windows driver exists and can be found - `here `_. - -1. Add a new virtual PCI device for both VMs: the device type is - ``ivshmem``, shared memory name is ``dm:/test``, and shared memory - size is 2MB. Both VMs must have the same shared memory name and size: - - - VM1 Launch Script Sample - - .. code-block:: none - :emphasize-lines: 6 - - acrn-dm -m $mem_size -s 0:0,hostbridge \ - -s 5,virtio-console,@stdio:stdio_port \ - -s 6,virtio-hyper_dmabuf \ - -s 3,virtio-blk,/home/acrn/UserVM1.img \ - -s 4,virtio-net,tap=tap0 \ - -s 6,ivshmem,dm:/test,2 \ - -s 7,virtio-rnd \ - --ovmf /usr/share/acrn/bios/OVMF.fd \ - $vm_name - - - - VM2 Launch Script Sample - - .. code-block:: none - :emphasize-lines: 4 - - acrn-dm -m $mem_size -s 0:0,hostbridge \ - -s 3,virtio-blk,/home/acrn/UserVM2.img \ - -s 4,virtio-net,tap=tap0 \ - -s 5,ivshmem,dm:/test,2 \ - --ovmf /usr/share/acrn/bios/OVMF.fd \ - $vm_name - -2. Boot two VMs and use ``lspci | grep "shared memory"`` to verify that the virtual device is ready for each VM. - - - For VM1, it shows ``00:06.0 RAM memory: Red Hat, Inc. Inter-VM shared memory (rev 01)`` - - For VM2, it shows ``00:05.0 RAM memory: Red Hat, Inc. Inter-VM shared memory (rev 01)`` - -3. As recorded in the `PCI ID Repository `_, - the ``ivshmem`` device vendor ID is ``1af4`` (Red Hat) and device ID is ``1110`` - (Inter-VM shared memory). Use these commands to probe the device:: - - sudo modprobe uio - sudo modprobe uio_pci_generic - sudo echo "1af4 1110" > /sys/bus/pci/drivers/uio_pci_generic/new_id - -.. note:: These commands are applicable to Linux-based guests with ``CONFIG_UIO`` and ``CONFIG_UIO_PCI_GENERIC`` enabled. - -4. Finally, a user application can get the shared memory base address from - the ``ivshmem`` device BAR resource - (``/sys/class/uio/uioX/device/resource2``) and the shared memory size from - the ``ivshmem`` device config resource - (``/sys/class/uio/uioX/device/config``). - - The ``X`` in ``uioX`` above, is a number that can be retrieved using the - ``ls`` command: - - - For VM1 use ``ls -lh /sys/bus/pci/devices/0000:00:06.0/uio`` - - For VM2 use ``ls -lh /sys/bus/pci/devices/0000:00:05.0/uio`` - -HV-Land Example -=============== - -This example uses hv-land inter-VM communication between two -Linux-based VMs (VM0 is a pre-launched VM and VM2 is a post-launched VM). - -1. Make a copy of the predefined hybrid_rt scenario on whl-ipc-i5 (available at - ``acrn-hypervisor/misc/config_tools/data/whl-ipc-i5/hybrid_rt.xml``) and - configure shared memory for the communication between VM0 and VM2. The shared - memory name is ``hv:/shm_region_0``, and shared memory size is 2M bytes. The - resulting scenario XML should look like this: - - .. code-block:: none - :emphasize-lines: 2,3 - - - y - hv:/shm_region_0, 2, 0:2 - - -2. Build ACRN based on the XML configuration for hybrid_rt scenario on whl-ipc-i5 board:: - - make BOARD=whl-ipc-i5 SCENARIO= - -3. Add a new virtual PCI device for VM2 (post-launched VM): the device type is - ``ivshmem``, shared memory name is ``hv:/shm_region_0``, and shared memory - size is 2MB. - - - VM2 Launch Script Sample - - .. code-block:: none - :emphasize-lines: 4 - - acrn-dm -m $mem_size -s 0:0,hostbridge \ - -s 3,virtio-blk,/home/acrn/UserVM2.img \ - -s 4,virtio-net,tap=tap0 \ - -s 5,ivshmem,hv:/shm_region_0,2 \ - --ovmf /usr/share/acrn/bios/OVMF.fd \ - $vm_name - -4. Continue following the dm-land steps 2-4 and the ``ivshmem`` device BDF may be different - depending on the configuration. +For details on ACRN IVSHMEM high-level design, see :ref:`ivshmem-hld`. \ No newline at end of file diff --git a/doc/tutorials/images/configurator-ivshmem01.png b/doc/tutorials/images/configurator-ivshmem01.png new file mode 100644 index 0000000000000000000000000000000000000000..0897be3ecf457a955915a975982059fc441bc471 GIT binary patch literal 11250 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 Bab*Ai literal 0 HcmV?d00001 diff --git a/doc/tutorials/images/configurator-ivshmem02.png b/doc/tutorials/images/configurator-ivshmem02.png new file mode 100644 index 0000000000000000000000000000000000000000..47867734ad633b4a85830086e92a5156653a96f3 GIT binary patch literal 50309 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 loRKT!A0qtkD&Tc_rl3P*ldVv2SAqk6