在过去五年中,虚拟化技术从一种陌生的技术变成了企业服务器和桌面应用的一种关键技术。最近,虚拟化技术逐渐成为嵌入式开发中的关键角色。推动这种趋势的领域包括移动电话、电信和网络基础设施以及安全嵌入式计算。在所有这些领域,开发商和集成商都考虑采用虚拟化技术来提高可靠性和安全性,以简化遗留代码的更新与维护,同时针对单CPU的多操作系统处理器分割以及多核处理器和多个CPU之间的运行管理进行硬件利用率优化。
尽管开发商和OEM对虚拟化技术显示出明显的兴趣,但是该技术的采用可能会因为虚拟化平台架构本身的局限性而停止。本文将了解这些局限性,以及如何通过不同的方法构建嵌入式虚拟化软件来克服这些局限。
软件复杂度管理
由于嵌入式软件的规模和复杂度急剧增加,在嵌入式系统中采用虚拟化技术的呼声日益高涨。过去十年,嵌入式软件的规模每年倍增,目前嵌入式系统的源代码达到数千万行,几乎等同于(甚至很多时候超过)企业程序的源代码。嵌入式软件固有的复杂性、多线程以及延时敏感性使管理和维护如此大规模的代码变得相当复杂。
嵌入式虚拟化技术的倡导者们将这种现状以及不断增长的复杂度誉为采用虚拟化平台的主要动力。然而,虚拟化技术并不足以解决嵌入式软件开发的主要挑战。尽管把软件组件分割和隔离到不同的虚拟机(VM)容器可以提高可靠性,但由于VM的粒度过于粗糙而未能对蜕变复杂度的改善有实质变化。运行在不同VM上的客户操作系统和主应用程序实际上会提升整体复杂度,尤其是当虚拟化平台软件对嵌入式系统架构的理解和整合不足,以及当嵌入式软件工程实践不是那么协调的时候。
图1a:具不透明性的全VM轮叫调度(Round Robin Scheduling)。
图1b:透明的分级客户任务以及全局调度。
隔离与整合的对比
嵌入式应用从虚拟化技术获得的最直接好处是针对客户操作系统(如Linux、WinCE、RTOS等)以及其他运行环境(自行设计的内核、设备驱动程序等)采取严格的硬件隔离,从而改善可靠性和安全性。这种隔离避免了在智能设备的独立功能区中(如移动电话中的基带和用户界面代码)代码和数据的非故意破坏,而且也阻止终端用户通过下载的代码进行恶意访问。
然而,虚拟化技术为嵌入式应用所带来的稳健性与传统的嵌入式设计经验相悖。传统的设计经验强调在多个嵌入式软件组件之间有效地共享数据,但是将代码严格地分割到VM时,这种数据共享将被阻碍或被禁止。而且,在各种不同的虚拟机上运行的代码中由于没有高效的通信,虚拟化技术将会使嵌入式系统的性能降低到无法忍受的水平,从而影响OEM和第三方软件的整合。
调度的不透明性
嵌入式系统软件涉及复杂的多进程和多线程程序组合。无论是移动系统还是静态系统都需要对数以百计的任务进行调度和同步;甚至处于睡眠状态或暂停状态的设备都自诩有数十个线程在运行。而且,与众多桌面软件不同的是,嵌入式应用程序会涉及到大量的优先级划分方案和规则(例如等级单调分析)。设计、调试和调整优先级、以及执行策略和实时事件响应涉及到整个系统的活动,这些活动需要细致的可见度和控制。
能量管理
对嵌入式系统的能耗优化源于特定设计领域的需求:在类似手机和媒体播放器这些移动设备中,能量管理可以延长电池使用寿命,并帮助OEM的产品在竞争激烈的市场上实现差异化。在诸如网络设备(路由器、网关、安全设备)以及消费电子设备(电视机、DVR、IP电话以及耐用产品)等固定设备中,能量管理能帮助降低用电费用以满足节能需求。
在智能设备中的能量管理涉及硬件和软件方面的技术。通常这涉及到操作系统内核降低用户交互动作(减少键盘/键区和其他输入事件)以及静态程序状态(等待外部事件或在执行中的长暂停)。当系统进入到这样的空闲状态时,能量管理软件可以选择关断耗电的设备,例如LCD显示器、降低CPU的运行频率和总线时钟,并降低工作电压。相反的情况下,同样的软件必须能提高性能以满足对新事件或用户输入的服务。
有效的能量管理需要在操作系统、设备驱动程序以及甚至应用软件之间广泛的紧密配合,是一个全面的规则。然而,VM下文调度的不透明性使能量管理不能有效实现:处于睡眠状态的客户操作系统对其他的VM缺乏可见性,因而不能做出能量管理决策。相应地,管理程序缺乏对所管理的客户操作系统内部状态的充分了解,因此不能在虚拟化平台层面进行能量管理。
文章评论(0条评论)
登录后参与讨论