多核和虚拟化的关系充满诡辩
多核和虚拟化如何帮助客户快速、低成本地进行开发?据风河公司CTO(首席技术官)Tomas Evensen介绍,其实这是充满诡辩的问题,如果你要想用多核来提高效率,可能就需要多功能处理,因此复杂性提高,需要承担更多的风险,所以这是机遇与风险并存的状况。过去人们只是通过多任务处理或者并行处理,然而在开放资源系统中,可能就会遇到像风河VxWorks、Moblin(注:Intel力推的开源组织)等体系,更加复杂,这时可以采用虚拟化和中间软件等。当然,这样运行时对于客户可能更加高效,但也更加复杂化。
在未来三到五年中,多核虚拟化在嵌入式方面的应用主要还是面向计算量比较高的多核客户。是否采用多核虚拟化关乎整合还是分开的问题,如果你不想用单核,你当然可以不用,但多核也更加复杂,即便说用两核也可能会涉及到整合问题。所以你可以选用单CPU的Hypervisor(如图1,是由少量代码组成特种OS,是在现有操作系统之下称为hypervisor的一层, 这层实现对多操作系统和虚拟化的支持。例如对于风河来说, 这层可以是Vxworks或风河Linux)或多核的Supervisor(在多核和多操作系统中间有虚拟化的一层配置Supervisor,它比Hypervisor的功能低一些,因为它不需要虚拟CPU),也可以两者兼用,用的时候你可以把它们整合在一起,也可以把两者分开。
从多处理器到多核
为了更清楚地理解多操作系统、多核与虚拟化趋势,需回到多处理器系统和多核的关系上。多处理器离多核的应用只有一步之遥。不过,多核与多处理器也有不少区别,其中有一些挑战你必须面对。首先,多处理器系统中的软件并不能直接拿到多核系统中运行。
将原本分散的多处理器系统整合为单一多核系统并不能通过简单地将多个系统简单地压缩在一个多核系统中来实现。系统架构的变化使多个系统之间的并行运行和通信协调方式发生了不小的变化。
在采用多核技术的时候,操作系统管理内核的基本方式有两种:第一种是对称多处理(SMP),这是由一个操作系统来控制多个内核。只要有一个内核空闲可用,操作系统就在线程等待队列中分配下一个线程给这个空闲内核来运行。第二种是非对称多处理(AMP),每个内核上都运行各自的操作系统。
因此,多核系统并不是直接把多个芯片的多处理器浓缩到单一芯片之中这么简单。实际上,多核系统和多处理器系统之间存在着许多重要的区别,导致不能把多处理器系统上的软件直接移植到多核系统上来。多处理器系统和多核系统的主要区别之一就是,在多处理器系统中,CPU之间的界线是比较清晰的。
在典型的多处理器情况下,多个CPU通过总线连接起来,即便是共享外部存储器,这些CPU基本上都是独立运行的。在多核系统中,情况就有所不同。不论采用何种架构,在多核系统中,被共享的东西非常多,例如中断控制器、外设以及Cache(高速缓存)等。
多操作系统下的Supervisor或Hypervisor
当你希望运行SMP(同构核)环境时,多核系统的这种特征通常表现为一种优势,因为所有的内核都由同一个操作系统来管理。但是,当你要在多核系统中同时运行两种以上的操作系统时,例如同时运行一套RTOS(嵌入式实时操作系统)和一套通用操作系统,就会遇到较多的困难。在这种情况下,会有两种选择:第一,在两个操作系统之间进行频繁的沟通,例如在它们之间建立主、从关系;第二,更简便的方法是采用Supervisor或者Hypervisor,这是一些少量的代码,负责管理协调多个操作系统。显然,第二种方式是更彻底、灵活、具有扩展性的多核软件架构。
Hypervisor 之所以能够有效地管理运行在其上的多个操作系统,得益于分区和虚拟化的方法。总的来说,系统中有三类资源可以被虚拟化:执行单元(CPU)、内存和设备。执行单元虚拟化是基于时间片来进行。内存虚拟化是把物理内存划分成许多区域。设备虚拟化则是通过给设备定义接口和API调用来提高使用灵活性和利用率。
Hypervisor并不是一个全新的概念,在服务器中早已得到广泛而且成功的应用。不过,嵌入式系统中经常用到的Hypervisor主要是对内存和设备进行虚拟化,以便在操作系统之间的资源共享得到完全的保证,而不是对执行单元进行虚拟化。这种专用的Hypervisor比较小,而且直接运行在硬件上,不像服务器中用到的Hypervisor主要运行在完整的操作系统之上并且使用宿主操作系统的资源。
在嵌入式Hypervisor中,性能和独立性是两大最重要的需求,而后向兼容性(可以让从属操作系统不经修改即可运行在宿主操作系统之上)是服务器Hypervisor中非常重要的需求。为了满足嵌入式系统的特殊需求,这类Hypervisor应当采用以下特殊设计:
- 设备尽可能直接映射给从属操作系统,以便获得最高的性能,以及实现最佳的隔离性。
- 应当具有更强的可伸缩性,可以自主选择对哪些部分进行虚拟化,也可以自主选择虚拟化的目的是提高性能还是提高隔离性。
因此,嵌入式Hypervisore的实现会依照硬件支持的程度存在非常大的差异。即便是在没有任何硬件支持的情况下,Hypervisor也可以运行得非常快,关键是要做到适当水平的准虚拟化(Paravirtualization)。
多核与多操作系统的组合配置综上所述,多核与多操作系统的组合配置非常多样,这就会给软件工程方法带来很多变化和挑战。不过,我们还是可以总结归纳出几种最典型、最常见的情形,并针对这些情形找到最适当的解决方案。
与多处理器系统的软件开发一样,你首先会面临的挑战是对软件代码进行分隔以便可以并行运行。除此之外,在多核系统中,还会遇到另外一些挑战,例如:1)获得适当的操作系统配置、资源共享和系统引导的Run-time支持;2)处理好内核以及资源分区之间的通信;3)拥有能够支持多核产品配置、原型化、分析、诊断和测试的开发工具。对于上述每个方面的问题与挑战,用户都必须得到适当的答案,才能在市场允许的时间范围内开发出像样的产品。
值得注意的是,虽然开放源码社区也有多核开发工具,但是多核软件开放所遇到的挑战显然更为复杂,仅仅靠自己去探索未必有效。更重要的是,当你在高度竞争的商业环境中从事设备软件开发,必然会在时间、成本和产品可靠性等诸多方面受到更严苛的要求。因此,用户不仅需要拥有高效率的工具,而且需要有专业人员在最短的时间内指导和帮助你解决问题,这些相关的技术支持与服务都是商业化开发工具的组成部分。可见,不仅包括软件开发工具,而且包括配套的技术支持与服务,这样的商业化解决方案才是整体效率最高、整体成本最低的方法。
嵌入式软件的制高点:平台嵌入式软件的制高点是在操作系统之上的平台,并非操作系统本身。过去的用户可能会先选硬件,再选操作系统,选桌面软件,最后选工具,对平台软件考虑得还不太多。但是随着用户对平台的进一步认识,以及平台的进一步发展,用户在做决定的时候可能会考虑平台方面来做出最终的决定。
CIO之家 www.ciozj.com 公众号:imciow