mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-04-28 19:54:01 +00:00
Create a new User VM OS guide with overview information about setting up User VMs. Link to separate standard and RTVM guide for details. Most of these separate guides need updating to reflect the new ACRN configurator and the development system/target system development model. Update titles of existing "using XXX as user vm" to be consistent. Begin update of ubuntu uservm doc for direction review. Signed-off-by: David B. Kinder <david.b.kinder@intel.com>
187 lines
7.9 KiB
ReStructuredText
187 lines
7.9 KiB
ReStructuredText
.. _user_vm_guide:
|
|
|
|
User VM Guide
|
|
#############
|
|
|
|
The ACRN hypervisor uses a Linux-based Service VM and can run User VMs
|
|
simultaneously, providing a powerful software platform to build complex
|
|
computing systems. A User VM can run a variety of OSs including Linux or
|
|
Windows, or an RTOS such as Zephyr or VxWorks. As shown in the :ref:`gsg`,
|
|
you use the ACRN Configurator to define options used to build the static
|
|
configuration of your ACRN system based on your system design, available
|
|
capabilities of your target hardware, and performance characteristics such as
|
|
those required for real-time needs. The Configurator also lets you define
|
|
dynamic settings for launching User VMs and specifying the resources they need
|
|
access to.
|
|
|
|
ACRN provides a framework called the :ref:`ACRN Device Model
|
|
<dm_architecture_intro>`, for sharing physical system resources and providing
|
|
virtual device emulation with rich I/O mediators. The Device Model also
|
|
supports non-emulated device passthrough access to satisfy time-sensitive
|
|
requirements and low-latency access needs of real-time applications.
|
|
|
|
In this and accompanying documents, we provide guidance for configuring and
|
|
deploying post-launched User VMs, and additional information about OS-specific
|
|
settings based on your User VM OS choice. We also show how to configure the
|
|
system for accessing virtual devices emulated by the ACRN Device Model or
|
|
passthrough resources dedicated to a specific VM.
|
|
|
|
ACRN also supports pre-launched User VMs, with dedicated resources that are not
|
|
shared with other VMs. Pre-launched VMs are configured statically using the
|
|
Configurator, with their own boot devices, CPU, memory, and other system
|
|
resources. We'll discuss pre-launched VMs separately.
|
|
|
|
|
|
User VM OS Choices
|
|
******************
|
|
|
|
ACRN has no restrictions on what OS is used by a User VM. The ACRN team has
|
|
tested Standard User VMs running Ubuntu 20.04 and Windows 10, and real-time User
|
|
VMs running Zephyr, VxWorks, Xenomai, and Linux VMs running on a
|
|
PREEMPT_RT-patched kernel.
|
|
|
|
The ACRN Service VM and its Device Model run on Ubuntu 20.04 using a patched
|
|
kernel built from the `acrn-kernel GitHub repository
|
|
<https://github.com/projectacrn/acrn-kernel>`_. The Service VM can access
|
|
hardware resources directly by running native drivers and provides device
|
|
sharing services to post-launched User VMs. The Service VM is not dependent on
|
|
any settings in your User VM configuration and is used for both Standard and
|
|
Real-time post-launched User VMs. The Service VM is not used by pre-launched
|
|
User VMs.
|
|
|
|
Configuration Overview
|
|
**********************
|
|
|
|
In the following sections, we provide general guidance and then link to
|
|
OS-specific guidance documents based on your choice of User VM OS.
|
|
|
|
Separately, and out of scope for this document, you'll need to create a combined
|
|
application and User VM OS image for each User VM.
|
|
|
|
The ACRN Device Model within the Service VM starts your User VM image using a
|
|
launch script created by the ACRN Configurator, based on the settings you
|
|
provided. These settings include the location on the target system storage
|
|
device for that image, User VM memory size, console, vUART settings for
|
|
communication, virtual I/O devices your application uses, and more. Available
|
|
launch script options are documented in the :ref:`acrn-dm_parameters` and the
|
|
:ref:`scenario-config-options` documentation. We'll also provide examples for
|
|
selected capabilities in our OS-specific guidance.
|
|
|
|
This guide assumes you've already followed the Getting Started Guide and have
|
|
followed steps to prepare the development computer and installed development
|
|
system prerequisites, prepared the target and generated a board configuration
|
|
file, and have installed the ACRN Configurator.
|
|
|
|
Using the ACRN Configurator
|
|
===========================
|
|
|
|
Independent of your User VM OS choice, run the ACRN Configurator and create a
|
|
scenario with a Post-launched VM for each User VM you will be running. We use
|
|
one Ubuntu-based User VM in this overview:
|
|
|
|
.. figure:: images/vm-guide-create-new-scenario.png
|
|
:align: center
|
|
:width: 600px
|
|
:name: vm-guide-create-new-scenario
|
|
:class: drop-shadow
|
|
|
|
Creating a new scenario in the Configurator
|
|
|
|
Use the Configurator to give the VM a name, and define configuration options
|
|
specific for this VM, such as memory and VM type (Standard or Real-time):
|
|
|
|
.. figure:: images/vm-guide-set-vm-basic-parameters.png
|
|
:align: center
|
|
:width: 600px
|
|
:name: vm-guide-set-vm-basic-parameters
|
|
:class: drop-shadow
|
|
|
|
Set VM basic configuration options
|
|
|
|
And define where the User VM image will be on the target system (in this
|
|
example, an Ubuntu 20.04 desktop ISO image):
|
|
|
|
.. figure:: images/vm-guide-image-virtio-block.png
|
|
:align: center
|
|
:width: 600px
|
|
:name: vm-guide-image-virtio-block
|
|
:class: drop-shadow
|
|
|
|
Set VM image using virtio block device
|
|
|
|
After the configuration settings are to your liking, save the configuration.
|
|
When saving, the ACRN Configurator first validates your scenario configuration and
|
|
reports any issues that need your attention. If successful, it writes out the
|
|
updated scenario XML file and launch script to your working directory. You'll
|
|
use this launch script to start the User VM on the target.
|
|
|
|
Rebuild the ACRN Hypervisor
|
|
===========================
|
|
|
|
After exiting the ACRN Configurator, build the ACRN hypervisor (based on the static
|
|
configuration parameters in your scenario) on your development computer, as was
|
|
done in the :ref:`gsg`::
|
|
|
|
cd ~/acrn-work/acrn-hypervisor
|
|
make clean && make BOARD=~/acrn-work/MyConfiguration/my_board.board.xml SCENARIO=~/acrn-work/MyConfiguration/scenario.xml
|
|
|
|
The build typically takes a few minutes. When done, the build generates a Debian
|
|
package in the ``./build`` directory.
|
|
|
|
This Debian package contains the ACRN hypervisor and tools to ease installing ACRN on the target.
|
|
|
|
Transfer Files to the Target, Install, and Reboot
|
|
=================================================
|
|
|
|
We'll need to get the Debian package containing the hypervisor files we built to
|
|
the target system, along with the launch scripts and User VM images. In the
|
|
:ref:`gsg`, we used a USB stick, but you could also use the network to copy
|
|
files using ``scp``. Install the Debian package and reboot to run ACRN and the
|
|
Service VM. Then use the launch script to start each User VM.
|
|
|
|
User VM Persistence
|
|
*******************
|
|
|
|
In the :ref:`gsg` (and in the previous overview), we used a standard Ubuntu
|
|
20.04 ISO image as our User VM image. By its nature, an ISO image is read-only.
|
|
This means that when you reboot the ACRN system, any changes you made to the
|
|
User VM such as installing a new package, would be lost; the unmodified ISO
|
|
image is used again for the User VM when the system is rebooted. While this
|
|
could be the usage model you'd like, an alternative is to set up the User VM
|
|
image as read-write so it will retain any changes made while it was running and
|
|
return to that state after a reboot.
|
|
|
|
One way to create a persistent VM image is by using KVM to define virtual disk
|
|
partitions, boot the underlying OS, add additional packages and even an
|
|
application to that image, and then save and convert that QCOW2 image to a raw
|
|
format we can use with ACRN.
|
|
|
|
In separate companion documentation, we provide detail guides for running
|
|
User VMs with different OSs, and provide considerations for each of those
|
|
standard and real-time OS configurations.
|
|
|
|
Standard VM OS Considerations
|
|
*****************************
|
|
|
|
Here is a list of Standard User VM OS guides with details and topics to consider
|
|
when using one of these OSs:
|
|
|
|
* :ref:`using_ubuntu_as_user_vm`
|
|
* :ref:`using_windows_as_user_vm`
|
|
|
|
Real-time VM OS Considerations
|
|
******************************
|
|
|
|
Here is a list of real-time User VM OS guides with details and topics to consider
|
|
when using one of these OSs:
|
|
|
|
* :ref:`using_xenomai_as_user_vm`
|
|
* :ref:`using_vxworks_as_user_vm`
|
|
* :ref:`using_zephyr_as_user_vm`
|
|
|
|
We also recommend reading these RTVM performance guides:
|
|
|
|
* :ref:`rtvm_workload_guideline`
|
|
* :ref:`rt_perf_tips_rtvm`
|
|
* :ref:`rt_performance_tuning`
|