Heliosは、マイクロソフト研究所のOSプロジェクトで、サテライトカーネルを使って、異種環境のアプリケーションを書く方法を容易にすることを狙っている。このプロジェクトの研究者には、Edmund B. Nightingale氏, Orion Hodson氏, Ross McIlroy氏, Chris Hawblitzel氏, とGalen Hunt氏がおり、 Helios:サテライトカーネルによる異種マルチプロセッシング (PDF)という論文を発表した。
この研究プロジェクトは、同じ命令セットを実行し、同じ機能を提供する入れ替え可能なCPUを持つ、しかも高計算能力を備え、異なった命令セットを持ち、しかし自身の制御ができる、 NIC や GPUのようなプログラム可能なデバイス持っているシステムの観察から始まった。更に、OSが扱うのは、そのようなプログラム可能なデバイスに加えて、プログラムできないIOデバイス、CPUとIOカード間の通信である。このようなカードは、デバイスドライバによって、両者間で転送できるデータ量は限られている。またアプリケーションが、カードの上であるタスクを走らせることができるようなソフトウェアインターフェースも提供していない。論文著者が指摘している他の問題は、デバイスドライバが、OS内で特権モードで走り、益々複雑になっていることである。論文は、JITコンパイラを持っているNVidiaのグラフィックスドライバを一例として、上げている。
著者たちの解が、Helios、1つのカーネルではなく、 サテライトカーネルをもつOSである。 サテライトカーネルのうちの1つは、どのようなCPUあるいは、計算能力のあるいかなるデバイス上でも動き、通信インターフェースすなわち、すべてのカーネルとそのようなシステム上で走るアプリケーションが理解できるOSの抽象セットを公開する。サテライトカーネルは、
マイクロカーネルである。個々のサテライトカーネルは、スケジューラ、メモリマネージャ、ネームスペースマネージャ、他のカーネルとの通信を調整する規則を持っている。他のこれまでのOSのドライバやサービス(例えば、ファイルシステム)は、すべて別々のプロセスとして実行される。コーディネータカーネルと呼ばれる、最初のサテライトカーネルがブートして、プログラム可能なデバイスを発見して、他のサテライトカーネルを起動する。
カーネルは、リモートメッセージ送信により互いに通信する。:
Heliosは、サテライトカーネル上で実行されるサービスに透過的なアクセスを提供している。従来のメッセージ送信インターフェースを拡張してリモートメッセージ送信を行う。アプリケーションやサービスが同じサテライトカーネル上で通信するときは、高速な、コピーなしのメッセージ送信インターフェースが使われる。しかし、もし2つの異なるサテライトカーネル間の通信であると、通信を容易にするために、リモートメッセージ送信が自動的に、カーネル間のメッセージをマーシャリングする。アプリケーションは、メッセージ送信インターフェースに従って書かれていれば、プログラム可能なデバイス上で走る時には、何の変更も要らない。
Heliosは、プロセスをカーネル上で走らせる際に、その親和性を表現するのに affinity(親和性) というメトリック(尺度)を導入した。このメトリックは、あるプロセスが、どのカーネル上で走るべきかをスケジュールするのに使われる。カーネルは、その下のハードと結びついているので、コードを実行するのに適したカーネルがより効率的に実行する。正の親和性は、そのカーネル上でプロセスを走らせることを意味するが、負の値は、他のカーネルを探すことを意味する。
例えば、Heliosネットワークスタックは、ネットワークデバイスドライバと通信するのに使われるチャネルには正のaffinityを表す。プログラム可能なネットワークアダプタが存在すれば、ネットワーキングスタックとアダプタ上で走るドライバ間の正の親和性により、Heliosは、自働的に全ネットワーキングスタックをアダプタに開放する。ネットワーキングスタックを開放するのに、ソースコードを変更する必要はない。
この手法を採用するために、Heliosは、2段階のコンパイルプロセスを使っている。アプリケーションは、ソースコードから中間言語にコンパイルされ、それからインストール時にシステムアーキテクチャ、もっと正確に言うとそれぞれのプロセッサ(CPU, GPU, NIC,など)の命令セットに合ったマシンコードに更にコンパイルされる。
チームは、ARMアーキテクチャとキャッシュ-コヒーレントなNUMAアーキテクチャを使って XScale を持ったプログラム可能なIOカード用のカーネルを開発した。チームは、パフォーマンス改善が得られることを確信した。:
我々は、XScaleのI/Oカードにタスクを開放することによって、最高で28%パフォーマンスが改善したことを示した。メールサーバのベンチマークでは、複数のNUMAドメインにアプリケーションを自動的に分割することによりパフォーマンスが39%改善するのを示せた。
Heliosは、オペレーティングシステムの新しい選択肢を探究する意図を持ったマイクロソフトの研究プロジェクト Singularityをベースにしたプロジェクトである。Heliosの将来計画には、インテルのLarabeeグラフィックスカードのようなGPUのカーネルを作ることや、カーネル間でCPUやメモリを動かすことで、プロセスが複数のNUMAドメインを使用することができる方法を見つけることや、サテライトカーネルを作るために、Windowsの豊富なデバイスドライバとそのカーネルコードをどのように利用するかが含まれている。