虚拟化:使软件尽早插手系统设计
扫描二维码
随时随地手机看文章
软件开发是一个令人着迷的产业。在过去这些年来,随着开发商不断的采用新的编程语言(从Fortran到Pascal再到C++及其他更高级的语言),它也在不断的改变着。但是,尽管开发商很容易注意到软件本身可以推动创新,但是很少考虑他们基础设施应对变化的可能手段。在虚拟化发展过程中 ,这将有所改变。
当第一个嵌入式设备出现时,众所周知,软件根本不存在;所有的功能建立在硬件中。随着微处理器的引入,软件内容出现了,但是仍然在整体系统中只占一小部分。在过去二十年,随着软件规模和复杂性的爆炸性增长,嵌入式行业经历了一个整体的迁移。今天,软件是嵌入式系统中提高功能和创新的主要推动力。
虽然硬件设计在工具和工艺开发方面得到了重要的投资,但是软件的开发流程基本上从二十世纪八十年代就保持基本静态。硬件产业得益于良好的标准和流程,但是软件开发的方法并没有跟上,使得程序员从事软件开发完全是临时性的。
这种缺乏基本的软件开发基础设施的后果太常见了:成本超支、跟不上日程和质量差的软件。软件开发目前的办法可以看出约有三分之二的项目迟于上市,三分之一超过预算,并且,将近一半的嵌入式设计被取消。即使为工作或者产品的性能增拨资源,也不能使得软件开发者脱离一贯的碰壁情况。
为什么在嵌入式程序世界存在如此惊人的断开?为什么软件在设计越来越复杂时仍停滞不前?这既不是人也不是设备的问题。相反,它是没有为辅助软件发展设计出精密战略发展基础设施而造成的。
一个嵌入式设备通常是重新开始的,始于硬件且终于软件。这个过程是顺序的,由硬件开始设计围绕一定的期望,考虑存储、MIPS、界面、连接性等等。多种器件放到一块建立起一个硬件系统,它才是软件开发最重要的。这种以硬件为中心,自下而上的方法涉及到许多步骤和多重依赖关系,而且只有经过系统整合阶段,当软件实际在平台运行时,这个系统才能从性能的角度去理解。(相比之下,面向服务的体系结构(Service-Oriented Architecture,SOA),这种方法规在设计一个基础架构(以支持必要的服务)之前已经规划好了必要的服务)。
自下而上开发方法的主要弱点是,在软件设计过程中,它把软件作为一种后添加的事物,尽管有越来越多的系统功能依赖于软件,而不是硬件。整合在这个过程中发生的非常晚,从而难以发现由硬件、设计或者架构引入的错误。在许多情况下,开发商不得不重新考虑他们的设计以降低时间成本和预算。
随着软件的复杂度达到了新的高度,并且固定程序被证明是付运的主要障碍,以硬件为中心方法的低效和不实用正在变得越来越明显。开发商如何才能战略性重新思考自己的发展方法以至于使得他们不再受到硬件的摆布?软件开发商在系统阶段如何能够较早的进入系统设计?这就是虚拟化出现的原因。
虚拟化的先驱
虚拟化技术用于嵌入式设备开发已经好几年,既作为实际硬件的替代,也作为复杂系统的设计和调试平台。在硬件设计产业,仿真已经用于插口和PCB 阶段。无论是设计处理器,PCB或者SOC,硬件开发商可以使用仿真工具,像Mentor、Cadence和Synposys,以建立模型和预测他们系统的行为,而无需等候真实物理系统开发出来。
嵌入式设备之外,我们看到了许多产业在使用传统方法碰壁后运用虚拟化方法取得成功。在过去两年里,服务器虚拟化已经通过提高数据中心效率和降低总体成本方面取得了很大的进展。虚拟化已经解决了这种持续的挑战,包括服务器扩散、CPU利用不充分和应用分离。
仿真同时被引入了许多产业,如航空航天和国防,应用在他们自己的软件开发中。通常,这些行业需要如此复杂的设计,以至于等待了一年或者更多年后才知道硬件是行不通的。随着点解决方案、设计复杂度基本上授权给这些公司投入资源在国内开发虚拟化软件解决方案,仿真已经在国内发展起来了。
嵌入式软件开发行业正处在一个既不是传统的、以硬件为中心的开发方法,也不是内部的点上,一次过的虚拟软件开发解决方案在这个竞争激烈的市场,必须能够提供快速的产品上市时间、节约成本和质量保证。嵌入式设备中软件内容的角色没有任何下降的趋势,多核器件的增长将前所未有的复杂性加入到了硬件和软件中。必然走向多核设计,只需强调对软件开发解决方案需求,从而能够充分利用多核设备的潜在性能。
当前的嵌入式软件开发已经使公司战略地重新审视和反思自己的过程是必要的,不仅仅在设备阶段,还要在过程设计阶段 。我们可以从中知道硬件产业确实需要仿真,但是我们也需要虚拟化,更进一步说,作为一个基础的、根本的设施引入到我们自己的产业中。
虚拟化软件开发是一个产品发展战略,它可以将软件开发从依赖于物理硬件(在其上,应用将被部署)解放出来。相反,虚拟化软件开发使得软件开发商可以直接在桌面上进行开发,制造出一个真实的共同发展战略,这样,硬件和软件开发可以同时进行。软件/硬件集成是前端的优先,而不是后端的急于求成。
虚拟化软件的开发使得开发者制造了高性能,功能准确的硬件模型,可以使得他们在系统开发过程中尽早地开始调试、测试和优化系统。虚拟技术可以用于不同程度的细节,从处理器到板级到设备,在这样的精度水平,二进制代码可以不变运行且不会伴随任何行为上的分歧。
物理硬件测试过程中,高性能虚拟平台不同程度的控制是不可能的。必然的,当同样的条件应用,软件往往以相同的方式执行的固有性质成为了虚拟测试的一个实际。随着处理器和硬件在复杂度上的提高,必然也就意味着在操作的过程中没有其他的改变不是由于软件的追踪缺陷造成的,而是由硬件引起的往往难以察觉的变化,这个变化也就产生了所谓的“海森堡虫子”(Heisenbug),依赖于细小的时钟干扰的状态有的时候是不可能复制的,甚至是在整个系统反复重新运行过程中。仿真基础设施背后的虚拟平台使得开发者可以单步骤或者停止系统来检查他们的内部转台。开发者可以在仿真多核处理器内核和每个内核的多个过程中不断的复制一个错误,从而使得多核处理器调试就像调试一个单一处理器的单一程序一样简单。[!--empirenews.page--]
虚拟软件开发也避开“codeís”固有限制,通过在需要逆向时执行代码,开发了类似于“TiVo”的功能,且没有任何的代码仪表或者额外的硬件。虚拟化让开发者等待一个错误,然后“倒带”寻找到一个故障所在处的代码的执行。倒带代码执行能力需要可以廉价的检查整个系统的能力和高速仿真的能力。倒退一个指令实际上就是通过回复到检查点和倒退到一个点,倒带点的指令之前完成的,如果仿真速度够快,这个过程就像是在瞬间给使用者的。这种可逆式的调试环境与多处理器系统和多核处理器共同工作,使得开发人员可以跟踪缺陷,诸如竞争情况,被两个零错误分开,锁定重读,死锁和缺乏优先级,所有这些都将出现,更多的是在多核架构中。
虚拟化模型的建立使得通过确定一个有意义的平台使得平台更加标准化,这个平台可以使得软件和硬件可以使用,加强和分享。虚拟化软件设计可以获得无限量的虚拟指标,虚拟平台(硬件的软件代表)可以被在几秒内通过邮件发送到世界各地。因为由虚拟模型产生的数据不是物理限制的,公司可以与合作伙伴和客户简单的有效的分享他们的虚拟化软件开发知识产权。
虚拟化软件开发最近表现在另一个类似平台的引入,Google的Android(Google 的手机操作系统和相关软件的总称),虽然在一个软件开发工具包的上下文。不过,这样的概念是一样的,并构成了一个仿真的虚拟平台,使得由上而下的方法在应用层使得硬件基本上是不相关的。虚拟平台提供了设计所有的必要的服务,使得硬件可以被看作一种前端,而不是在后端考虑。一旦软件发展,硬件优化软件,而不是与此相反。
实际虚拟软件开发
虚拟软件开发在主流的商业规模中显示了它的好处。许多公司已经在他们的设计过程中移植了这个方法,创造了一个全新的创新的基于虚拟化软件开发的基础架构。
IBM在其强大的Power6平台中的复杂软件开发和测试中使用了虚拟化软件开发。通过使用这个方法,IBM的开发团队能够提高他们开发复杂固件和系统管理程序的挑战,从而无需物理硬件可以启动和运行多个操作系统上的虚拟系统模型。这反过来,可以帮助降低整体的硬件花费。IBM很快意识到可以使用虚拟软件开发优化它的整个产品开发生命周期,同时也可以最大限度的减少硬件和软件设计团队的壁垒。
GE Aviation系统(前身为Smiths Aerospace)使用了虚拟化为它的过程模型发展了仿真模型。GE建立了最终目标系统模型提供更多的好处,与传统的开发环境相比,包括降低开发和测试成本,整合成本,收购成本,维修保养的成本及成本的变化。虚拟软件开发确定性的能力使得GE的开发者可以在他们在深入检查和诊断的空闲再现性能问题。
风河系统,领先的设备软件优化供应商,使用了一段时间的虚拟软件开发以提高他们操作系统的开发过程(如VxWorks中SMP),同样公开确定了虚拟软件优化在他们的开发战略中作为一个主要内容。
最近,Monta Vista软件公司,智能设备的Linux系统提供商,将虚拟软件优化更进了一步,使得虚拟化成为它的软件销售和评价的一个关键部分。Monta Vista允许其潜在客户在网上通过一个连接到使用者的TestDrive的评价服务提高Linux产品。并运行于虚拟化软件开发平台。这是一个虚拟软件开发鼓励新的思维方式和经商之道的成功例子。
作者:Michel Genard