acrn-hypervisor/doc/tutorials/acrn_configuration_tool.rst
Kunhui-Li 96aa38763b doc: update UI tool instructions
1. Update the images to match with the latest UI.
2. Update the path of the saved XML file when clicking Export XML to
save customized file.

Signed-off-by: Kunhui-Li <kunhuix.li@intel.com>
Signed-off-by: David B. Kinder <david.b.kinder@intel.com>
2021-08-23 12:12:05 -07:00

561 lines
21 KiB
ReStructuredText

.. _acrn_configuration_tool:
Introduction to ACRN Configuration
##################################
ACRN configuration is designed for System Integrators / Tier 1s to customize
ACRN to meet their own needs. It allows users to adapt ACRN to target boards as
well as configure hypervisor capabilities and provision VMs.
ACRN configuration consists of the following key components.
- Configuration data saved as XML files.
- A configuration toolset that helps users to generate and edit configuration
data. The toolset includes:
- A **board inspector** that collects board-specific information on target
machines.
- A **configuration editor** that lets you edit configuration data via a web-based UI.
The following sections introduce the concepts and tools of ACRN configuration
from the aspects below.
- :ref:`acrn_config_types` introduces the objectives and main contents of
different types of configuration data.
- :ref:`acrn_config_workflow` overviews the steps to customize ACRN
configuration using the configuration toolset.
- :ref:`acrn_config_data` explains the location and format of configuration
data saved as XML files.
- :ref:`acrn_config_tool_ui` gives detailed instructions on using the
configuration editor.
.. _acrn_config_types:
Types of Configurations
***********************
ACRN includes three types of configurations: board, scenario, and launch. The
following sections briefly describe the objectives and main contents of each
type.
Board Configuration
===================
The board configuration stores hardware-specific information extracted on the
target platform. It describes the capacity of hardware resources (such as
processors and memory), platform power states, available devices, and BIOS
versions. This information is used by ACRN configuration tool to check feature
availability and allocate resources among VMs, as well as by ACRN hypervisor to
initialize and manage the platform at runtime.
The board configuration is scenario-neutral by nature. Thus, multiple scenario
configurations can be based on the same board configuration.
Scenario Configuration
======================
The scenario configuration defines a working scenario by configuring hypervisor
capabilities and defining VM attributes and resources. You can specify the
following in scenario configuration.
- Hypervisor capabilities
- Availability and settings of hypervisor features, such as debugging
facilities, scheduling algorithm, ivshmem, and security features.
- Hardware management capacity of the hypervisor, such as maximum PCI devices
and maximum interrupt lines supported.
- Memory consumption of the hypervisor, such as the entry point and stack
size.
- VM attributes and resources
- VM attributes, such as VM names.
- Maximum number of VMs supported.
- Resources allocated to each VM, such as number of vCPUs, amount of guest
memory, and pass-through devices.
- Guest OS settings, such as boot protocol and guest kernel parameters.
- Settings of virtual devices, such as virtual UARTs.
For pre-launched VMs, the VM attributes and resources are exactly the amount of
resource allocated to them. For post-launched VMs, the number of vCPUs define
the upper limit the Service VM can allocate to them and settings of virtual
devices still apply. Other resources are under the control of the Service VM and
can be dynamically allocated to post-launched VMs.
The scenario configuration is used by ACRN configuration tool to reserve
sufficient memory for the hypervisor to manage the VMs at build time, as well as
by ACRN hypervisor to initialize its capabilities and set up the VMs at runtime.
Launch Configuration
====================
The launch configuration defines the attributes and resources of a
post-launched VM. The main contents are similar to the VM attributes and
resources in scenario configuration. The launch configuration is used to generate shell scripts that
invoke ``acrn-dm`` to create post-launched VMs. Unlike board and scenario
configurations used at build time or by ACRN hypervisor, launch
configuration are used dynamically in the Service VM.
.. _acrn_config_workflow:
Using ACRN Configuration Toolset
********************************
ACRN configuration toolset is provided to create and edit configuration
data. The toolset can be found in ``misc/config_tools``.
Here is the workflow to customize ACRN configurations using the configuration
toolset.
#. Get the board info.
a. Set up a native Linux environment on the target board. Make sure the
following tools are installed and the kernel boots with the following
command line options.
| **Native Linux requirement:**
| **Release:** Ubuntu 18.04+
| **Tools:** cpuid, rdmsr, lspci, lxml, dmidecode (optional)
| **Kernel cmdline:** "idle=nomwait intel_idle.max_cstate=0 intel_pstate=disable"
#. Copy the ``board_inspector`` directory into the target file system and then run the
``sudo python3 board_inspector.py $(BOARD)`` command.
#. A ``$(BOARD).xml`` that includes all needed hardware-specific information
is generated under the current working directory. Here, ``$(BOARD)`` is the
specified board name.
#. Customize your needs.
a. Copy ``$(BOARD).xml`` to the host development machine.
#. Run the ACRN configuration editor (available at
``misc/config_tools/config_app/acrn_configurator.py``) on the host machine and import
the ``$(BOARD).xml``. Select your working scenario under **Scenario Setting**
and input the desired scenario settings. The tool will do validation checks
on the input based on the ``$(BOARD).xml``. The customized settings can be
exported to your own ``$(SCENARIO).xml``. If you have a customized scenario
XML file, you can also import it to the editor for modification.
#. In ACRN configuration editor, input the launch script parameters for the
post-launched User VM under **Launch Setting**. The editor will validate
the input based on both the ``$(BOARD).xml`` and ``$(SCENARIO).xml`` and then
export settings to your ``$(LAUNCH).xml``.
.. note:: Refer to :ref:`acrn_config_tool_ui` for more details on
the configuration editor.
#. Build with your XML files. Refer to :ref:`gsg` to build
the ACRN hypervisor with your XML files on the host machine.
#. Deploy VMs and run ACRN hypervisor on the target board.
.. figure:: images/offline_tools_workflow.png
:align: center
Configuration Workflow
.. _acrn_makefile_targets:
Makefile Targets for Configuration
==================================
In addition to the ``BOARD`` and ``SCENARIO`` variables, ACRN source also
includes the following makefile targets to aid customization.
.. list-table::
:widths: 20 50
:header-rows: 1
* - Target
- Description
* - ``hvdefconfig``
- Generate configuration files (a bunch of C source files) in the
build directory without building the hypervisor. This target can be used
when you want to customize the configurations based on a predefined
scenario.
* - ``hvshowconfig``
- Print the target ``BOARD``, ``SCENARIO`` and build type (debug or
release) of a build.
* - ``hvdiffconfig``
- After modifying the generated configuration files, you can use this
target to generate a patch that shows the differences made.
* - ``hvapplydiffconfig PATCH=/path/to/patch``
- Register a patch to be applied on the generated configuration files
every time they are regenerated. The ``PATCH`` variable specifies the path
(absolute or relative to current working directory) of the
patch. Multiple patches can be registered by invoking this target
multiple times.
The targets ``hvdiffconfig`` and ``hvapplydiffconfig``
are provided for users who already have offline patches to the generated
configuration files. Prior to v2.4, the generated configuration files are also
in the repository. Some users may already have chosen to modify these files
directly to customize the configurations.
.. note::
We highly recommend new users save and maintain customized configurations
in XML, not in patches to generated configuration files.
Here is an example how to use the ``hvdiffconfig`` to generate a patch and save
it to ``config.patch``.
.. code-block:: console
acrn-hypervisor$ make BOARD=ehl-crb-b SCENARIO=hybrid_rt hvdefconfig
...
acrn-hypervisor$ vim build/hypervisor/configs/scenarios/hybrid_rt/pci_dev.c
(edit the file manually)
acrn-hypervisor$ make hvdiffconfig
...
Diff on generated configuration files is available at /path/to/acrn-hypervisor/build/hypervisor/config.patch.
To make a patch effective, use 'applydiffconfig PATCH=/path/to/patch' to register it to a build.
...
acrn-hypervisor$ cp build/hypervisor/config.patch config.patch
The example below shows how to use ``hvapplydiffconfig`` to apply
``config.patch`` to a new build.
.. code-block:: console
acrn-hypervisor$ make clean
acrn-hypervisor$ make BOARD=ehl-crb-b SCENARIO=hybrid_rt hvdefconfig
...
acrn-hypervisor$ make hvapplydiffconfig PATCH=config.patch
...
/path/to/acrn-hypervisor/config.patch is registered for build directory /path/to/acrn-hypervisor/build/hypervisor.
Registered patches will be applied the next time 'make' is invoked.
To unregister a patch, remove it from /path/to/acrn-hypervisor/build/hypervisor/configs/.diffconfig.
...
acrn-hypervisor$ make hypervisor
...
Applying patch /path/to/acrn-hypervisor/config.patch:
patching file scenarios/hybrid_rt/pci_dev.c
...
.. _acrn_config_data:
ACRN Configuration Data
***********************
ACRN configuration data are saved in three XML files: ``board``, ``scenario``,
and ``launch`` XML. The ``board`` XML contains board configuration and is
generated by the board inspector on the target machine. The ``scenario`` and
``launch`` XMLs, containing scenario and launch configurations respectively, can
be customized by using the configuration editor. End users can load their own
configurations by importing customized XMLs or by saving the configurations by
exporting XMLs.
The predefined XMLs provided by ACRN are located in the ``misc/config_tools/data/``
directory of the ``acrn-hypervisor`` repo.
Board XML Format
================
The board XML has an ``acrn-config`` root element and a ``board`` attribute:
.. code-block:: xml
<acrn-config board="BOARD">
Board XML files are input to the configuration editor and the build system, and are not
intended for end users to modify.
Scenario XML Format
===================
The scenario XML has an ``acrn-config`` root element as well as ``board`` and
``scenario`` attributes:
.. code-block:: xml
<acrn-config board="BOARD" scenario="SCENARIO">
See :ref:`scenario-config-options` for a full explanation of available scenario
XML elements. Users are recommended to tweak the configuration data by using
ACRN configuration editor.
Launch XML Format
=================
The launch XML has an ``acrn-config`` root element as well as ``board``,
``scenario`` and ``uos_launcher`` attributes:
.. code-block:: xml
<acrn-config board="BOARD" scenario="SCENARIO" uos_launcher="UOS_NUMBER">
Attributes of the ``uos_launcher`` specify the number of User VMs that the
current scenario has:
``uos``:
Specify the User VM with its relative ID to Service VM by the ``id`` attribute.
``uos_type``:
Specify the User VM type, such as ``CLEARLINUX``, ``ANDROID``, ``ALIOS``,
``PREEMPT-RT LINUX``, ``GENERIC LINUX``, ``WINDOWS``, ``YOCTO``, ``UBUNTU``,
``ZEPHYR`` or ``VXWORKS``.
``rtos_type``:
Specify the User VM Real-time capability: Soft RT, Hard RT, or none of them.
``mem_size``:
Specify the User VM memory size in megabytes.
``gvt_args``:
GVT arguments for the VM. Set it to ``gvtd`` for GVT-d, otherwise it's
for GVT-g arguments. The GVT-g input format: ``low_gm_size high_gm_size fence_sz``,
The recommendation is ``64 448 8``. Leave it blank to disable the GVT.
``vbootloader``:
Virtual bootloader type; currently only supports OVMF.
``vuart0``:
Specify whether the device model emulates the vUART0(vCOM1); refer to
:ref:`vuart_config` for details. If set to ``Enable``, the vUART0 is
emulated by the device model; if set to ``Disable``, the vUART0 is
emulated by the hypervisor if it is configured in the scenario XML.
``poweroff_channel``:
Specify whether the User VM power off channel is through the IOC,
power button, or vUART.
``allow_trigger_s5``:
Allow VM to trigger s5 shutdown flow, this flag works with ``poweroff_channel``
``vuart1(pty)`` and ``vuart1(tty)`` only.
``enable_ptm``:
Enable the Precision Timing Measurement (PTM) feature.
``usb_xhci``:
USB xHCI mediator configuration. Input format:
``bus#-port#[:bus#-port#: ...]``, e.g.: ``1-2:2-4``.
Refer to :ref:`usb_virtualization` for details.
``shm_regions``:
List of shared memory regions for inter-VM communication.
``shm_region`` (a child node of ``shm_regions``):
configure the shared memory regions for current VM, input format:
``hv:/<;shm name>; (or dm:/<shm_name>;), <;shm size in MB>;``. Refer to :ref:`ivshmem-hld` for details.
``console_vuart``:
Enable a PCI-based console vUART. Refer to :ref:`vuart_config` for details.
``communication_vuarts``:
List of PCI-based communication vUARTs. Refer to :ref:`vuart_config` for details.
``communication_vuart`` (a child node of ``communication_vuarts``):
Enable a PCI-based communication vUART with its ID. Refer to :ref:`vuart_config` for details.
``passthrough_devices``:
Select the passthrough device from the lspci list. Currently we support:
``usb_xdci``, ``audio``, ``audio_codec``, ``ipu``, ``ipu_i2c``,
``cse``, ``wifi``, ``bluetooth``, ``sd_card``,
``ethernet``, ``sata``, and ``nvme``.
``network`` (a child node of ``virtio_devices``):
The virtio network device setting.
Input format: ``tap_name,[vhost],[mac=XX:XX:XX:XX:XX:XX]``.
``block`` (a child node of ``virtio_devices``):
The virtio block device setting.
Input format: ``[blk partition:][img path]`` e.g.: ``/dev/sda3:./a/b.img``.
``console`` (a child node of ``virtio_devices``):
The virtio console device setting.
Input format:
``[@]stdio|tty|pty|sock:portname[=portpath][,[@]stdio|tty|pty:portname[=portpath]]``.
``cpu_affinity``:
List of pCPU that this VM's vCPUs are pinned to.
.. note::
The ``configurable`` and ``readonly`` attributes are used to mark
whether the item is configurable for users. When ``configurable="n"``
and ``readonly="y"``, the item is not configurable from the web
interface. When ``configurable="n"``, the item does not appear on the
interface.
.. _acrn_config_tool_ui:
Use the ACRN Configuration Editor
*********************************
The ACRN configuration editor provides a web-based user interface for the following:
- reads board info
- configures and validates scenario and launch configurations
- generates launch scripts for the specified post-launched User VMs.
- dynamically creates a new scenario configuration and adds or deletes VM
settings in it
- dynamically creates a new launch configuration and adds or deletes User VM
settings in it
Prerequisites
=============
- Clone the ACRN hypervisor repo
.. code-block:: bash
$ git clone https://github.com/projectacrn/acrn-hypervisor
- Install ACRN configuration editor dependencies:
.. code-block:: bash
$ cd ~/acrn-hypervisor/misc/config_tools/config_app
$ sudo pip3 install -r requirements
Instructions
============
#. Launch the ACRN configuration editor:
.. code-block:: bash
$ python3 acrn_configurator.py
#. Open a browser and navigate to the website
`<http://127.0.0.1:5001/>`_ automatically, or you may need to visit this
website manually. Make sure you can connect to open network from browser
because the editor needs to download some JavaScript files.
.. note:: The ACRN configuration editor is supported on Chrome, Firefox,
and Microsoft Edge. Do not use Internet Explorer.
The website is shown below:
.. figure:: images/config_app_main_menu.png
:align: center
:name: ACRN config tool main menu
#. Set the board info:
a. Click **Import Board info**.
.. figure:: images/click_import_board_info_button.png
:align: center
#. Upload the board XML you have generated from the ACRN board inspector.
#. After board XML is uploaded, you will see the board name from the
Board info list. Select the board name to be configured.
.. figure:: images/select_board_info.png
:align: center
#. Load or create the scenario configuration by selecting among the following:
- Choose a scenario from the **Scenario Setting** menu that lists all
user-defined scenarios for the board you selected in the previous step.
- Click the **Create a new scenario** from the **Scenario Setting** menu to
dynamically create a new scenario configuration for the current board.
- Click the **Load a default scenario** from the **Scenario Setting** menu,
and then select one default scenario configuration to load a predefined
scenario XML for the current board.
The default scenario XMLs are located at
``misc/config_tools/data/[board]/``. You can edit the scenario name when
creating or loading a scenario. If the current scenario name is duplicated
with an existing scenario setting name, rename the current scenario name or
overwrite the existing one after the confirmation message.
.. figure:: images/choose_scenario.png
:align: center
Note that you can also use a customized scenario XML by clicking **Import
XML**. The configuration editor automatically directs to the new scenario
XML once the import is complete.
#. The configurable items display after one scenario is created, loaded,
or selected. Following is an industry scenario:
.. figure:: images/configure_scenario.png
:align: center
- You can edit these items directly in the text boxes, or you can choose
single or even multiple items from the drop-down list.
- Read-only items are marked as gray.
- Hover the mouse cursor over the item to display the description.
#. Dynamically add or delete VMs:
- Click **Add a VM below** in one VM setting, and then select one VM type
to add a new VM under the current VM.
- Click **Remove this VM** in one VM setting to remove the current VM for
the scenario setting.
When one VM is added or removed in the scenario, the configuration editor
reassigns the VM IDs for the remaining VMs by the order of Pre-launched VMs,
Service VMs, and Post-launched VMs.
.. figure:: images/configure_vm_add.png
:align: center
#. Click **Export XML** to save the scenario XML; you can rename it in the
pop-up model.
.. note::
Save the customized scenario XML to a specific folder by inputting the
absolute path to this folder in the **Scenario XML Path** field. If you
don't specify a path, the scenario xml file will be saved to
default folder: ``acrn-hypervisor/../user_config/[board]/``.
Before saving the scenario XML, the configuration editor validates the
configurable items. If errors exist, the configuration editor lists all
incorrectly configured items and shows the errors as below:
.. figure:: images/err_acrn_configuration.png
:align: center
After the scenario is saved, the page automatically directs to the saved
scenario XMLs. Delete the configured scenario by clicking **Export XML** -> **Remove**.
The **Launch Setting** is quite similar to the **Scenario Setting**:
#. Upload board XML or select one board as the current board.
#. Load or create one launch configuration by selecting among the following:
- Click **Create a new launch script** from the **Launch Setting** menu.
- Click **Load a default launch script** from the **Launch Setting** menu.
- Select one launch XML from the menu.
- Import a local launch XML by clicking **Import XML**.
#. Select one scenario for the current launch configuration from the **Select
Scenario** drop-down box.
#. Configure the items for the current launch configuration.
#. Add or remove User VM (UOS) launch scripts:
- Add a UOS launch script by clicking **Configure an UOS below** for the
current launch configuration.
- Remove a UOS launch script by clicking **Remove this VM** for the
current launch configuration.
#. Save the current launch configuration to the ``user_config`` XML folder by
clicking **Export XML**. The configuration editor validates the current
configuration and lists all incorrectly configured items.
#. Click **Generate Launch Script** to save the current launch configuration and
then generate the launch script.
.. figure:: images/generate_launch_script.png
:align: center