Difference between revisions of "ERIKA3 on the Xen hypervisor"
Line 1: | Line 1: | ||
== Introduction == | == Introduction == | ||
− | [https://www.xenproject.org| '''Xen'''] is an open-source type-1 or bare-metal hypervisor that runs directly on the hardware and is responsible for handling CPU, memory, timers and interrupts. | + | [https://www.xenproject.org| '''Xen'''] is an open-source type-1 or bare-metal hypervisor, that runs directly on the hardware and is responsible for handling CPU, memory, timers and interrupts. |
The hypervisor is started by the boot loader and, once it is loaded, it starts the privileged domain '''Dom0''' (short for "domain 0") containing the drivers of the system devices. Once Dom0 has started, one or more user domains, referred to as '''DomU''', can be started and controlled in the Dom0. Xen supports both para-virtualized (PV) and fully hardware virtualized (HVM) user domains. | The hypervisor is started by the boot loader and, once it is loaded, it starts the privileged domain '''Dom0''' (short for "domain 0") containing the drivers of the system devices. Once Dom0 has started, one or more user domains, referred to as '''DomU''', can be started and controlled in the Dom0. Xen supports both para-virtualized (PV) and fully hardware virtualized (HVM) user domains. | ||
Line 9: | Line 9: | ||
== ERIKA3 Xen configuration == | == ERIKA3 Xen configuration == | ||
This section defines the configuration parameters that are used for running ERIKA3 as Xen DomU. Note that according to Xen configuration syntax, comment lines starts with the '#' symbol. | This section defines the configuration parameters that are used for running ERIKA3 as Xen DomU. Note that according to Xen configuration syntax, comment lines starts with the '#' symbol. | ||
− | |||
− | Name of domain (must be unique): | + | The configuration file, referred to as <code>erika3-xen.cfg</code>, has to include the following basic parameters, such as domain name, memory requirements, virtualization mode, serial interfaces definition and so on: |
− | + | ||
+ | - Name of domain (must be unique): | ||
name = "erika" | name = "erika" | ||
− | + | - Memory allocation (MB) for ERIKA3 (should be at least 2M): | |
− | |||
memory = 2048 | memory = 2048 | ||
maxmem = 2048 | maxmem = 2048 | ||
− | Boot disk (where <code>$ERIKA3_PATH</code> is the path of the ERIKA3 bare-metal image): | + | - Boot disk (where <code>$ERIKA3_PATH</code> is the path of the ERIKA3 bare-metal image): |
− | + | disk = [ 'file:$ERIKA3_PATH,hdc:cdrom,r' ] | |
− | disk = [ 'file: | ||
boot = "c" | boot = "c" | ||
− | Virtualization mode: | + | - Virtualization mode: |
− | |||
type = "hvm" | type = "hvm" | ||
− | Enable Xen console: | + | - Enable Xen console: |
serial = "pty" | serial = "pty" | ||
− | Network interfaces: | + | - Network interfaces: |
− | |||
vif = [ "mac=00:16:3e:51:fe:67,bridge=xenbr0,script=vif-bridge" ] | vif = [ "mac=00:16:3e:51:fe:67,bridge=xenbr0,script=vif-bridge" ] | ||
− | Domain exit behavior settings: | + | - Domain exit behavior settings: |
− | |||
on_poweroff = "preserve" | on_poweroff = "preserve" | ||
on_reboot = "destroy" | on_reboot = "destroy" | ||
Line 45: | Line 40: | ||
Building ERIKA3 for Xen requires building an ERIKA3 image for bare-metal as described [http://www.erika-enterprise.com/wiki/index.php?title=Bare-metal_x86-64_image here]. | Building ERIKA3 for Xen requires building an ERIKA3 image for bare-metal as described [http://www.erika-enterprise.com/wiki/index.php?title=Bare-metal_x86-64_image here]. | ||
− | == Run ERIKA3 as | + | The path of the generated ERIKA3 bare-metal image has to be included into the Xen configuration file. More in detail, such path, referred to as <code>$ERIKA3_PATH</code>, has to used to configure the boot <code>disk</code> configuration parameter specified in the previous section. |
+ | |||
+ | == Run ERIKA3 as Xen HVM DomU == | ||
The Xen command to start the ERIKA3 DomU is the following: | The Xen command to start the ERIKA3 DomU is the following: | ||
− | + | # xl create erika3-xen.cfg | |
where <code>erika3-xen.cfg</code> is the ERIKA3 configuration file. In order to connect to console directly when starting the ERIKA3 domU, launch the following command: | where <code>erika3-xen.cfg</code> is the ERIKA3 configuration file. In order to connect to console directly when starting the ERIKA3 domU, launch the following command: | ||
− | + | # xl create -c erika3-xen.cfg | |
− | In case of console connection to the ERIKA3 DomU that is already running, the | + | In case of console connection to the ERIKA3 DomU that is already running, the Xen command is the following: |
− | + | # xl console erika | |
where 'erika' is the domain name defined in the configuration file. | where 'erika' is the domain name defined in the configuration file. | ||
In order to poweroff the ERIKA3 DomU, the Xen command is the following: | In order to poweroff the ERIKA3 DomU, the Xen command is the following: | ||
− | + | # xl destroy erika | |
where 'erika' is the domain name defined in the configuration file. | where 'erika' is the domain name defined in the configuration file. | ||
== ERIKA3 CPUs configuration == | == ERIKA3 CPUs configuration == | ||
− | |||
In order to tune ERIKA3 DomU, Xen configuration could include CPUs affinity in order to pin ERIKA on a given CPU. Note that current implementation of ERIKA3 on x86-64 is single-core. Thus, the number of virtual CPUs is 1. Such virtual CPU can be pinned to a given physical CPU. | In order to tune ERIKA3 DomU, Xen configuration could include CPUs affinity in order to pin ERIKA on a given CPU. Note that current implementation of ERIKA3 on x86-64 is single-core. Thus, the number of virtual CPUs is 1. Such virtual CPU can be pinned to a given physical CPU. | ||
− | + | The ERIKA3 configuration file has to include the following items in order to set the CPUs affinity: | |
− | Number of virtual CPUs to use (default is 1): | + | - Number of virtual CPUs to use (default is 1): |
− | |||
vcpus = 1 | vcpus = 1 | ||
− | List of which CPUs this domain is allowed to use (in the example, it is the CPU with identifier 3): | + | - List of which CPUs this domain is allowed to use (in the example, it is the CPU with identifier 3): |
− | |||
cpus = ['3'] | cpus = ['3'] | ||
− | + | Xen hypervisor can divide the physical cpus into distinct groups, called ''cpupools'', so that each pool can have its entirely separate scheduler (e.g., null-scheduler). The "default pool" is named Pool-0 and physical CPUs can be removed from one cpupool and added to another. | |
− | + | It follows the Xen basic operations to setup and modify a cpupool: | |
+ | |||
+ | Show the cpupool list: | ||
+ | # xl cpupool-list | ||
+ | Show the cpupool list with the corresponding physical CPUs: | ||
+ | # xl cpupool-list -c | ||
+ | Setup a new empty pool using, for example, the null scheduler: | ||
+ | # xl cpupool-create name="NullPool" sched="null" | ||
+ | Move a physical CPU from default pool to the new pool: | ||
+ | # xl cpupool-cpu-remove Pool-0 3 | ||
+ | # xl cpupool-cpu-add NullPool 3 | ||
+ | |||
+ | Domains are assigned to pools on creation, and can be moved from one pool to another. | ||
+ | In order to assign ERIKA3 to a given cpupool at DomU creation, the Xen configuration has to include the following item specifying the cpupool name: | ||
+ | |||
+ | - CpuPool assignment (in the example, the Cpupool has name 'NullPool'): | ||
pool="NullPool" | pool="NullPool" | ||
− | |||
== ERIKA3 Xen Passthrough == | == ERIKA3 Xen Passthrough == |
Revision as of 12:58, 27 November 2018
Contents
Introduction
Xen is an open-source type-1 or bare-metal hypervisor, that runs directly on the hardware and is responsible for handling CPU, memory, timers and interrupts.
The hypervisor is started by the boot loader and, once it is loaded, it starts the privileged domain Dom0 (short for "domain 0") containing the drivers of the system devices. Once Dom0 has started, one or more user domains, referred to as DomU, can be started and controlled in the Dom0. Xen supports both para-virtualized (PV) and fully hardware virtualized (HVM) user domains.
This tutorial will explain how to build and run ERIKA3 as Xen hardware-virtualized DomU on the x86-64 platform.
ERIKA3 Xen configuration
This section defines the configuration parameters that are used for running ERIKA3 as Xen DomU. Note that according to Xen configuration syntax, comment lines starts with the '#' symbol.
The configuration file, referred to as erika3-xen.cfg
, has to include the following basic parameters, such as domain name, memory requirements, virtualization mode, serial interfaces definition and so on:
- Name of domain (must be unique):
name = "erika"
- Memory allocation (MB) for ERIKA3 (should be at least 2M):
memory = 2048 maxmem = 2048
- Boot disk (where $ERIKA3_PATH
is the path of the ERIKA3 bare-metal image):
disk = [ 'file:$ERIKA3_PATH,hdc:cdrom,r' ] boot = "c"
- Virtualization mode:
type = "hvm"
- Enable Xen console:
serial = "pty"
- Network interfaces:
vif = [ "mac=00:16:3e:51:fe:67,bridge=xenbr0,script=vif-bridge" ]
- Domain exit behavior settings:
on_poweroff = "preserve" on_reboot = "destroy" on_crash = "destroy"
Build ERIKA3 for Xen
Building ERIKA3 for Xen requires building an ERIKA3 image for bare-metal as described here.
The path of the generated ERIKA3 bare-metal image has to be included into the Xen configuration file. More in detail, such path, referred to as $ERIKA3_PATH
, has to used to configure the boot disk
configuration parameter specified in the previous section.
Run ERIKA3 as Xen HVM DomU
The Xen command to start the ERIKA3 DomU is the following:
# xl create erika3-xen.cfg
where erika3-xen.cfg
is the ERIKA3 configuration file. In order to connect to console directly when starting the ERIKA3 domU, launch the following command:
# xl create -c erika3-xen.cfg
In case of console connection to the ERIKA3 DomU that is already running, the Xen command is the following:
# xl console erika
where 'erika' is the domain name defined in the configuration file.
In order to poweroff the ERIKA3 DomU, the Xen command is the following:
# xl destroy erika
where 'erika' is the domain name defined in the configuration file.
ERIKA3 CPUs configuration
In order to tune ERIKA3 DomU, Xen configuration could include CPUs affinity in order to pin ERIKA on a given CPU. Note that current implementation of ERIKA3 on x86-64 is single-core. Thus, the number of virtual CPUs is 1. Such virtual CPU can be pinned to a given physical CPU. The ERIKA3 configuration file has to include the following items in order to set the CPUs affinity:
- Number of virtual CPUs to use (default is 1):
vcpus = 1
- List of which CPUs this domain is allowed to use (in the example, it is the CPU with identifier 3):
cpus = ['3']
Xen hypervisor can divide the physical cpus into distinct groups, called cpupools, so that each pool can have its entirely separate scheduler (e.g., null-scheduler). The "default pool" is named Pool-0 and physical CPUs can be removed from one cpupool and added to another. It follows the Xen basic operations to setup and modify a cpupool:
Show the cpupool list:
# xl cpupool-list
Show the cpupool list with the corresponding physical CPUs:
# xl cpupool-list -c
Setup a new empty pool using, for example, the null scheduler:
# xl cpupool-create name="NullPool" sched="null"
Move a physical CPU from default pool to the new pool:
# xl cpupool-cpu-remove Pool-0 3 # xl cpupool-cpu-add NullPool 3
Domains are assigned to pools on creation, and can be moved from one pool to another. In order to assign ERIKA3 to a given cpupool at DomU creation, the Xen configuration has to include the following item specifying the cpupool name:
- CpuPool assignment (in the example, the Cpupool has name 'NullPool'):
pool="NullPool"
ERIKA3 Xen Passthrough
[TODO]
In order to give control of physical devices to ERIKA3 domU, Xen configuration should include the configuration for PCI passthrough. Note that the chosen PCI device has to be "assignable".
For example, the Xen configuration to allow the PCI passthrough for the Ethernet device with '00:1f.6' as BDF:
## ETH1 Passthrough pci_permissive=1 pci = ['00:1f.6']