コンカレントコンピュータ株式会社は、40年以上もの間、独自BusからMultibus、VMEbus,PCIbusへ様々な形状のリアルタイムシステムを販売してきました。
これらの過去のリアルタイムシステムの多くは、独自のオペレーティングシステムでしたが、2000年に完全なフリーのオープンソースであるGNG/LinuxをベースにしたリアルタイムプロダクトであるRedHawkに軸足を移しました。
RedHawk Linuxの重要な目標は、開発費を最小にするために、オープンソース・ソフトウェアのバイナリコードをリアルタイムシステムで、そのまま動作させることです。
RedHawk Linuxは、Linuxコミュニティで開発されたカーネルのドラスティックな変更をアプリケーションと分離するソフトウェア・レイヤー技術で、継続的にLinuxカーネルの更新を可能にしています。
RedHawk Linux は汎用 Linux ディストリビューションではありません。
プロダクトコアには、どんなディストリビューションの基でも動作可能なリアルタイムLinuxカーネルがあります。
RedHawkカーネルは、kernel.orgからリリースされる安定したピュアカーネルをベースにして、ローカルに開発されたオープンソースパッチの拡張を行っています。
そして、コンカレント社は、オープンソース・コミュニティの最新リリースの修正と改良を取り入れるために、しばしばLinuxカーネルベースを更新しています。
RedHawk Linux には、カーネルのリアルタイム機能へのアクセスライブラリ、ヘッダ、ドキュメンテーションとコマンド、そしてユーザレベルパッケージのセットを含まれています。
提供されるAPIには、POSIX XSI標準APIとコンカレントのリアルタイムソリューションを供給してきた長い歴史の間に開発された拡張APIがあります。
これらのAPIは豊富で安定した機能とリアルタイム性を保証するインターフェースをリアルタイム・アプリケーション開発者に提供します。
このインターフェースにより、コンカレントのカスタマの多くのアプリケーションが使用していたコンカレントの古い独自のソリューションから Linuxカーネル2.4のRedHawk に移行させ、次にLinux カーネル2.6のRedHawkに最小限のソースコードの変更で移行することを可能にしました。
コンカレントのカスタマの多くは、合衆国軍によってまだ広く使われているAda言語で書かれたリアルタイム・アプリケーションを開発し、そして実行することを望んでいます。
コンカレントの MAXAda 環境は RedHawk Linux が持つ、リアルタイム・カーネルの豊富な機能を すべてAda 開発環境に提供します。
同様に、標準GNU CとC++開発環境と、高性能フォートラン開発環境に対してもリアルタイム・カーネルの豊富な機能を提供します。
NightStarTMツールと呼ばれるオプションセットの存在は、RedHawkの付加価値の多くを占めています。
NightStar ツールは、RedHawk Linux に含まれているリアルタイム・エンハンスメントを行ったカーネルの長所を最大に利用した、リアルタイム・アプリケーション開発の解析ツールとデバッキングツールを提供すると共に、リアルタイムシステムをターゲットにしたシステムチューニングツールも提供します。
NightStar ツールは、混在して記述されたC, C++, Ada と FORTRANのアプリケーションプログラムをデバッグして、分析することが出来ます。
コンカレント社では、RedHawk の価値を高めるハードウェアインテグレーション、カスタムエンジニアリングサービス、保守契約と大規模なエンドユーザドキュメンテーションサービスを行っています。
リアルタイムプロセスのためのシステムでリアルタイムへのコンカレントのアプローチの中核に特定のCPUの留保であるプロセッサシールドの考えがあります。
プロセッサシールドが働くためには、システムに1つ以上のCPUが無くてはなりません、そして40年の間に出荷された、ほとんどのコンカレント社のハードウェアソリューションはSMPアーキテクチャーで、しばしば洗練された NUMA システムをサポートしていました。
マルチ・コア・プロセッサが広く利用可能である今、シールドを利用することができるプラットフォームの数は爆発的に増加しました、そしてこれは高価でないシングルプロセッサコンピュータが非常に効果的なリアルタイムソリューションになることができるようになったと言う事です。
RedHawk カーネルは、プロセッサシールドの構成を設定し、そしてコントロールする便利なユーザレベルツールを提供します。 例えば、シールドコマンド(shield)は、IRQ割込みやローカルタイマ割込みでさえ、指定したCPUセット上のプロセスに発生するのを動的にブロックすることができます。
専用CPU上で走っているリアルタイムプロセスは、割込みが無いために、事実上キャッシュの干渉が無く、プロセスの決定論(determinism)が劇的に改善します、そして重要なことはプロセッサの最大性能が保証されます。他のどのようなリアルタイム機構もこのレベルの決定論(determinism)を提供することはできません。
コンカレントのプロセッサシールドの実装は、比較的小さなカーネル拡張のセットから成り立ち、(Ingo Molnar氏によって開発された PREEMPT_RT パッチが提案している"sleeping spinlocks”の様な)カーネルのスピンロックと割込みモデルの全体的な再設計ではないと言う点が重要です。
この低レベル-オーバーヘッド・アプローチは、PREEMPT_RT アプローチでは到底得る事が出来ない様な、ソリューションの実現性、およびシステムの安定性と複雑性に対する影響を最小限に抑えるような劇的な強化が成されています。
RedHawk は実行プロセスがカーネルに、短い期間プリエンプションされない事を可能にするユーザスペース機構を提供しています。
この機能は、カーネルに組み込まれた再スケジュール変数と呼ばれる、特別なメモリ位置のプロセスレジスタを持つことによって、実現されます。
プロセスは、システムコールを行うことなく、再スケジュール変数に書くか、あるいはクリアすることによって、プリエンプションをコントロールすることができます。
この機能は RedHawk のユーザレベルライブラリ全体で使われ、ユーザレベルスピンロックの信頼できる速い実装を提供するために使われています。
RedHawk には、プロセッサ間割り込みの発生を最小化する必要から、拡張グラフィクス・ドライバが含まれています。このグラフィクス・ドライバには、オープンソースドライバとポピュラーなNVIDIAドライバのような独自ドライバの両方が含まれています。
プロセッサ間割り込みの抑制は、主として、新しいページがグラフィクス・ドライバによってマップされるときに、TLBフラッシュの洪水が発生しないように、ブート時にグラフィクス・ページを前もって割り当てる(プリアロケーション)機構を提供することによって達成されています。
例として、NVIDIA社のCUDA開発環境に添付されている例題プログラムが使用するメモリ量は、以下の様に10Mバイトから20Mバイトにも達するものです。
プログラム名 |
ページ数(4096バイト/ページ) |
Clock |
2586 |
SobelFilter |
3458 |
SobolQRNG |
2586 |
3dfd |
2586 |
Mandelbrot |
3458 |
oceanFFT |
3714 |
Particles |
3458 |
eigenvalues |
2586 |
radixSort |
2586 |
smokeParticles |
3938 |
reduction |
2564 |
これだけのメモリ量を、GPUはNVIDIAグラフィックスデバイスドライバにLinuxカーネル内のバッファとして確保する様に要求します。
この要求により、NVIDIAデバイスドライバで、カーネルメモリ割り当て関数の呼び出しが行われ、結果として、マルチコア間のキャッシュの不整合とTLBバッファのフラッシュという副作用をもたらします。
これらのイベントは、プロセッサ間割り込みとして処理され、オーバーヘッドとジッターとしてアプリケーションに影響を与えます。
実際、先の'smokeParticles' をシールドを併用して、60秒の間PDL(Process Dispatch Latency)試験を行うと、プリアロケートを行わない場合は、プロセッサ間割り込みの数は4010回で、PDLの最大87μ秒でしたが、プリアロケートを行った場合では、プロセッサ間割り込みの数が3回と激減し、PDLの最大も22μ秒になって、プリアロケートのジッター抑制効果が高いことが理解できます。
RedHawk は、協調して動作するスレッドあるいはプロセス・グループ間に使われる高速な、そして効率的な sleep / wake 機構を提供しています。 このサービスは SGI社 によって開発されたオープンソースPost/Wait のパッチに基づいています。
しかし、アトミック wakeups を保証し、決定論(determinism)を改善するために再スケジュール変数を利用したものに改良されています。
RedHawk は、独自に開発された周期ベース・スケジューラ(FBS)と、スタンダード Linux プロセススケジューラを提供します。
FBS はユーザに周期的な実行パターンで処理行なうことができるようにする高分解能タスクスケジューラです。 FBS はオーバーラン検出を持ったメジャーとマイナサイクルを利用して多数の、調和したプロセスの周期的な実行をコントロールします。
パフォーマンスモニタ(PM)が、それぞれのスケジュールされた実行フレーム間にCPU使用率を見るために供給されています。
FBS インターフェースは、開発されてから数十年にわたって拡張され続け、今データ収集、シミュレーションとプロセス制御のような古典的なハード・リアルタイムアプリケーションのために最適化された理想的なスケジューラと言えるでしょう。
FBS のために書かれたアプリケーションは、ここ数年にわずかしか変更を必要としなかったのに対して、その同じ期間に Linux スケジューラはヒューリスティックな負荷バランシングと公平性スケジューラの両方の微妙な変化のために多くの書き直しを余儀なくされました。
Intel Nehalem QuickPath システムとAMD Opteron HyperTransport アーキテクチャを使う RedHawk システムではNUMA ファシリティの全ての長所を利用することが出来ます。 コンカレントは、特定のプロセッサ(あるいはコア)と特定の NUMAノードの両方にプロセスをバインドするための単一ツールを作成し、他のプロセス環境設定とともにメモリポリシーの指定を行えるように実行コマンドを拡張しました。
RedHawk では、所定のプロセスページのフルセットを、一つのNUMA ノード上で、ローカルであることを保証する重複ページの機能を提供することで、外部ノードからのすべてのアクセスを排除し、プロセス決定論を改善しています。
NVIDIAグラフィックカードを実装しているNUMAシステムでは、プリアロケートグラフィックページを指定のNUMAノードに割り付け、性能を向上させる事が出来ます。
RedHawkの起動時には、ディフォルトのプリアロケートグラフィクスページは、4Gバイト境界より低いアドレス位置に全てのNUMAノードからインタリーブアクセス可能な状態で設定されていますので、これを下記の手順で再構成します。
1.最初の手順は、すべてのグラフィックプログラムを終了させて動作させるため、rootでloginし、init 3を実行します。
2.メモリシールドをON(-m1)し、すべての割り込みからCPU4-CPU11をシールド(-a 4-11)します。
3. /proc/driver/graphics-memory を表示し、現在の設定を確認した上で、0を書き出して、プリアロケートグラフィックスバッファをクリアします。
(Node3にはグラフィクスページが割り付けられていなかった事に注目してください)
4. runコマンドにbashを指定してNUMAノード1,2上にグラフィクスページをインターリーブオプションで作成し確認します。
続けて、プリアロケートバッファの状態を確認し、bashを終了します。
このとき、--mempolicy interleave=4,8は、CPU番号指定です。
したがって、NODE1のスタートが4、NODE2のスタートが8になり、この2カ所のメモリをインターリーブ(交互)に使用します。
5.最後にinit 5でXを起動して設定は終了です。
この状態で、グラフィクスアプリケーションを、CPU 4からCPU11に割り付けることにより、もっとも効率良く使用できます。
また、実際の使用率は”numastat”コマンドで、確認することが出来ます。
numa_hit |
ノードから割り当てを要求され成功したメモリの回数です。 |
numa_miss |
ノードに割り当てることのできないため、別のノードに割り当てられたメモリ割り当て回数です。 |
numa_foreign |
別のノードでメモリを割り当てることに失敗し、このノードから割り当てられた回数です。 |
interleave_hit |
このノードで成功したインタリーブドメモリ割り当ての回数です。 |
local_node |
ローカルノードに作成されたメモリ割り当て回数です。 |
other_node |
非ローカルノードに作成されたメモリ割り当て回数です。 |
コンカレントはリアルタイムソリューションが可能なコマーシャルオフザシェルフ(COTS)ハードウェアを使用することをコミットしています。
しかし不幸にも、 COTS ハードウェアの多くは、下記の理由からリアルタイムの使用に適していません。
● システム BIOS はPCIスロットIRQ割り当ての細かい制御を許しません
● システムはディセーブル出来ないデバイスを持っていて、なおかつPCIスロットとIRQを共有するために物理的につながっています。
● ファームウェアが生成するディセーブル出来ない周期的なSMI 割り込み
● ハードウェアはハングしたシステムをデバッグするための、マスク不可能割込みを生成するための機構に欠けています
● チップセットによっては、リアルタイム性に対しての固有の問題を持っています。
コンカレント社によって認められたリアルタイムの条件に適合するシステムは、 iHawkTMシステムと呼ばれ、リアルタイムソリューションのための公認システムリストに含められています。
評価されたシステムは、コンカレントの自動化された終夜テストシステム(ANTS)に統合されます。
出荷された iHawk システムの次の新しいバーションが出荷された場合、ボードレベル変更と新しいチップセットリビジョンがリアルタイム性能に影響を与えないことを保証するために、再度評価が行われます。
公認 iHawk COTS システムのリストには、Fujitsu, NEC, Dell, HP, Supermicro, Tyan と Newisysなど多くのベンダがあります。 また、RedHawk は、種々のIBM BladeCenter ブレード環境もサポートしています。
コンカレント社のカスタマの多くは、VME ベースのシステムを運用しているため、 RedHawk のVMEバージョンが存在します。
コンカレント社は、PCIホストから多くの異なったスタンダード VME I/Oボード使うことができる光ファイバーケーブルで接続する、PCI-VME バスブリッジを提供します。
さらに RedHawk はマルチコアのインテルプロセッサを走らせている数枚の異なった VME ベースのボードを選択することも出来ます。そしてこれは、VME 技術を使うことを望むカスタマが RedHawk PCIベースのプラットフォームから2つの異なったアプローチ (ネイティブ VME あるいは VME 入出力ブリッジ)の中から選択することができます。
RedHawk は、アナログ/ディジタル変換(A/D)、デジタル/アナログ変換(D/A)、ディスクリート入出力(DIO)と、MIL-STD-1553 (航空機) や NTDS(船舶), CAN bus (自動車)等の多くのリアルタイムに最適化されたデバイス・ドライバを提供します。
コンカレント社によって出荷されたほとんどすべての iHawk システムには PCI と PMC 両方のフォームファクタで利用可能なコンカレントで開発された Real-Time Clock & Interrupt Module (RCIM) が含まれています。
RCIM は外部装置割り込み、割り込みを発生させることができるプログラマブル割り込みジェネレータとリアルタイム時計タイマと外部コネクタを提供しています。
複数システム上で RCIMを接続し利用することで、非常に高い正度のクロックを複数マシンで同期させることができます。
この接続によって、複数のシステムが物理的に同じシステムクロックを共有するため、RedHawk FBS を利用している同期プロセスをマスターシステムから制御することが出来るようになります。
そしてRCIMはオプションとして極めて高い精度のGPS受像機とoven-controlled水晶発振器を取り付けることができます。
RedHawkは、リアルタイム・アプリケーションとカーネル・ドライバがミスマッチしている複雑な問題を単純化するための解決方法を提供しています。
Redhawkカーネルには、リアルタイム・アプリケーションの実行を妨げないで、カーネルの動作を追跡する機構が標準で組み込まれNightTraceTMツールで、ユーザレベルアプリケーションとカーネルのトレースを視覚的に同時表示する事が出来ます。
コンカレント社は、何年もの間フリーソフトとオープンソース・コミュニティで活発に活動していました。
現在コンカレント社は、run,cupid,nuuのオープンソースプロジェクトを後援し、コンカレントカーネル開発チームのメンバは、 Linux カーネルメーリングリストにバグ修正と機能のパッチをポストしています。
これまで、投稿したパッチは、高解像度タイマ、ポジックスタイマ、カーネルデバッガ、 RCU 、POSIXメッセージキュー、グラフィックスドライバ、 ptrace 、 NUMA とNFSがあり、いくつかのパッチは、 Linux カーネルの最新のバーションに取り入れられています。
現行のRedHawk6.0は、以下のような特徴を持っています。
● リアルタイム・エンハンスド2.6.36 Linux カーネル
● 最新のIntel と AMD マザーボードとチップセットサポート
● システム当たり64 コア以上のサポート
● NUMA拡張とリアルタイム性能に最適化された最新のNVIDIA グラフィックドライバ
● 最適化されたCUDA 並列コンピューティングSDK
● ハードウェアとソフトウェアイベントのためのLinux パフォーマンスカウンタ
● NUMAプラットフォーム用の新ページマップアドレス表示ユーティリティ
● KVM Linuxカーネル仮想化サポート
● IPV6標準サポート
しかし、RedHawk の将来のバーションには、もっとずっと多くの機能と拡張が計画されています。
これらは、コンカレントのリアルタイムユーザによって最も求められる機能から優先的に統合されていきます。
また、コンカレントは kernel.org によって受け入れられ、変更が閉じた版をコミットしています。
したがって、完全なPREEMPT_RT パッチは、十分安定し、そして強力であることを証明されkernel.orgのメインストリームカーネルに受け入れられた時に適用されます。
決定性と低遅延のリアルタイム・アプリケーションを開発するための、 ベストなPREEMPT_RT をコンカレント独自に開発された機能と結合する RedHawk カーネルは、非常に強力な、そして用途が広い環境をカスタマに提供するでしょう。