Helios使用卫星内核处理异构环境

来源:互联网 发布:数据库上机实验报告 编辑:程序博客网 时间:2024/04/28 22:04

作者 Abel Avram 译者 侯伯薇 发布于 2009年10月25日 下午9时20分

社区
Architecture
主题
调查,
操作系统
标签
微软

Helios是微软的一个研究性的操作系统项目,它试图通过使用卫星内核来简化为异构的环境编写应用程序的过程。该项目的研究者包括:EdmundB.Nightingale、Orion Hodson、Ross McIlroy、Chris Hawblitzel和GalenHunt,他们还发表了论文《Helois:带有卫星内核的异构多处理》(PDF)。

这个研究项目开始于这样的一种言论,当系统包含相互交换数据的CPU时,这些CPU执行相同的一组指令,并提供相同的功能,它们会包含带有强大计算能力的可编程设备,像NIC和GPU,但它们分别拥有自己的指令集和控制器。此外,操作系统对这样的可编程设备和任何其它不可编程的IO设备进行同样的处理,CPU和IO卡之间的通信被限制为通过设备驱动在二者之间传递数据流,而不是提供软件接口,那样应用程序可以用其在这样的卡上执行特定的任务。作者提到的另一个问题是,设备驱动在操作系统中是运行在特权模式中的,但是它们变得越来越复杂。在文章中提到的一个例子是NVidia显示驱动,其中包含有JIT编译器。

作者的解决方案是Helios,这个操作系统中包含的不是单一的内核,而是多个卫星内核。这样的内核运行在任何CPU或者设备上,具有可计算的能力,输出一个通用的接口和一组能够被所有内核和假定在这样的系统上运行的应用程序所理解的操作系统抽象集。卫星内核是:

微内核。每个卫星内核都是由调度器、内存管理器、命名空间管理器以及协调与其他内核通信的代码所组成的。所有其它传统的操作系统驱动和服务(例如:文件系统)都作为单独的线程执行。第一个用来启动的卫星内核叫做协调内核,它会找到可编程设备,并载入其它卫星内核。

内核通过远程消息传递来与其他内核通信:

Helios为那些在卫星内核上执行的服务提供了透明的访问,这是通过扩展一种传统的消息传递接口以包含远程消息传递完成的。当位于相同卫星内核上的应用程序或者服务彼此之间进行通信的时候,就会使用一种快速的、零复制的消息传递接口。然而,如果通信发生在两个不同的卫星内核之间,那么远程消息传递会自动配置内核之间的消息,以使通信变得方便。由于应用程序是为消息传递接口而编写的,因此当应用程序运行在可编程的设备上时,不需要任何改变。

Helios引出了一种亲和度(affinity)度量,它表示的是在内核中运行进程的合适程度。这个度量被用于决定进程应该被安排运行在哪个内核上,如果这个特定的内核在执行那段代码时会表现得更好,内核被绑定到其下的硬件上。好的亲和度说明应在该内核上运行进程,而不好的则说明需要寻找另外的内核。

例如,Helios网络堆栈说明了对于用来与网络设备驱动通信的通道拥有较好的亲和度。当拥有可编程的网络适配器的时候,网络堆栈和执行在适配器上的驱动之间的好的亲和度,使得Helios能够自动将所有网络堆栈卸载到适配器上。卸载网络堆栈并不需要对其源代码做任何的改变。

为了让这个方法起作用,Helios使用了两步的编译过程。应用程序首先从源代码被编译为中间语言,然后,到了安装的时候,应用程序基于系统的架构,或者更准确的说是找到的处理器(CPU、GPU、NIC等)的指令集,被编译为机器码。

该团队已经为XScale可编程IO卡(使用ARM架构)和具有缓冲一致性(cache-coherent )的NUMA架构编写了内核。他们都申明获得了性能上的改善。

通过将任务卸载到XScale I/O卡上,我们的性能得到了28%的提升。在邮件服务器的测试评分中,通过自动在多个NUMA域中切分应用程序,我们的性能得到了39%的提升。

Helios基于微软的一个研究项目——Singularity,该项目试图探索一种新的操作系统的选择。Helios未来的计划包括:为像InterLarabee显卡这样的GPU创建内核;寻找通过在内核之间移动CPU和内存来允许进程跨越多个NUMA域的方法;以及如何利用Windows的设备驱动的扩展驱动集以及它的内核代码来创建卫星内核。

 

FROM: http://www.infoq.com/cn/news/2009/10/Helios-OS-Satellite-Kernels

英文: http://www.infoq.com/news/2009/10/Helios-OS-Satellite-Kernels