嵌入式开发:通过嵌入式虚拟化充分利用多芯片

更新时间: 2023-02-10 10:23:46来源: 粤嵌教育浏览量:7484

  嵌入式虚拟化为实现多核处理能力的优势提供了一种可扩展的机制。嵌入式应用中的虚拟化与其企业和桌面应用有许多共同之处。独特的嵌入式使用案例和专业的底层技术为嵌入式开发人员提供了优化性能和响应设计的新机会。

  在台式机、数据中心以及现在的嵌入式设计中采用多核技术可以满足类似的需求——在不提高系统时钟的情况下扩展计算能力,并为下一代设备和应用实现更高的每瓦MIPS。

  台式机和数据中心的主流多核需要部署的操作系统(OS)提供对称多处理(SMP)支持。Linux内核支持SMP已经快十年了,支持SMP的Windows和Mac OS版本如今也在广泛使用。

  相比之下,在嵌入式开发中,嵌入式操作系统正试图赶上支持多核CPU。即使操作系统越来越擅长在多核环境中运行,应用程序和中间件仍然面临线程安全、并发性和负载平衡的挑战。

  虚拟化软件架构

  为了解决这些挑战,出现了不同的虚拟化策略,从类型I和类型II开始,如图1所示。在第一类虚拟化中,虚拟机管理程序“拥有”CPU,并负责引导和运行客户操作系统。I型平台是“精益的”, 我的意思是,“成熟,从大型机和小型机的几代发展中出现,现在是移动设备。相比之下,VMware Fusion、Parallels和Sun VirtualBox等平台提供的第二类虚拟化侧重于最终用户体验,虚拟机管理程序作为应用程序在另一个操作系统上运行,没有性能保证。

  

  嵌入式虚拟化遵循自己的范例。在路由器、交换机和网关等基础设施应用中,用例类似于企业。I类虚拟机管理程序托管Linux或实时操作系统(RTOS)的实例,以在冗余高可用性架构中的单个硬件或虚拟备件上支持虚拟设备(防火墙、深度包检查器和其他设备)。

  在移动设备中,原始设备制造商使用裸机虚拟化来整合多个CPU,以便在单个CPU上运行基带、多媒体和应用堆栈以及各种操作系统(一个或多个虚拟机中运行Android或Linux,另一个虚拟机中运行RTOS ),从而节省材料成本。

  走向多核

  在嵌入式开发中,除了硬件整合之外,虚拟化还提供了一种在单个处理器的多个内核之间分配现有负载的良好机制。嵌入式操作系统架构师倾向于将多核芯片视为离散CPU的集合。大多数传统RTOS多核支持反映了这一观点,要求操作系统和堆栈的唯一副本在独立的内核上以准合作方式运行。

  随着RTOS供应商开始创造他们产品的多核版本,他们经常使用多核芯片中内核负载的静态映射。一些嵌入式虚拟化平台需要静态分配虚拟机管理程序及其托管和运行的负载

  物理芯片到虚拟化负载的静态映射效率低下,无法提供虚拟化带来的优势。在嵌入式开发中,更有效的方法是为每个操作系统配置一个虚拟CPU,该虚拟CPU可以映射到单个CPU(一对一),共享一个CPU(多对一),或者分布在多个内核上(一对多)。

  负载平衡

  今天的联网设备——手机、机顶盒、车载系统、网络设备和几乎任何类型的智能设备——都是应用程序平台,其负载像台式计算机、数据中心刀片和服务器一样复杂多样。多核CPU承诺现代嵌入式软件的高吞吐量和敏捷响应,但预测负载和内核利用率超过了集成不同来源软件的过程,特别是来自应用商店的软件。

  虚拟化为嵌入式开发人员和集成商提供了优化设备性能的额外工具。嵌入式管理程序可以监控客户操作系统和主机策略软件的负载,从而相应地分配CPU周期和其他资源。

  

  多核电源管理

  多核系统可能会给针对单核系统优化的电源管理方案带来巨大挑战。特别是,许多多核片上系统(SOC)对动态电压和频率缩放(DVFS)的范围和能力有限制:

  l SoC子系统和多核CPU通常共享电源电压、时钟、缓存和其他资源,这意味着DVFS适用于所有内核。

  l 一个SoC子系统上的缩放电压(如果可能)会限制通过本地总线与其他子系统的通信,并拒绝访问共享内存,包括子系统自己的DRAM。

  l 单个SoC子系统的时钟缩放限制了互操作性,尤其是对于同步总线。

  l 有些操作完全使用内核或根本不使用内核,但其他操作会施加不同的负载。全有或全无的使用很容易管理,但多核上的动态负载会带来更大的电源管理挑战。

  现在添加多个操作系统。在嵌入式开发中,高级操作系统通常包括DVFS电源管理,如Linux高级电源管理和动态电源管理,以及Windows/BIOS高级配置和电源接口。大多数RTOS避免限制实时响应的操作,当它们提供明确的电源管理API时,如vxLib的vxPowerDown(),它们缺乏电源管理策略。即使一个操作系统能够管理其自身域中的电源,它也不会意识到同一系统中其他操作系统的能力和状态。

  DVFS通过降低电压和时钟频率来提高能效。支持DVFS的CPU在固定的电压和频率下提供安全的工作点。

  DVFS的逻辑扩展是将电压降至0 VDC,并通过仅利用两个操作点(全停和全节流)停止CPU时钟,这两个操作点适用于所有可用内核。这个巧妙的技巧只有在虚拟CPU(参见图3和图4)的情况下才有可能将负载映射到物理芯片,并在CPU内核之间透明地迁移运行负载。关闭整个内核比DVFS更容易管理,并导致线性的、高度可预测的性能-能量权衡。

  

  多核基带

  随着高带宽4G网络(尤其是LTE)的出现,移动设备需要将更多处理能力用于无线数据通信。在嵌入式开发中,为了通过更高的并发性来提高吞吐量,新出现的需求要求将整个内核专用于4G I/O操作。这一要求使得无线芯片组厂商和传统的RTOS供应商争先恐后地为SMP操作重组基带操作系统和软件堆栈。

  更简单的解决方案是使用移动/嵌入式虚拟化来提高4G吞吐量。虚拟机管理程序可以根据需要将可用内核映射到输入或输出操作,并缩减映射以支持其他CPU密集型操作或执行每内核电源管理,而不是将两个、四个或更多内核专用于基带处理。

  只有虚拟化可以扩展

  多核软件设计比看起来更复杂也更简单。系统架构师应该抵制诱惑,不要将传统软件元素大规模分配给下一代嵌入式芯片上的可用内核。

  处理器路线图表明可用处理器内核将进一步倍增:如今嵌入式CPU的内核数将增加2倍,很快将增加4倍、8倍甚至更多。这种芯片过剩将很快超过供应和管理多核软件负载的静态方法。

  在嵌入式开发中,只有嵌入式/移动虚拟化能够提供可扩展且灵活的机制来实现多核处理能力的优势,并简化系统设计、集成和部署,同时使这些系统更加可靠和安全。

免费预约试听课