首页 > 基础设施 > 正文

多核平台上一种分布式的虚拟运行环境

2010-06-12 08:48:55  来源:万方数据

摘要:在软件系统中,传统的操作系统(以Windows、Unix、Linux等为代表)承担着管理资源和为应用程序提供服务的责任,它作为一个枢纽和应用、硬件紧密耦合在一起,这个枢纽的核心是计算资源,各
关键词: 多核 分布式运行环境

  1 引言
  由于时钟频率、功耗等因素的限制,单核处理器的性能提升接近了极限,多核体系结构以其强大的计算能力和较低的功耗增长,即将成为微处理器的主流,现在已经有超过100个核的芯片,而在未来这个数字有希望达到数千个。多核系统高度的并行化所提供的计算能力能够为应用的实时性提供保障,这将对嵌入式、多媒体、网络、科学计算等应用领域产生深远的影响。但是,传统的编程模式并没有充分关注并行性的要求,现有的大多数应用软件与系统软件无法有效地扩展到多核平台上,同时,计算单元的增加,对软件系统的容错能力、可扩展性和协同计算能力等提出了更高的要求。如何充分利用多核系统提供的计算能力,同时对可靠性、可扩展性和协同性提供支撑,成为当前软件系统面临的挑战。
  在软件系统中,传统的操作系统(以Windows、Unix、Linux等为代表)承担着管理资源和为应用程序提供服务的责任,它作为一个枢纽和应用、硬件紧密耦合在一起,这个枢纽的核心是计算资源,各个部件以共享、紧耦合的方式组织在一起,这些特点决定了传统的操作系统在多核平台上缺乏充分的并行性和可靠性。同时,由于应用程序的开发严重依赖操作系统提供的服务,一种操作系统的应用往往要经过复杂的移植过程,才能在另一种操作系统上运行。
  虚拟化技术在硬件与操作系统之间增加了一个管理资源的虚拟层,使多个异构或同构的操作系统可以同时运行在这个虚拟层上,这种做法对于增强系统的可靠性、兼容性,以及提高资源的利用率具有很大的意义。然而,虚拟化技术存在的局限性制约着它的发展。由于它在硬件上增加了—个软件层,应用程序与硬件交互的“距离”更远,在性能上会有所损耗,这对于实时应用和高性能计算可能无法接受,在多核平台上。尽管分配在不同核上的域之间可以并行运行,但域内的操作系统仍然无法发挥多核平台的优势。
  基于上面的分析,本文在多核平台上描述了一种分布式的虚拟运行环境DVRE,该运行环境能够提供多种操作系统的功能,为异构应用程序的有效运行提供服务。DVRE底层采用虚拟化的机制,但不再采用域的形式,整个虚拟层上只有一个运行环境。该运行环境改变了传统操作系统的结构,它以Client/Server的模式取代传统操作系统整体式的模式。这种模式充分利用多核体系结构的特点,传统操作系统中的模块以子系统的形式运行在一个或多个核之上,上下文切换的开销转变为核与核通信的开销。对于异构的应用,子系统自动地提供相应的服务与隔离,以此实现系统的兼容性和安全性。
  2  相关研究
  虚拟化技术在性能方面的损耗制约着虚拟化技术的应用,以Xen为代表的泛虚拟化技术以修改客户机的代码为代价减少了性能的损耗,使虚拟化技术应用到高性能计算、嵌入式系统等领域,成为可能。在这些对实时性、性能要求很苛刻的领域,先前的研究大多采用轻量级的域减少系统的开销,或者采用旁路的机制使应用程序某些关键操作绕过Hypervisor,直接与硬件进行操作,以此提升系统的性能。
  在多核平台上,如何利用多核丰富的计算资源来优化虚拟化技术的性能成为当前的一个研究热点。Sidecore的方法显示了采用专用的核来处理Hypervisor中某些关键操作,如页表的刷新,可以优化系统的性能。这种方法更进一步,自虚拟设备的方法实现了一个使用异构的专用核的IO子系统,该子系统为客户域提供统一的虚拟化接口,它使用消息队列的机制与客户域进行通信,通过专用核的计算能力和快速的互连设备来优化IO虚拟化。另一种与之类似的方法是VPE(Virtualization Polling Engine,简称VPE),它使用同构的专用核来加速IO虚拟化。
  上面的方法都是在虚拟系统上利用多核平台高度的并行化来优化系统的整体性能,这些方法本质上只考虑了Hypervisor层的优化,而没有对域在多核平台上进行优化。相对来说,Intel的McRT在非虚拟系统上使用专用的核运行应用服务,以此实现非科学计算代码在多核平台上并行化运行,这种方法与DVRE更为接近。然而,DVRE与McRT有本质的区别,DVRE考虑的是传统操作系统在多核平台上的扩展,而MoRT考虑的是非科学计算应用在多核平台上的扩展。此外,DVRT运行在虚拟化平台上,而McRT直接运行在硬件上面;DVRE以不修改应用程序为设计目标.而McRT必须修改应用程序代码。
  3  DVRE
  DVRE是一种运行在多核平台上的分布式虚拟运行境,它由一系列子系统组成,这些子系统运行在一个或多个核上,每个子系统负责传统操作系统的一种功能,为应用程序提供支撑或服务,子系统与子系统之间、子系统与应用程序之间使用消息的机制进行通信,整个DVRE以Client/Server的结构组织。这种多核平台上的分布式结构是DVRE的首要特点,它的出发点在于多核平台高度的并行性与传统操作系统紧耦合结构之间的矛盾,传统操作系统整体式的结构使它很难在多核平台上实现并行,分配给它的所有核运行的都是同一功能,这导致系统中频繁的上下文切换与计算资源的竞争,使应用无法达到实时、高性能的要求。DVRE这种分布式结构的优点在于充分利用多核平台的计算资源,降低系统的开销。
  DVRE的另一个特点是它运行在Hypervisor之上,它充分利用Hypervisor提供的资源隔离与管理能力。然而,各个子系统不同于客户域,为了降低Hypervisor的开销,这些子系统包括了Hypervisor相应的功能模块,直接与硬件进行操作,为应用程序提供服务接口,同时提供隔离与管理能力。对于那些没有实现子系统的功能,由Hypervisor进行管理与隔离。这种方式优化了Hypervisor关键功能模块(如内存管理、IO系统等)的性能,同时利用Hypervisor现有的其他非关键功能模块(如系统初始化等,降低了实现的复杂度。
  DVRE的第三个特点是实现了应用程序可配置的虚拟运行环境。在DVRE中,子系统的设置与选择可以根据应用程序的特点决定,在子系统中设置了多种服务模式,如MEM子系统,它可以根据用户的要求提供不同的内存管理服务。DVRE这种可配置的特点,使各种类型的应用可以同时运行在同一个多核平台上。另外,DVRE通过提供各种运行库,尽量实现应用程序的兼容性。
  3.1 DVRE的结构

 

图1 DVRE的结构


  图1显示了DVRE的整体结构。在DVRE结构图中,底层是Hypervisor层,Hypervisor层运行在硬件平台上,它可直接对硬件进行操作,Hyperviosr下面的C0~Cn代表了n个核。除了Hypervisor可操作硬件外,MemSub、IoSub等子系统也可以直接操作硬件,这些子系统封装了原属于Hypervisor和客户域操作系统的相应功能,如MemSub子系统,它管理系统中所有的内存,为process/thread队列分配内存,管理DVRE系统页表(相当于操作系统内核虚拟空间对应的页表)以及每个队列当前运行的进程或线程的页表,Hypervisor不再负责客户域的内存分配。子系统之间以消息队列的方式进行通信。
  在DVRE中,Hypervisor上存在一个轻量级的控制域Contorl Domain),该域负责process/thread队列的创建与销毁,以及进程和线程的调度。process/thread队列是处于预备状态的进程或线程形成的队列,每个队列运行在单个核上面,队列中进程或线程可以以独占或时间片的方式运行,当队列中的所有任务都运行完毕时,该队列就被控制域销毁。process/thread队列共享运行库,它们通过Redirec—tot模块向子系统请求服务。在某种意义上,process/thread队列是一个微内核域,但它本身没有进程或线程的创建与调度的功能,这些功能由控制域实现。
  3.2  DVRE与应用程序的运行过程
  DVRE安装到多核平台后,主核(即C0)首先执行初始化代码,这段代码初始化Hypervisor层和各个子系统。初始化过程完毕后,主核随即执行控制域代码,这时控制域已经能够使用子系统提供的服务。
  应用程序在DVRE中以进程或线程的方式运行。首先,控制域初始化应用程序主进程的虚拟地址空间,虚拟地址空间中的内核虚拟空间映射到Redirector区域。这样,操作系统系统调用表被Redirector的函数入口取代,这种方式使大多数代码不经修改就可以在DVRE中运行。应用程序主进程初始化完毕后,当存在空闲的核,控制域就新建process/thread队列,把进程插入该队列中,如果不存在空闲的核,控制域则把进程插入到现有的队列中。核之间的负载平衡由控制域实现。主进程在运行过程中,如果需要创建线程,则由Redireetor发送请求到控制域,控制域以同样的方式创建和调度线程。
  在DVRE中,各个子系统以应用程序为单元选择服务与隔离模式。应用程序的主进程与线程有一个统一的ID,子系统依据该ID来实现应用程序的隔离与可配置。
  4  I/O子系统的实现
  目前我们已经实现了Memory子系统和I/O子系统的大部分功能,本节介绍一下I/O子系统的实现细节与隔离机制。
  在当前的实现中,I/O子系统实现了文件I/O的功能,它为应用程序提供文件系统服务。与操作系统中的文件I/O服务不同的是,DRVE的文件I/O作为一个独立运行的子系统,它与应用程序、其他子系统的交互采用的都是消息通信机制。IO子系统有一个Receive Queue和一个Send Queue,消息是一个四元组:
  {objeeteld from/to,type,data,mode}
  当应用程序需要请求IO子系统的服务时,比如打开文件,那么应用程序调用open或f_open,这两个函数最终要进入内核,调用sys_open。控制域在初始化进程时,已经用Redirector中的函数替换掉了内核的系统调用入口,因此该调用会由Redirector中的re_sys_open处理。re_sys_open做的主要工作就是构建消息,向IO子系统发送数据发送。当IO子系统完成服务后,它就向Redirector发送消息,Redirector根据消息中应用程序的ID,把返回的结果写入应用程序进程的虚拟空间中。
  当IO子系统需要与其他子系统交互的时候,它们也是采用消息的机制实现。比如,当IO子系统需要分配内存时,它把消息发送给Memory子系统,该消息包括了需要分配内存的大小,Memory子系统接到请求后,则把分配好的内存地址放在消息中,发送给IO子系统。在DVRE的设计中,子系统除了为应用程序提供服务,还实现了虚拟化的功能。与Hypervisor虚拟化机制不同的地方是,DVRE子系统以应用程序为单位,而不是域。DVRE子系统虚拟化机制如图2所示。

 

图2 子系统中实现虚拟化


  在I/O子系统中,对于文件Io功能,图2中子系统为每个进程虚拟的设备更多体现在权限控制上面,因为一个文件可被多个进程操作,而对于Io子系统的其他功能,如网络Io,虚拟化更多体现在多路复用和多用分解上。
  5  结束语
  由于还在实现过程中,我们还无法给出DVRE的整体性能评估。但是,先前类似的研究与DVRE的局部实验数据均表明,在多核平台上以分布式的运行环境代替传统的操作系统,能获得更高的性能与更好的扩展能力。我们以子系统的形式实现虚拟的运行环境,底层保留虚拟化技术的隔离能力,既利用了多核平台高度的并行性,又能提高系统的可靠与安全性。
  需要指出的一点是,硬件的协助能够很大程度上提升DVRE的性能与效率,降低DVRE实现的复杂性。比如核之间使用高速的互连网络,对于DVRE分布式的结构具有很大意义;还有,如果处理器实现了monitor/mwait指令,那么子系统在等待应用程序的消息时不必处于运转状态,这可以降低系统的功耗。随着多核平台的不断发展,DⅥ比更能显示出它的优越性。

(责任编辑:韩雨彤)


第三十八届CIO班招生
国际CIO认证培训
首席数据官(CDO)认证培训
责编:

免责声明:本网站(http://www.ciotimes.com/)内容主要来自原创、合作媒体供稿和第三方投稿,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证有关资料的准确性及可靠性,读者在使用前请进一步核实,并对任何自主决定的行为负责。本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。
本网站刊载的所有内容(包括但不仅限文字、图片、LOGO、音频、视频、软件、程序等)版权归原作者所有。任何单位或个人认为本网站中的内容可能涉嫌侵犯其知识产权或存在不实内容时,请及时通知本站,予以删除。