Helios使用衛星內核處理異構環境

作者 Abel Avram 譯者 侯伯薇 發佈於 2009年10月25日 下午9時20分

社區
Architecture
主題
調查 ,
操作系統
標籤
微軟

Helios 是微軟的一個研究性的操作系統項目,它試圖通過使用衛星內核來簡化爲異構的環境編寫應用程序的過程。該項目的研究者包括:Edmund B.Nightingale、Orion Hodson、Ross McIlroy、Chris Hawblitzel和Galen Hunt,他們還發表了論文《Helois:帶有衛星內核的異構多處理 》(PDF)。

這個研究項目開始於這樣的一種言論,當系統包含相互交換數據的CPU時,這些CPU執行相同的一組指令,並提供相同的功能,它們會包含帶有強大計算能力的可編程設備,像NICGPU , 但它們分別擁有自己的指令集和控制器。此外,操作系統對這樣的可編程設備和任何其它不可編程的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未來的計劃包括:爲像Inter Larabee顯卡這樣的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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章