通过嵌入式虚拟化充分利用多核芯片

描述

嵌入式应用程序中的虚拟化与其企业和桌面等价物有很多共同之处。独特的嵌入式用例和专门的底层技术为开发人员提供了优化设计以提高性能和响应能力的新机会。

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

桌面和数据中心的主流多核需要来自已部署操作系统 (OS) 的对称多处理 (SMP) 支持。Linux 内核已经支持 SMP 近十年了,支持 SMP 的 Windows 和 Mac OS 版本在今天被广泛使用。

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

虚拟化软件架构

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

图 1: Type I 管理程序启动并运行客户操作系统,而 Type II 管理程序作为应用程序在另一个操作系统上运行。

cpu

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

在移动设备中,OEM 使用裸机虚拟化来整合多个 CPU,以便在单个 CPU 上运行基带、多媒体和应用程序堆栈以及不同的操作系统(Android 或 Linux 在一个或多个虚拟机中,以及 RTOS 在另一个)以节省费用材料成本。

走向多核

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

随着 RTOS 供应商开始创建其产品的多核版本,他们经常使用负载到多核芯片中内核的静态映射。一些嵌入式虚拟化平台需要静态分配管理程序及其托管和运行的负载(即每个 CPU 内核一个管理程序,如图 2 所示)。

图 2:在负载的静态映射中,每个 CPU 内核分配一个管理程序。

cpu

物理硅到虚拟化负载的静态映射效率低下,并且无法提供虚拟化所赋予的优势。一种更有效的方法是为每个客户操作系统配置一个虚拟 CPU,该虚拟 CPU 可以映射到单个 CPU(一对一)、共享一个 CPU(多对一)或分布在多个内核(一对多),如图 3 所示。

图 3:虚拟化支持负载到内核的一对一、多对一和一对多映射。

cpu

将负载映射到虚拟 CPU 到物理内核可以在集成时锁定或改变以平衡负载,如以下应用程序所示。

负载均衡

当今的网络设备——移动电话、机顶盒、车载系统、网络设备和几乎任何类型的智能设备——都是应用平台,其负载与台式计算机、数据中心刀片和服务器一样多变且复杂。多核 CPU 承诺现代嵌入式软件的高吞吐量和快速响应,但预测负载和核心利用率超过了集成来自各种来源的软件的过程,尤其是来自应用商店的软件。

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

多核电源管理

多核系统可能对针对单核系统优化的电源管理方案提出严峻挑战。特别是,许多多核片上系统 (SoC) 对动态电压和频率缩放 (DVFS) 的范围和能力有限制:

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

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

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

· 一些操作全速使用或根本不使用核心,但其他操作会施加不同的负载。全有或全无使用很容易管理,但多核上的动态负载提出了更大的电源管理挑战。

现在添加多个操作系统。高级操作系统通常包括 DVFS 电源管理,例如 Linux 高级电源管理和动态电源管理以及 Windows/BIOS 高级配置和电源接口。大多数 RTOS 避免了限制实时响应的操作,并且当它们确实提供像 vxLib 的 vxPowerDown() 这样的显式电源管理 API 时,它们缺乏电源管理策略。即使一个操作系统能够管理其自己域中的电源,它也不会了解同一系统中其对等方的功能和状态。

DVFS 通过降低电压和时钟频率来提供能源效率。支持 DVFS 的 CPU 在固定电压和频率下提供安全工作点。随着负载/需求的增加或减少,电源管理中间件或操作系统会从工作点转换到工作点,如图 4 所示。

图 4:通过动态电压和频率缩放,可以跨内核迁移负载以节省功耗。

cpu

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

多核基带

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

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

只有虚拟化可以扩展

多核软件设计既复杂又简单。系统架构师应该抵制将遗留软件元素批量分配给下一代嵌入式芯片上的可用内核的诱惑。

处理器路线图指向可用处理器内核的进一步倍增:今天在嵌入式 CPU 上是 2 倍,很快会达到 4 倍、8 倍甚至更高。这种过剩的硅片将很快超过用于配置和管理多核软件负载的静态方法。

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

审核编辑:郭婷

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分