Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >智能汽车虚拟化技术(下)

智能汽车虚拟化技术(下)

作者头像
刘盼
发布于 2023-12-13 00:55:01
发布于 2023-12-13 00:55:01
8340
举报
文章被收录于专栏:人人都是极客人人都是极客

前言:

上篇内容主要介绍了虚拟化技术本身的基本概念,以及车载虚拟化技术的一些特点。而本篇的内容则主要围绕一些虚拟化的技术路线以及行业内的部分应用来展开,同时也带来我们的虚拟机管理器产品(Photon Hypervisor)的介绍。

Hypervisor 与虚拟机协作技术路线

(1)全虚拟化

最初的虚拟化是通过软件模拟具有完整硬件系统功能的、运行在一个隔离环境中的计算机系统,即通过软件虚拟硬件设备提供给GuestOS使用,优点是GuestOS不感知外部真实硬件环境、不用改动。

由于GuestOS中每次访问全虚拟化硬件都要陷入到Hypervisor中,直接导致该方式虚拟的硬件性能较差,一般只用来模拟如串口等比较简单的硬件。对硬件的模拟可以在Hypervisor中直接模拟,也可以将请求传递到其他VM中进行模拟,如在某一VM中通过QEMU进行模拟。

(2)硬件辅助虚拟化

Intel最早提出硬件辅助虚拟化技术,由硬件直接提供共享功能,支持多GuestOS的访问,减少软件虚拟技术带来的延时和性能损耗。

Intel提出了分别针对处理器&内存、IO、网络的Intel VT-x、Intel VT-d和Intel VT-c技术等。随着ARM算力提升,从移动端向边缘、甚至云算力中心发展,ARM也在不断增强其硬件辅助虚拟化技术,比如stage2页表转换、虚拟异常等。

(3)半虚拟化

在硬件辅助虚拟化技术不完善、不强大的发展阶段,或者对于某些复杂外设的共享复用,为避免全虚拟化的性能问题,可以采用GuestOS与Hypervisor协作的半虚拟化技术。

这种技术一般应用于IO设备虚拟化,采用前后端的方式来实现IO设备虚拟化,在GuestOS中实现前端驱动,在Hypervisor或HostOS中实现后端驱动,前后端一般按照VirtIO标准来实现,后端驱动作为硬件的实际访问方。

GuestOS中前端驱动通过Virt Queue等通信机制与后端驱动进行通信,前端驱动将Guest OS的请求传递给后端驱动,后端驱动将请求发送给硬件驱动,处理完后将结果再传回给前端驱动。半虚拟化相对全虚拟化实现的硬件性能较好,且可实现相对比较复杂的硬件,比如 : 块设备,网卡,显示设备等。

Hypervisor支持将硬件资源直接分配给其上虚拟机中GuestOS使用,无需通过Hypervisor进行地址和指令翻译。例如 : 串口资源、USB资源等接口比较丰富的资源可以通过Pass-through直接分配给某虚拟机使用。

设备控制器一般都是以MMIO方式来访问的,所以只需要将控制器地址区域映射到VM就可实现设备控制器的分配,同时还需要分配一个设备硬件中断对应的虚拟中断到该VM,直接透传的方式就是VM独占访问该硬件,所以在性能上是最好的。

而针对车载虚拟化场景,硬件辅助虚拟化和半虚拟化都有涉及。

因为目前用的ARM64架构的硬件是支持硬件辅助虚拟化的,但整体方案上基本上都是用半虚拟化的方案。

车载虚拟化产品

车载虚拟化Hypervisor产品目前国内外有多家厂商在做,比如国外的QNX Hypervisor, Opensynergy, ACRN Hypervisor, Mentor Hypervisor等,国内的RAITE Hypervisor, Alios Hypervisor以及国科础石的Photon Hypervisor等。

而面向汽车量产,业内主流的方案基本上是QNX Hypervisor产品。

QNX Hypervisor属于微内核架构,同时也适配多个平台(高通、瑞萨、恩智浦、瑞芯微等),目前在国内市场我们看到采用“QNX Hypervisor+高通8155”的组合方案相对比较多。

目前成熟的方案运行在座舱域的比较多,而在舱驾融合的趋势下,底层通过Hypervisor进行隔离,将自动辅助驾驶、智能座舱和高性能计算网关运行在一个SOC硬件上将是未来的重要方向。

虚拟机管理器(Photon Hypervisor)

础光虚拟机管理器是国科础石推出的Hypervisor产品,是基于I型Hypervisor宏内核架构,可支持同时运行LinuxAndroid和RTOS等多个虚拟机操作系统,实现CPU、内存、外设等硬件资源在操作系统间的有效隔离,满足功能安全和信息安全的要求。

虚拟机管理器主要由如下三个部分构成:

  1. 虚拟化功能
  • CPU虚拟化:运行在ARMv8不同EL等级
  • 内存虚拟化:基于内存两阶段映射VTTBR
  • 中断虚拟化:基于GICv2/GICv3虚拟化扩展功能
  • 设备虚拟化:在hypervisor层实现驱动和后端 / 代理方式
  1. 基础内核
  • 内核动态内存管理
  • 基于优先级可抢占实时调度
  • 中断支持GICv2/GICv3
  • 支持驱动框架,支持clk,emmc等驱动
  1. BSP
  • 支持dts硬件资源配置
  • 板卡相关驱动,如串口

虚拟机管理器(Photon Hypervisor)部分核心功能

  1. CPU虚拟化

CPU虚拟化就是可以通过多个虚拟机共享物理CPU资源,对虚拟机中的敏感指令进行截获并模拟执行。

础光虚拟机管理器的CPU虚拟化原理是基于ARMV8的异常等级,Hypervisor通常是运行在EL2等级,GuestOS的内核是运行在EL1等级,GuestOS的用户态运行在EL0等级,实际上CPU虚拟化主要是解决不同的态之间切换的问题。

实际上操作系统只有异常(含中断)发生或异常(含中断)处理返回时,才能进行EL切换。

当异常发生:

有两种选择,停留在当前的EL,或者跳转到更高的EL,EL不能降级。

EL0 => EL1: SVC (system call)

EL1 => EL2: HVC (hypervisor call)

EL2 => EL3: SMC (secure monitor call)

当异常返回:

有两种选择,停留在当前EL,或者跳到更低的EL。

可以通过ERET(异常返回, 使用当前的SPSR_ELx和ELR_ELx)跳到更低的EL。在ELR_ELx中保存了返回的地址,SPSR_ELx中的M[3:0]中保存了异常返回的异常层级。

下图可能就会更直观一点。

一个虚拟机实际上是由多个VCPU来组成的,那么从Hypervisor这个角度来讲的话,实际上每个VCPU是对应到一个task任务上来的。

Hypervisor本身是一个实时操作系统,包含进程管理、进程调度等功能。task实际上分为两种:

  • 一种就是普通task,比如在Hypervisor上会有一些工作队列的task,这种task主要是为Hypervisor自身服务的,我们可以称之普通task,它的特点是和VCPU不做关联,
  • 还有一种 task 会跟VCPU做关联,也就是说一个VCPU会对应到一个task,最终在Hypervisor这层的调度都是以task为单位进行的。

下图可以简单解释task 之间切换的过程。

普通的task切换是从pre-task到next-task,在这里面会去做一些寄存器的保存以及寄存器的恢复。

如果涉及到VCPU的切换的话,除了需要保存和恢复task相关的寄存器,还需要额外保存和恢复与VCPU相关的vgic、虚拟时钟等寄存器。这里面也包括几种情况:

  • vcpu --> task 保存vcpu上下文
  • task --> vcpu 恢复vcpu上下文
  • vcpu --> vcpu 保存&恢复vcpu上下文
  • task --> task 不涉及vcpu上下文
  1. 内存虚拟化

础光虚拟机管理器内存虚拟化是基于ARMv8内存虚拟化的两阶段映射。虚拟机通过TTBRn_EL1完成Stage 1的地址转换,将虚拟机使用的VA转换成intermediate physical address(IPA,中间物理地址)。然后再通过VTTBR_EL2完成Stage 2的地址转换,将IPA转换成PA。Hypervisor内核运行在EL2,其使用的内存通过TTBR0_EL2完成地址映射。从而完成最终物理地址的映射。

下图更加直观,最左边是虚拟机视角,它里面除了内核,还有一些外设的映射,这里面看到的是虚拟机的虚拟地址。然后通过第一级映射(stage 1)转化成虚拟机的物理地址,然后再通过第二级映射(stage 2)最终转化成在HostOS上的物理地址,也就是硬件能看到的地址。

具体虚拟机IPA不同类型地址的映射方式可参照下图:

不同种类的虚拟机IPA地址会以不同的映射方式最终对应到硬件上。比如:

  • Flash:虚拟flash,用于存放虚拟机相关镜像文件,内存由Hypervisor动态申请,非1:1映射
  • gicd:中断虚拟化的模拟设备,不需要映射到真实内存,在Hypervisor中做读写模拟
  • RAM:虚拟机RAM内存,在stage 2映射时做1:1映射
  • 外设MMIO:外设MMIO内存,在stage 2映射时做1:1映射
  1. 中断虚拟化

础光虚拟机管理器的中断虚拟化最底层基于GICv2/GICv3的虚拟化扩展的特性来做的。我们以GICv3为例,它有redistributor模块,我们可以理解每一个都会对应物理的CPU,为了支持虚拟化,除了提供physical CPU interface之外,也有virtual CPU interface。我们做中断虚拟化主要就是用了virtual CPU这部分特性。

那么如何实现的呢,我们还是以GICv3为例进行说明,整体的过程就是:

1)物理中断从Redistributor发往物理CPU Interface。

2)Hypervisor读取中断信息,决定中断是否发给虚拟CPU Interface。

3)Hypervisor设置LR寄存器,注入虚拟中断。

4)在虚拟机EL1产生中断,虚拟机处理该中断。

  1. 设备虚拟化

上面的CPU虚拟化、内存虚拟化以及中断虚拟化属于Hypervisor最基本的功能,但其实整个Hypervisor的难点和重点在于设备虚拟化。

怎么理解设备虚拟化?举个例子来说,比如说硬件上除了包含CPU、内存和一些中断功能控制器之外,其实还有很多外设,比如USB,音频,摄像头等等设备,我们怎么样吧这些外设给虚拟机用,这里面就需要用到设备虚拟化的功能。

目前可以采用设备透传和设备共享两种方案,他们的区别在于:

  • 设备透传——设备被某个虚拟机独享
  • 设备共享——设备可以在多个虚拟机间共享

举个例子,比如在多个虚拟机的场景下,硬件只有一个网卡,当虚拟机需要对外通讯的时候,通过设备透传的方案,那么只能把网卡给一个虚拟机使用,而设备共享的话则是可以多个虚拟机共享使用。

在我们的产品中,主要还是采用设备共享的方式实现设备虚拟化。

关于设备共享,目前业内主要是两种方案,即host后端方式代理后端方式。

两种方式的区别在于一种是把后端做到Hypervisor这层,另外一种方式就是把后端做到其中的一个GuestOS里面去。两种方式各有利弊,首先host后端方式的好处是虚拟机重启相互不会影响,也不需要修改虚拟机的内核,但需要与芯片/驱动厂商深度合作,一方面通用性和适配的工作量很大,同时也需要在Hypervisor增加很多模块使其相对复杂,带来不稳定性。

而代理后端方式则相反,可以充分利用Linux的成熟生态,另外把后端做到GuestOS以后Hypervisor只实现代理框架,更轻量化,通用性强;但虚拟机VM0如果重启会影响其他虚拟机,同时也需要修改虚拟机(后端)的内核。

我们的Hypervisor产品则可以根据不同的硬件适配情况选择更优的方式实现设备虚拟化。

当然,设备虚拟化这里还有更多更具体的核心功能,同时也有除上述虚拟化功能之外的其他功能点,但篇幅有限,暂不做过多介绍了。

随着产品开发的不断深入,目前我们的虚拟机管理器产品已完成多家主流芯片厂商的适配,并在功能安全认证方面不断努力,接下来也会持续位大家带来同步产品的进展情况,请大家持续关注。

如果有想更多了解虚拟机管理器(Photon Hypervisor)产品的小伙伴,可以后台留言,我们将与您进一步交流。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-12-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 人人都是极客 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
虚拟化技术的总结
虚拟化是一种广泛使用的技术,支撑了几乎所有现代云计算和企业基础设施。开发人员基于虚拟化功能可以在单台机器上运行多个操作系统,从而完成软件测试而不会存在破坏主计算环境的风险。虚拟化为芯片和基础设施带来了许多特性,包括良好的隔离性、不同资源的可及性、同一资源的工作负载平衡、隔离保护等。
刘盼
2023/01/05
1.6K0
虚拟化技术的总结
ARMv8虚拟化基础知识
本文描述了ARMv8-64的虚拟化支持。讨论主题包括stage-2地址转换、虚拟异常和陷入。
Tupelo
2022/08/15
2.6K0
ARMv8虚拟化基础知识
Armv8架构虚拟化介绍
本文描述了Armv8-A AArch64的虚拟化支持。包括stage 2页表转换,虚拟异常,以及陷阱。本文介绍了一些基础的硬件辅助虚拟化理论以及一些Hypervisor如何利用这些虚拟化特性的例子。文本不会讲述某一具体的Hypervisor软件是如何工作的以及如何开发一款Hypervisor软件。通过阅读本文,你可以学到两种类型的Hypervisor以及它们是如何映射到Arm的异常级别。你将能解释陷阱是如何工作的以及其是如何被用来进行各种模拟操作。你将能描述Hypervisor可以产生什么虚拟异常以及产生这些虚拟异常的机制。理解本文内容需要一定基础,本文假定你熟悉ARMv8体系结构的异常模型和内存管理。
用户9732312
2022/05/13
8050
Armv8架构虚拟化介绍
大模型与AI底层技术揭秘(21)幽灵的暗流
我们在以前提到过,Intel通过多核技术,推翻了PowerPC,SPARC等大小型机的反动统治,将计算技术带入了一个崭新的时代,并迅速在服务器领域占据统治地位。
用户8289326
2024/02/05
2100
大模型与AI底层技术揭秘(21)幽灵的暗流
智能汽车虚拟化技术(上)
随着数字智能化技术的发展,汽车功能呈现多样化和集中化的特点,架构上从分散式架构到域融合架构,再到中央计算平台,集中化的演进趋势已成为行业共识。
刘盼
2023/12/13
6470
智能汽车虚拟化技术(上)
【重识云原生】计算第2.4节——主流虚拟化技术之KVM
KVM:Kernel-based Virtual Machine,是基于Linux内核的开源虚拟化解决方案,从2.6.20版本开始被合入kernel主分支维护。最初只支持X86平台的上支持VMX或者SVM的CPU,不久后被确认为标准Linux内核的虚拟化方案并逐步支持S390、IA64和PowerPC等体系架构;KVM本身只提供部分的虚拟化功能(虚拟CPU和内存),而由经过特殊改造后的Qemu(Qemu-kvm)来帮助下提供完整的平台虚拟化功能。
江中散人_Jun
2022/04/08
3.1K0
【重识云原生】计算第2.4节——主流虚拟化技术之KVM
【虚拟化】虚拟化简介 | Hypervisor介绍
一、什么是虚拟化 虚拟化是一种能够更有效地利用物理计算机硬件的过程,是云计算的基础。
张哥编程
2024/12/07
4670
TrustZone是如何保证硬件安全的?
从技术角度来说,一讲到TEE就会提到TrustZone,这是因为虽然TEE OS实现有多种多样,主芯片厂商也有好几种,但是大部分都是基于Arm的TrustZone架构。
安智客
2018/07/30
3.4K0
TrustZone是如何保证硬件安全的?
【原创】Linux虚拟化KVM-Qemu分析(七)之timer虚拟化
timer就像是系统的脉搏,重要性不言而喻。ARMv8架构处理器提供了一个Generic Timer,与GIC类似,Generic Timer在硬件上也支持了虚拟化,减少了软件模拟带来的overhead。
huofo
2022/03/17
1.8K0
【原创】Linux虚拟化KVM-Qemu分析(七)之timer虚拟化
云计算——ACA学习 虚拟化技术产品介绍
虚拟化解决方案除了KVM之外,还有很多成熟的解决方案,包括XEN,VM,hyperV等。
网络豆
2023/12/21
3090
云计算——ACA学习 虚拟化技术产品介绍
虚拟化与云计算硬核技术内幕 (12) —— 独立自主,自力更生 (中)
在上期,大家了解了虚拟机中的纯虚拟化设备(Emulation)和半虚拟化(Para-virtualiazation)是如何工作的。
用户8289326
2022/09/08
8980
虚拟化与云计算硬核技术内幕 (12) —— 独立自主,自力更生 (中)
Amazon EC2 虚拟化技术演进:从 Xen 到 Nitro
今年2月,由光环新网运营的AWS 中国(北京)区域和由西云数据运营的 AWS 中国(宁夏)区域发布新的实例类型,新的实例类型包括C5、C5d、R5、R5d。除了这四种之外,在AWS国外部分区域还上线了最新的C5n。
SammyLiu
2019/06/28
7.1K0
Amazon EC2 虚拟化技术演进:从 Xen 到 Nitro
docker--虚拟化
在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的各种 实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结 构间的不可切割的障碍,使用户可以比原本的组态更好的方式来应用这些资源。这些资 源的新虚拟部份是不受现有资源的架设方式,地域或物理组态所限制。一般所指的虚拟 化资源包括计算能力和资料存储。
eadela
2019/11/22
7650
【重识云原生】第2.3节——主流虚拟化技术之Xen[汇总整理]
Xen是由剑桥大学计算机实验室开发的一个开源项目,是一个开源的可直接运行于硬件层之上的虚拟化软件,它属于type-I型虚拟化系统,支持万贯虚拟化和超虚拟化,以高性能、占用资源少著称,赢得了IBM、AMD、HP、Red Hat和Novell等众多世界级软硬件厂商的高度认可和大力支持,已被国内外众多企事业用户用来搭建高性能的虚拟化平台。
江中散人_Jun
2022/03/18
1.7K0
【重识云原生】第2.3节——主流虚拟化技术之Xen[汇总整理]
内核级虚拟化技术
这篇可能讲的有一点点的无聊,因为基本上是概念性的东西,我也是理解了很久才慢慢的搞懂的。 一、虚拟化与虚拟化技术   1.1、虚拟化的定义   虚拟化主要指的是特殊的技术,通过隐藏特定计算平台的实际物理
用户1195962
2018/01/18
2K0
内核级虚拟化技术
虚拟化分类与 I/O 虚拟化技术概述
虚拟化技术是实现云计算的基石,虚拟化技术主要由三项关键技术构成:CPU 虚拟化、内存虚拟化和 I/O 虚拟化。I/O 虚拟化作为计算、网络与存储的技术交织点,其重要性与复杂性不言而喻。
通信行业搬砖工
2023/09/06
7810
虚拟化分类与 I/O 虚拟化技术概述
Intel 虚拟化技术(Intel® VT):CPU 虚拟化与内存虚拟化
目前主要的 CPU 虚拟化技术是 Intel 的 VT-x/VT-i 和 AMD 的 AMD-V 这两种技术。
Flowlet
2023/08/11
3.9K0
Intel 虚拟化技术(Intel® VT):CPU 虚拟化与内存虚拟化
Linux阅码场 - Linux内核月报(2020年11月)
Linux阅码场内核月报栏目,是汇总当月Linux内核社区最重要的一线开发动态,方便读者们更容易跟踪Linux内核的最前沿发展动向。
Linux阅码场
2020/12/29
1.3K0
Linux阅码场 - Linux内核月报(2020年11月)
虚拟化技术总览
虚拟化本质上是软/硬件层的抽象 说起虚拟化,相信大家应该都不陌生,像虚拟内存、Java 虚拟机、Android 模拟器这些都是虚拟化技术的体现,为什么这样说,这个就要回到虚拟化技术的本质上——虚拟化就
Linux云计算网络
2018/01/11
2.1K0
虚拟化技术总览
CPU硬件辅助虚拟化技术
目前主要有Intel的VT-x和AMD的AMD-V这两种技术。其核心思想都是通过引入新的指令和运行模式,使VMM(Virtual-machine monitor)和Guest OS分别运行在不同模式(ROOT模式和非ROOT模式)下,且Guest OS运行在Ring 0下。通常情况下,Guest OS的核心指令可以直接下达到计算机系统硬件执行,而不需要经过VMM。当Guest OS执行到特殊指令的时候,系统会切换到VMM,让VMM来处理特殊指令。 1、Intel VT-x技术
孙杰
2019/10/29
3.7K0
CPU硬件辅助虚拟化技术
相关推荐
虚拟化技术的总结
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档