Read intro below, and/or the preparation work at the bottom of this page. Then look at actual draft spec working page.
The Automotive Virtualization Platform
To allow further success of hypervisor environments in automotive it is essential that all vendors are able to provide compelling guest runtime environments that make the usual automotive I/O devices available. The essential devices could be defined and agreed upon by the industry. If such a set of devices and device features is defined a document can be crafted that defines these devices and their features that in their combination create a virtual platform.
- The virtual platform definition would allow the development of virtual machine guests that like appliances in the enterprise world, could be moved among different hypervisor systems without (minimal) modification.
- A clear and detailed specification is required to achieve true portability, and to give real support to vendors.
Hand-waving about some virtual architecture is not our goal. The specification shall enable efficient reuse and collaborative progress among companies in this industry.
- Specifications like these are best developed as open specifications and just like open-source code, it should stand on the shoulders of previous work.
It should be built upon already published work, where VIRTIO is the most prominent we have found, but it is not enough. It is clear that the automotive industry needs to do more and that it should (will) one way or another make sure that different initiatives combine into common agreements.
The project group has discussed and found consensus on how that automotive virtual platform specification should be done:
For an automotive virtualized platform, VIRTIO is primarily a starting point because the defined devices enable running only basic system functionality but lack the multimedia and other devices often found in automotive environments.
Instead of developing additional domain or even vendor specific device frameworks and models a collaborative development could greatly reduce the individual development of project efforts and thus spur the adoption of hypervisor based environments in the automotive sector.
Additional efforts definitely need to be spent in the area of audio virtualization and the in virtualization of co-processors like DSPs, image processors and codec accelerators. Developing a standard model for the diverse buses found in cars like CAN or ethernet AVB could also be additional fields of investigation.
In the work done here (see table below) we categorize device types and ensure that each need has been thoroughly analyzed so that as an industry we can truly define the right specification, to be applicable in >95% of the typical situations.
The VIRTIO standard aims to provide a standardized interface and device models for device para-virtualization in hypervisor environments.
With development going back until 20XX the virtio device model was first introduced for the educational "lguest" hypervisor and became the default I/O virtulaization method used with qemu/KVM and recently the default model used by many cloud providers. The virtio devices have been partially standardized by the OASIS standardisation body in 2015 with the VIRTIO 1.0 specification which describes the transport layer and a limited set of device models.
The currently standardized device models are: network, block, console, entropy, memory ballooning and SCSI devices. Additionally to the formally standardized devices several additional devices exists as "implemented" devices such as GPU, input, 9pfs, vsock and crypto. Some of which are currently in the process of standardization.
Virtio relies on a dma-like memory model meaning that all allocations are handled by the "driver" part of the device and the "device" implementation can directly access the allocated buffers for reading or writing. This enables a resource saving and fast operating mode. Metadata is transported using so called virt-queues that resemble ring-buffers. Depending on the architecture used, different transport and device discovery modes are supported: PCI for x86, mmio for ARM and channel-IO for s390. These transports are geared toward the most efficient implementation per CPU architecture and allow for efficient implementations depending on the environment.
In recent years some hardware devices, like network controllers and NVMe based storage systems have evolved to be similar or compatible with the VIRTIO protocol, to allow hardware assisted I/O virtualization using para-virtualized device models.
VIRTIO's main benefit for the automotive industry lies in it's sheer existence and operating system support. The fact that standardized device models exists allows for multiple compatible implementations of both driver and server parts of the system. The ubiquity of VIRTIO in cloud and enterprise virtualization makes drivers readily available in all major operating systems which keeps driver maintenance effort to a minimum.
Due to the driver defined memory allocation model, vendors can choose to limit the resource usage and define safety properties to their own requirements without impeding the standardized model and stay interoperable with existing device implementations.
The DMA-like nature of the devices allows for high-performant implementations that the easily compete with hardware assisted I/O virtualization models while still providing relative ease of implementation.
Many vendors of automotive grade hypervisors have already adopted virtio based devices into their system offerings due to the above mentioned reasons and the benefit of building upon these open source technologies has greatly improved the availability of commodity devices like network and block storage.
GENIVI and AGLs Role
Vendor neutral industry bodies like GENVI and AGL can act a forum between hypervisor vendors, users and the hardware manufactures in a form that allows open collaboration in development and maintaining a standard platform definition.
The regular events can be used as occasions for interoperability testing and standard steering. The participation in the OASIS-VIRTIO committee can be delegated to such organization to voice the automotive industries concerns and advice in the technical committee.
GENIVI has in the past maintained domain specific APIs and standards can easily act as a body that makes sure the standard is not only maintained but also advanced as new technologies evolve.
AGL can provide the necessary collaboration with the upstream kernel project and the Linux Foundation which in-turn opens up for collaboration with the key industry players in cloud and enterprise computing.
- VIRTIO v1.0 specification. VIRTIO is the starting point for our investigation into the definition of an Automotive-Wide virtualization platform
- What's new in VIRTIO 1.1 (presentation 1, presentation 2 FOSDEM 2018 + video)
- Version 1.1 is under development - therefore we should make sure to study the latest proposals – see git master
Evaluation Process for existing specifications (e.g. VIRTIO)
For each topic:
- Discuss and write down the automotive requirements
- Read VIRTIO chapter
- Decide if VIRTIO is appropriate and complete for requirements (Gap Analysis)
- Write down what the industry needs to do to close the gap
Consider topics not yet listed (e.g. unique automotive requirements)
Note also: Bottom of this page has a "brainstorm" list of criteria to consider.
Virtual Device Categories
The key challenge for defining a shared virtual platform definition is to first identify the various device driver types such a platform must provide, and to evaluate if existing work so far (e.g. VIRTIO) covers what the automotive industry needs:
Completeness / Applicability evaluation
|Comments and discussion||Spec complete|
|Block Storage||Flash/Disk/persistent storage|
Possibly definition not enough since it is very generic. What happens below when the challenges
Kai working on evaluating these details. Let's investigate practical implementation of TRIM command, as example.
Spec Needs more of clear requirements
Access to (shared) physical ethernet
and guest-to-guest communication
Need volunteer to write chapter
include vsock stuff
|Console||Text terminal input||Gunnar|
As far as I can understand, VIRTIO should suffice.
DONE, please review
Done initial browsing of the specification. Opinions still pending.
|ready for review|
|crypto||Access to cryptographic services |
Draft spec – requirements written
Uncertainty (and lots of ongoing development) around 3D APIs - Vulkan progress, etc.
See GPU Summary page
and requirements in spec draft
|Input||Traditionally keyboard/mouse/etc |
- for automotive = expanded?
Oct 2018: Input standard being discussed for inclusion in VIRTIO but accepted in principle. Let's wait a few weeks and look at proposal once in VIRTIO.
2019-06: Updated status?
Mouse/touch events may need to remap coordinates in combined virtual systems but interface may still not be affected by this.
|vsock||Communication between guest (VM) |
and host (hypervisor)
|What does the team think of this?|
|9pfs||9P = protocol to expose host (hypervisor) |
file systems to the guest. FS=filesystem.
Completeness: Protocol: , VIRTIO spec: (see comment)
Need in Embedded/Automotive: None? Can we find a use-case?
Applicability: For what it does, seems ok. But might not be really needed and therefore "not applicable". Is there something else/more needed?
Essentially used for "shared folder" capability between host & guest, as in desktop (or maybe some server) usage. Its applicability to embedded hypervisor usage, in which the "host" is not really being used by itself) seems questionable. What's the use-case?
In VIRTIO spec: A PCI type device can indicate that it is going to use the 9P protocol. The specification also has 9P as a specific separate device type. Other than that, I found no further description of such a device type. The protocol is specified elsewhere and complemented by scattered information regarding the specific implementations (Xen, KVM, QEMU, ...)
The protocol seems proven and supposedly OK for what it does. Possibly more security features needed, depending on use-case. VIRTIO however seems to defer the definition completely to "somewhere else"? At least a reference to a canonical specification would seem appropriate.
It is a minimalistic network file-system protocol. It seems apt for the task. Other network protocols like NFS, SMB/SAMBA etc. would be too heavy. It feels a bit esoteric, and while "reinventing" is bad, in this simple case would not be the worst ever, if VIRTIO had defined something else. Flexibility and security features seem somewhat glossed over. There's basically only "fixed user" or "pass-through" for mapping ownership on files in guest/host.
A note on its documentation/definition not being very precise
Example how to set up in Linux system
OK to have such a verbose chapter?
OK to be imprecise?
IOMMU coordinates of DMA devices'
See IOMMU Summary [OUTDATED] page
Limit guest devices' scope to access system memory during DMA
Enable scatter-gather accesses due to remapping (DMA buffers do not need to be physically-contiguous)
Nested virtualization. Any use-cases for automotive?
ARM is actively working on the specification, more features are coming.
Nested virtualization? The use of Linux Containers inside a VM was mentioned. That in itself is not really nested virtualization. Namespace-based containers, is just a kernel feature providing separation independent of a hypervisor. However, Kata Containers is an approach to tie Linux containers into a hypervisor layer, making them "fully" virtualized. A theoretical situation arises that involves the use of Kata Containers on a Linux system that itself already runs in a VM. That might constitute an example of nested virtualization, but it was decided that this is not a mainstream idea, possibly not supported or feasible, and in each case likely more trouble than it is worth. "Flattening" the virtualization approach so that all units still run on one hypervisor is a likely outcome. Further research into partitioning methods is likely but for now this falls outside of a mainstream automotive virtual platform definition. We highlighted that Linux containers in their normal namespace based implementation are already a very useful system partition tool and it can be trivially applied also if the Linux kernel runs in a VM.
Some info on Linux/Xen code here:
Updates from ongoing VIRTIO standards process needed.
Automotive sensors? Radar/LiDAR/? (or are they separate ECUs?)
Standard embedded sensor (ambient light...)
Some OS have requirements - eg. Android requires orientation sensor.
CPUs/SoCs have "internal" sensors too. Relating to temperature and power mgmt. Some internal control tweaks for power management (core frequency / voltage) are like tiny internal actuators. Virtual access to those? Same or different APIs?
So far, zero feedback on SCMI proposal...
Artem proposed that Systems Control Management Interface (SCMI) protocol is flexible and an appropriate abstraction for sensors. It is also appropriate for controlling power-management and related things. The hardware access implementation is according to ARM offloaded to a "Systems Control Processor" but this is a virtual concept. It could be a dedicated core in some cases, perhaps in others not. EPAM/Xen tried out putting code in ARM-TF, to act as this SCP.
SCMI destined (?) to become a ARM-wide standard in a currently fragmented reality.
Upper protocol defined, but could imagine different lower transport. One mailbox-style transport is kind-of defined by ARM spec? Discussion if VIRTIO transport would be appropriate. A "SCMI device" type added to VIRTIO?
What about PINCTRL, and handling the many multiplexed pins in a modern SoC. Any remaining need for lower-level protocols for accessing/virtualizing hardware?
|Very short chapter so far... Not complete IMHO|
|Media Acceleration (VPUP, IPU, CODEC)||Hardware support for codec/processing|
Abstraction of SoC specifics
Example Assigning Host USB device to a Guest VM in KVM, here:
Draft chapter written – see draft spec.
Which use cases do we want to address?
•USB 2.0 (EHCI controller)
•On-The-Go (system can function as both USB host and USB device)
|Needs update – see minutes.|
Other Serial devices?
(Where does LIN, etc. fit in?)
|Spec chapter needs to be written.|
virtio-can: VIRTIO-based CAN driver
|Ethernet (incl. AvB/TSN)|
Need new volunteer to complete it, perhaps from GHS?
The required features are not present in the network virtio devices as of virtio 1.0.
Is this → applicable enough to move into specification as requirements? -->
Must have requirements:
Good to have:
General architectural considerations:
+OpenSynergy with BT experience
|Is it possible? Needed?|
|Memory Balloon Device||Gunnar||May be partly applicable - I could write something here to get us started. - Gunnar|
Random Number Generator
|Although used also for crypto. Look at what VIRTIO proposes. (Discussion should cover hardware-supported random generator, of course).|
Very important for embedded systems... Let's see what is there and what we need to do.
|Planned SBSA presentation from ARM as a starting point.|
The VIRTIO 1.0 specification is organized a bit differently, and more generic than our detailed list above. Here is a much abbreviated table of contents for VIRTIO 1.0, just to give an overview on the most important parts. Consider, especially, the limited types of devices. All defined devices are under these categories only for the 1.0 version.
2 Basic Facilities of a Virtio Device
3.1 Device Initialization
3.2 Device Operation
3.3 Device Cleanup
4 Virtio Transport Options
4.1 Virtio Over PCI Bus
4.2 Virtio Over MMIO
4.3 Virtio Over Channel I/O
5 Device Types
5.1 Network Device
5.2 Block Device
5.3 Console Device
5.4 Entropy Device
5.5 Traditional Memory Balloon Device
5.6 SCSI Host Device
7.2 Driver Conformance
7.3 Device Conformance
7.4 Legacy Interface: Transitional Device and Transitional Driver Conformance
B Creating New Device Types
When looking at a particular proposed device standard, evaluate characteristics/criteria:
- Is there a proposal for standard (specification)?
- Is it accepted in VIRTIO?
- Is it a de-facto standard?
- Implementation status
- ...In QEMU/Linux kernel?
- ...FOSS in a GitHub Repo?
- ...Commercial/closed-source implementations?
- ... Number of implementations?
- Complexity estimation?
- ... e.g. CAN Device class, vs GPU (need to consider large User-space
library, complex HALs,
- ...mostly implementation dependent? Are the technical requirements hindering implementing it efficiently, for some reason? Does it matter?
- Code Maturity?
-- ...implementation dependent, but evaluate that which exists
- Evaluate: Security aspects
- Evaluate: Functional Safety aspects
Importance for automotive use-case
- ...Is it generally applicable for many use cases or for a special case?