ACRN v0.7 (Mar 2019)

We are pleased to announce the release of Project ACRN version 0.7.

ACRN is a flexible, lightweight reference hypervisor, built with real-time and safety-criticality in mind, optimized to streamline embedded development through an open source platform. Check out the What is ACRN for more information.

All project ACRN source code is maintained in the https://github.com/projectacrn/acrn-hypervisor repository and includes folders for the ACRN hypervisor, the ACRN device model, tools, and documentation. You can either download this source code as a zip or tar.gz file (see the ACRN v0.7 GitHub release page or use Git clone and checkout commands:

git clone https://github.com/projectacrn/acrn-hypervisor
cd acrn-hypervisor
git checkout v0.7

The project’s online technical documentation is also tagged to correspond with a specific release: generated v0.7 documents can be found at https://projectacrn.github.io/0.7/. Documentation for the latest (master) branch is found at https://projectacrn.github.io/latest/.

ACRN v0.7 requires Clear Linux OS version 28260. Please follow the instructions in the Using SDC Mode on the NUC.

Version 0.7 new features

Enable cache QOS with CAT

Cache Allocation Technology (CAT) is enabled on Apollo Lake (APL) platforms, providing cache isolation between VMs mainly for real-time performance quality of service (QoS). The CAT for a specific VM is normally set up at boot time per the VM configuration determined at build time. For debugging and performance tuning, the CAT can also be enabled and configured at runtime by writing proper values to certain MSRs using the wrmsr command on ACRN shell.

Support ACPI power key mediator

ACRN supports ACPI power/sleep key on the APL and KBL NUC platforms, triggering S3/S5 flow, following the ACPI spec.

Document updates

Several new documents have been added in this release, including:

  • ACRN Roadmap: look ahead in 2019
  • Performance analysis of VBS-k framework
  • HLD design doc for IOC virtualization
  • Additional project coding guidelines

New Features Details

  • 940 - Device: IPU support
  • 1138 - Debug: NPK
  • 1186 - Disable VBS_DEBUG to improve VBS-K performance
  • 1508 - DM: customized changes for RPMB mux kernel module
  • 1536 - dm: add virtio_mei mediator
  • 1544 - dm: rpmb: Support RPMB mode config from launch.sh
  • 1812 - export kdf_sha256 interface from crypto lib
  • 1815 - improve emulation of I/O port CF9
  • 1915 - Enable Audio Mediator
  • 1953 - Add cmdline option to disable/enable vhm module for guest
  • 2176 - Fix RTC issues in ACPI
  • 2319 - Add vHPET support
  • 2351 - Enable post-launched hybrid mode
  • 2407 - Coding style changes for IOAPIC and MSI representation
  • 2426 - Enable Interrupt Remapping feature
  • 2431 - VPCI code cleanup
  • 2448 - Adding support for socket as a backend for Virtio-Console
  • 2462 - Enable cache QOS with CAT
  • 2496 - VTD/IOMMU Modularization

Fixed Issues Details

  • 1319 - SD card pass-through: UOS can’t see SD card after UOS reboot.
  • 1774 - UOS cannot stop by command: acrnctl stop [vm name] in SOS
  • 1780 - Some video formats cannot be played in SOS.
  • 1782 - UOS failed to get ip with the pass-throughed network card
  • 1999 - [APLNUC][KBLNUC][APLUP2]UOS reset fails with acrnctl reset command
  • 2276 - OVMF failed to launch UOS on UP2
  • 2298 - Hard codes path to iasl
  • 2316 - Tools don’t respect CFLAGS/LDFLAGS from environment
  • 2338 - [UP2]Lost 2G memory in SOS when using SBL as bootloader on UP2
  • 2370 - Doesn’t use parallel make in subbuilds
  • 2422 - [PATCH] profiling: fix the system freeze issue when running profiling tool
  • 2453 - Fix vHPET memory leak on device reset
  • 2455 - host call stack disappear when dumping
  • 2516 - [UP2][SBL] System hang with DP monitor connected
  • 2528 - [APLUP2] SBL (built by SBL latest code) failed to boot ACRN hypervisor
  • 2543 - vLAPIC: DCR not properly initialized
  • 2548 - [APLNUC/KBLNUC][GVT][SOS/LAAG] Weston fails to play video in SOS and UOS
  • 2572 - Startup SOS Fails
  • 2588 - Uninitialized Variable is used in acrn_kernel/drivers/acrn/acrn_trace.c and acrn_hvlog.c
  • 2606 - HV crash during running VMM related Hypercall fuzzing test.
  • 2624 - Loading PCI devices with table_count > CONFIG_MAX_MSIX_TABLE_NUM leads to writing outside of struct.
  • 2643 - Ethernet pass-through, network card can’t get ip in uos
  • 2674 - VGPU needs the lock when updating ppggt/ggtt to avoid the race condition
  • 2695 - UOS powers off or suspend while pressing power key, UOS has no response

Known Issues

1773 - USB Mediator: Can’t find all devices when multiple USB devices connected [Reproduce rate:60%]

After booting UOS with multiple USB devices plugged in, there’s a 60% chance that one or more devices are not discovered.

Impact: Cannot use multiple USB devices at same time.

Workaround: Unplug and plug-in the unrecognized device after booting.


1991 - Input not accepted in UART Console for corner case

Input is useless in UART Console for a corner case, demonstrated with these steps:

  1. Boot to SOS
  2. ssh into the SOS.
  3. use ./launch_UOS.sh to boot UOS.
  4. On the host, use minicom -s dev/ttyUSB0.
  5. Use sos_console 0 to launch SOS.

Impact: Fails to use UART for input.

Workaround: Enter other keys before typing Enter.


1996 - There is an error log when using acrnd& to boot UOS

An error log is printed when starting acrnd as a background job (acrnd&) to boot UOS. The UOS still boots up normally, but prints:

Failed to open the socket(sos-lcs) to query the reason for the wake-up.
Activating all vms when acrnd & to boot uos.

Impact: UOS boots normally, but prints an error log message.

Workaround: None.


2267 - [APLUP2][LaaG] LaaG can’t detect 4k monitor

After launching UOS on APL UP2 , 4k monitor cannot be detected.

Impact: UOS can’t display on a 4k monitor.

Workaround: Use a monitor with less than 4k resolution.


2278 - [KBLNUC] Cx/Px is not supported on KBLNUC

C states and P states are not supported on KBL NUC.

Impact: Power Management state-related operations in SOS/UOS on KBL NUC can’t be used.

Workaround: None


2279 - [APLNUC] After exiting UOS with mediator

Usb_KeyBoard and Mouse, SOS cannot use the USB keyboard and mouse.

These steps reproduce the issue:

  1. Insert USB keyboard and mouse in standard A port (USB3.0 port)

  2. Boot UOS by sharing the USB keyboard and mouse in cmd line:

    -s n,xhci,1-1:1-2:1-3:1-4:2-1:2-2:2-3:2-4 \

  3. UOS access USB keyboard and mouse.

  4. Exit UOS.

  5. SOS tries to access USB keyboard and mouse, and fails.

Impact: SOS cannot use USB keyboard and mouse in such case.

Workaround: Unplug and plug-in the USB keyboard and mouse after exiting UOS.


2522 - [NUC7i7BNH] After starting IAS in SOS, there is no display

On NUC7i7BNH, after starting IAS in SOS, there is no display if the monitor is connected with a TPC-to-VGA connector.

Impact: Special model [NUC7i7BNH] has no display in SOS.

Workaround: None.


2523 - UOS monitor does not display when using IAS

There is no UOS display after starting IAS weston.

Impact: Cannot use IAS weston in UOS.

Workaround:

  1. Use weston instead of IAS weston: swupd install x11-server

  2. Use acrn-kernel to rebuild SOS kernel to replace integrated kernel. Confirm “DRM_FBDEV_EMULATION” related configs in kernel_config_sos are:

    CONFIG_DRM_KMS_FB_HELPER=y
    CONFIG_DRM_FBDEV_EMULATION=y
    CONFIG_DRM_FBDEV_OVERALLOC=100
    

The issue will be fixed in the next release.


2524 - [UP2][SBL] Launching UOS hangs while weston is running in SOS

When using weston in SOS, it will hang during the UOS launch.

Impact: launching UOS hangs, and then no display in UOS.

Workaround: Use acrn-kernel to rebuild SOS kernel to replace the integrated kernel. Confirm “DRM_FBDEV_EMULATION” related configs in kernel_config_sos are:

CONFIG_DRM_KMS_FB_HELPER=y
CONFIG_DRM_FBDEV_EMULATION=y
CONFIG_DRM_FBDEV_OVERALLOC=100

The issue will be fixed in the next release.


2527 - [KBLNUC][HV]System will crash when run crashme (SOS/UOS)

System will crash after a few minutes running stress test crashme tool in SOS/UOS.

Impact: System may crash in some stress situations.

Workaround: None


2526 - Hypervisor crash when booting UOS with acrnlog running with mem loglevel=6

If we use loglevel 3 6 to change the mem loglevel to 6, we may hit a page fault in HV.

Impact: Hypervisor may crash in some situation.

Workaround: None


2753 - UOS cannot resume after suspend by pressing power key

UOS cannot resume after suspend by pressing power key

Impact: UOS may failed to resume after suspend by pressing the power key.

Workaround: None

Change Log

These commits have been added to the acrn-hypervisor repo since the v0.6 release in Feb 2019 (click on the CommitID link to see details):

  • c72e2e8c - doc: use the new board name for UP2 in create-up2-images.sh script
  • 56afe97e - doc: fix broken external links
  • e263b554 - HV: Fix modularization vm config code lost CAT code
  • 703b366c - dm: use power button acpi device to find its input event
  • 8a324060 - ACRN: dm: Fix launch UOS script “-d” parameter fail issue
  • 06118998 - OVMF release v0.7
  • 6794660e - HV: use the common functions defined in vdev.c to reduce duplicate code
  • be3fbaa4 - HV: add generic vdev functions to vdev.c
  • 731b0444 - HV: rename core.c to vdev.c
  • 819bcec6 - HV: remove sharing_mode_vdev_array from sharing_mode.c
  • 00f9b850 - HV: move pci_vdevs[] array from vm.h to vpci.h
  • 8c3cfe62 - doc: add VBSK overhead analysis doc
  • 30159d5b - doc: add some rules related to coding style
  • ff65a103 - HV: vm_configs array refinement
  • 0d90515b - HV: refine is_lapic_pt
  • 1bb15c64 - HV: modularization vm config code
  • 35dfadc9 - dm: check SCI_EN bit of pm1_control before trigger SCI
  • 566e8824 - dm: power button emulation by acrnctl command.
  • 32a7b4f1 - doc: add IOC virtualization HLD
  • c69dab0a - hv: add support of EPT mapping of high MMIO
  • 29b1ebcd - dm: add support of high MMIO mapping
  • 32925c10 - dm: allocate 64bit MMIO above 4G strictly to pass OVMF check
  • aed75145 - dm: Limit 64 bits PCI BAR region address space
  • 7628e790 - DM: virtio-gpio: use virtio_base as the first member of virtio_gpio
  • a89c41dd - HV: cleanup header files under hypervisor/common
  • 3cb5542b - HV: cleanup header files under hypervisor/dm
  • e2995538 - tools: acrn-crashlog: new file to count all events happened in system
  • 73e53232 - tools: acrn-crashlog: stop only collecting logs when exceeding configured size
  • e38ff18b - hv:cleanup header files for release folder
  • 33ecdd73 - Makefile: undefine _FORTIFY_SOURCE prior using it
  • 3b2784ec - HV: CAT: support config CAT from acrn_vm_config
  • 43ee5590 - HV: CAT: capability enumeration
  • cf524e68 - HV: CAT: add platform specified info for CLOS
  • ae34fdd8 - doc: fix misspellings
  • a9482f46 - tweak GSG
  • 2e60adef - hv: vmcs: simplify update EOI-exit bitmap
  • 501b3f7e - hv:cleanup header files for debug folder
  • 511d4c15 - hv:cleanup console.h
  • cca87579 - hv: remove the duplicated init_vm_boot_info() for partition mode
  • cf1515d6 - hv: optimize the assignment of load addresses for multiboot images
  • 3f0ff2ec - hv: search additional argument when parsing seed from ABL
  • f5504e80 - HV: vpci_vdev_array cleanup
  • a25f1a40 - HV: remove default folder in configs
  • f9b5e21b - HV: rename board name of up2 to apl-up2
  • 94e12275 - hv: code style fix for partition mode specific code
  • 8478a328 - HV: return an error code when REQ state mismatch in acrn_insert_request
  • 68652104 - ACRN: dm: Modify runC default rootfs directory
  • 55cb7770 - ACRN: dm: Add new capabilities for runC container
  • 5690b762 - ACRN: dm: Change runC container’s start arguments
  • 6e919d2a - ACRN: dm: Add launch container method in script
  • f95da183 - dm: acrn-tool: Add del runC configuration in acrnctl del
  • a0efd3e5 - dm: acrn-tool: Add new parameter for acrnctl add
  • 2f7ed65f - DM: Attestation Keybox support in SOS DM
  • 987ddafa - hv: vlapic: refine apicv_post_intr to internal function
  • 5dd6e79f - hv: vlapic: refine vlapic_enabled to internal function
  • e218efd5 - hv: vm: move vm_active_cpus to vm.h
  • 780f520f - DM: virtio-gpio: return a valid length for GPIO request
  • 8bc0e128 - HV: remove pbdf from struct pci_vdev
  • 4d119853 - HV: define function bdf_is_equal() to compare bdf
  • 02866353 - HV: fix comments issue
  • 1454dd37 - HV: this patch fixes bar address non-zero checking for 64-bit bars
  • b43f5cba - tools: do not include unnecessary files in release build
  • eee7d8e7 - hv: debug: mark the mmio address for npk log as hv owned
  • bd1e7a46 - hv:cleanup header files for arch folder
  • ac7a8a72 - hv:merge MACROs E820_MAX_ENTRIES and NUM_E820_ENTRIES
  • fb92d55b - doc: fix formatting of up2 doc
  • 1d783d3d - doc: add 0.6 to doc version menu
  • 4928be5f - doc: update partition mode config on up2
  • 02ae775b - hv: pae: fix a issue of loading pdptrs when handle cr4
  • 25385241 - hv: pae: fix bug when calculate PDPT address
  • 21ae3e74 - DM: virtio-gpio: add print log
  • 6b0643b5 - DM: virtio-gpio: implementation of gpio operations
  • 77e17b5d - DM: virtio-gpio: gpio initialization.
  • 57029315 - DM: virtio-gpio: virtio framework implementation.
  • 5300e911 - config: enable parsing dmar table dynamically on UP2
  • 8e8ed07d - dm: implement power button for power management
  • b24a8a0f - hv:cleanup header file for guest folder
  • 75f6cab5 - hv:cleanup header file for per_cpu.h
  • c093638b - hv:merge two header files to one with the same name
  • 04c30fb3 - hv:move 2 APIs from hypervisor.h to guest_memory.c
  • 07656a9c - DM: modify acpi for IASL to support ACPI6.3
  • 827fffed - hv: exception: fault type exception should set resume flag in rflags
  • 26385183 - acrn.conf: clean-up SOS kernel options (EFI platforms)
  • caab595e - hv: vlapic: properly initialize DCR
  • 614b2ea8 - version: 0.7-unstable